LINUX.ORG.RU
ФорумTalks

Почему тулинг для Си такое дерьмо?

 


0

3

Программируем в колледже на Си, сейчас пишу свой минишелл. Из основных требований отсутствие утечек памяти. И все в разработке отвратительно, от самого си с его топорностью, до сборки до дебаггинга (это просто ад).

Си - отсутствие нормальной обработки ошибок, структуры с бесконечным синтаксисом со звездочками для передачи указателей. Возврат одного значения из функций или костыли с массивами. Отсутствие RAII. Постоянный выбор передать в функцию указатель на данные или вернуть новую (хз как лучше, кроме соображений о скорости при больших размерах данных).

Сборка - Makefile с его отвратительным неинтуитивным синтаксисом. Cmake нельзя.

Дебаггинг - в VSCode из коробки для проекта из больше чем 1-го .с файла ничего не работает. Да и не из коробки это работает коряво. Остается lldb и gdb, а это то еще веселье на проекте больше чем хэллоу ворлд. Valgrind тоже не самый лучший вариант. Приходится извращаться с дебагом через printf.

Смотрю на тулзы для разработки под современные SPA фреймворки и там можно найти все что хочешь для удобства.

Почему Си такое говно?

Перемещено Zhbert из development

Ответ на: комментарий от MOPKOBKA

Кто нибудь почитает и сделает вывод.

Спаситель заблудших, ё-маё. А на самом деле ты прям как в анекдоте:

- Обижаешься?
- Нет.
- А что делаешь?
- Выводы.
wandrien 👍👍👍👍👍
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

А потом такой чел с IDE головного мозга приходит на проект с 20-летней историей, которые ни в какие IDE не интегрируется, у него случается приступ жопки.

Суровая правда жизни.

wandrien 👍👍👍👍👍
()
Ответ на: комментарий от wandrien

Во первых, уверен это какая то выдумка, мне непонятно какие проблемы могут произойти, неужели вы храните весь код в бинарных файлах, и редактируете с помощью своих утилит? Но вам в любом случае нужен конвертор, вот через него IDE можно и заставить работать.

Во вторых, что случится то? Если будет запрет на IDE, буду писать без IDE, главное что бы деньги платили, хоть ручным дыроколом пробивать перфоленты, мне в общем то все равно. Это просто ускоритель.

MOPKOBKA 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Во первых, уверен это какая то выдумка

Напоминаю: мы находимся в теме, где ТС не осилил настроить VSCode. Выдумка?

wandrien 👍👍👍👍👍
()
Ответ на: комментарий от wandrien

На офф.сайте VSCode написано что это не IDE. Ну это мог бы быть и CLion, но я не пойму что ты хочешь сказать, кто то не смог бы настроить vim, или он был бы запрещен какими нибудь странными правилами, какую информацию мне это должно дать?

MOPKOBKA 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Ну и как IDE врубит свои продвинутые фичи на структуре проекта, которая для IDE не адаптирована? Ну вот лежит куча кода, и чо? IDE превращается в такой же редактор как VSCode по сути.

wandrien 👍👍👍👍👍
()
Ответ на: комментарий от wandrien

Ну типа оно его проиндексировать должно. Но тут 50 на 50.

Zhbert ☕☕☕☕☕
()
Ответ на: комментарий от wandrien

Ну и как IDE врубит свои продвинутые фичи на структуре проекта, которая для IDE не адаптирована?

Я не понимаю что такое адаптация под IDE. Я назвал автоподключение заголовков и автодополнение SQL, давай остановимся пока на них, допустим проект собирается через свои скрипты, это CLion умеет обрабатывать. Он подтянет все .c/.h файлы вместе со всеми сборочными флагами. Так как файлы подтянуты, а все символы уже в IDE, то автоподключение заголовочных файлов работает. Причем учитываются различные -DFEATURE=YES Теперь автодополнение по SQL, ну тут просто БД указать, если эта своя БД, самописная, то уже не работает. Отладка работает, автодополнение работает, тут я думаю и так понятно.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Удачки с автодополнением в произвольной IDE для кода GUI-ни на JS, где часть классов генерируется на лету бэком из данных в БД.

Суслика видишь? А он есть!

wandrien 👍👍👍👍👍
()
Ответ на: комментарий от wandrien

Удачки с автодополнением в произвольной IDE для кода GUI-ни на JS, где часть классов генерируется на лету бэком из данных в БД.

Ну у части классов автодополнение будет хуже, но оно все равно будет на основе вызываемых в коде методах, а в остальных будет очень даже хорошее, я не вижу большой проблемы в том, что некая часть функционала потеряется на определенном наборе классов. Некоторые вещи вообще никак не пострадают. Если у этих динамических классов есть JSDoc, то вообще ноль проблем, автодополнение будет работать по ним.

Но это просто пример плохого проекта, как такой тестировать, отлаживать, и запускать стат.анализаторы? Если его причесать, то и полная поддержка IDE автоматически появится.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 4)
Ответ на: комментарий от avg_linux_enjoyer

Меня заставляют использовать Си((

Возможно потому что ты учишься, а не пилишь свой стартапчик?

Gentooshnik
()
Ответ на: комментарий от avg_linux_enjoyer

Я думал платят за перекладывание json, а не за знание си

А ты в ПТУ что ли учишься, чтобы научиться по алгоритму тыкать в нужные кнопочки и идти на завод? Или всё же в ВУЗе? Если первое, то хз. Если второе, то могу тебя расстроить, но у вас ещё будет История, Физика, Матан, и ещё сколько то курсов не имеющих прямого отношения к перекладыванию json.

Gentooshnik
()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от shTigrits

Как это бессмысленное?

Я не про обучение говорил,а про рабочие проекты. И вот в них сейчас ассемблер смысла не имеет кроме каких-то небольших особо критичных мест.

Если неофит не будет понимать глубину кроличьей норы, что там внутри творится - он будет макакой.

Согласен.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от wandrien

мы находимся в теме, где ТС не осилил настроить VSCode.

Он учащийся,его дело - выполнять и сдавать учебные задания. А обеспечивать учебный процесс настройкой инструментов для обучения - это работа преподавателей. Ну или в учебном плане должно быть отдельным пунктом предусмотрены лекции и практические занятия именно по настройке VSCode,а не только по программированию. Смею заметить,что настроить какое-нибудь монстрообразное IDE это и сложнее и времязатратнее чем почти любое учебное задание написать. А у студента кроме программирования еще с десяток предметов которые тоже сдавать надо.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Если я добавляю функцию из заголовочного файла, или пакета который еще не был подключен в файл, то она автоматически добавляет use, import, #include.

А откуда эта автоматика знает из какого пакета эта функция?

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от watchcat382

Не знаю, не читал исходники. Анализирует файлы, видит символы, какой именно считает приоритетным не знаю.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от watchcat382

Учащийся, зато понтов сколько. Тролль он обычный. Так что пусть горит огнём =)

А что учебный процесс не организован, это да.

wandrien 👍👍👍👍👍
()
Ответ на: комментарий от Was2023

Безликий язык, никому не известный.

Кому надо - тем вполне известный. Учитывая что и делался он для «кого надо». А рекламы языка Ada действительно нет. И не надо. Пользоваться это никак не мешает,тем более что в Линуксе есть отличный компилятор gnat.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от realbarmaley

Я далеко не возрастной (щкольникъ ещё), а си и ассемблер осилил.

Когда я был молодой - я тоже так думал. А сейчас (55) уже так не думаю :-) Хотя раньше даже деньги на Си+асм зарабатывал. Но вот до истинных Гуру мне таки далеко.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Вообще все эти вещи в IDE ускоряют разработку, так что человек который пишет в vim будет медленнее просто.

Я так думаю что скорость написания программы определяется не средством редактирования исходника,а в куда большей степени мозгами того кто пишет.

Тут с исключениями, в мелких проектах такой человек может быть так же эффективен.

Готов допустить что я просто не сталкивался всерьез с достаточно большими проектами где текстового редактора бы не хватало. (и,кстати,у меня вовсе не vim и не emacs,а куда более простой редактор).

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от watchcat382

Я так думаю что скорость написания программы определяется не средством редактирования исходника,а в куда большей степени мозгами того кто пишет.

Влияет и то и то, вот например переименование класса, или добавление функции в интерфейс, IDE моментально выдаст все места которые это может затронуть, идеально переименует если это не динамический язык, а человек над этим будет потеть подольше явно. Тут сокращается и скорость набора, и выяснение где что находится. А уж визуальной информации сколько она добавляет!

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от watchcat382

Я так думаю что скорость написания программы определяется не средством редактирования исходника,а в куда большей степени мозгами того кто пишет.

Если вы только в начале пути, тыкаете в клавиатуру одним пальцем и мучительно вспоминате смутно вами понятые страницы учебника, то ИДЕшка вам не сильно поможет. Если вы не первый десяток лет в професии, чо там думать то.

FishHook ☕☕☕☕☕
()
Ответ на: комментарий от MOPKOBKA

Анализирует файлы, видит символы, какой именно считает приоритетным не знаю.

Вот это и есть самое плохое - пользоваться инструментом который «не знаю как работает». А потом импортируется функция не из того пакета и программист этого не заметит потому что понадеялся на «интеллект» своего редактора и не проверил что он там ему в исходник добавил. Поэтому я считаю что от автоматического переписывания исходника - зла больше чем пользы. Потом на отладке можно потерять куда больше времени чем было сэкономлено. Разумный и достаточный интеллект редактора - это максимум умение по кнопке перейти к месту где вызываемая функция определена чтобы можно было быстро просмотреть её текст при необходимости и тут же вернуться обратно опять одной кнопкой. И это пожалуй единственная возможность которой мне не хватает в «обычном» текстовом редакторе. Но и влезать из-за нее одной в какие-нибудь монстрообразные IDE,еще и на java написанные - что-то желания не возникает.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от FishHook

Если вы не первый десяток лет в професии, чо там думать то.

Над задачей думать естественно. Над архитектурой. Над тем как лучше ее решать ее средствами выбранного языка. И в этом действительно IDE не поможет.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Влияет и то и то, вот например переименование класса, или добавление функции в интерфейс, IDE моментально выдаст все места которые это может затронуть

Офигеть какая крута фича. Прям уникальная особинность IDE. В vim если мне нужно сделать рефакторинг кода на Си, к примеру поменл структуру в хедерном файле, то LSP мне подсвечивает красным все строки кода во всех файлах, прыгая по которым я меняю все что нужно.

а человек над этим будет потеть подольше явно

Поиск и замена одного слова/фразы есть даже в блокноте. В vim подобная замена делается элементарно через :bufdo сразу во всех файлах.

А уж визуальной информации сколько она добавляет!

Девки топплес танцуют на экране?))

iron 👍👍
()
Ответ на: комментарий от watchcat382

А потом импортируется функция не из того пакета и программист этого не заметит потому что понадеялся на «интеллект» своего редактора и не проверил что он там ему в исходник добавил.

Там видно что он добавляет.

Поэтому я считаю что ...

Если бы это замедляло, то это бы не включили в IDE.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от iron

Офигеть какая крута фича. Прям уникальная особинность IDE.

Да, если мы говорим о PHP. Для С/C++ у CLion свои особенности.

Поиск и замена одного слова/фразы есть даже в блокноте.

Ты заменил все слова Cat во всех файлах, но теперь вместо Catalog у тебя Dogalog!

Девки топплес танцуют на экране?))

Видны имена аргументов вызываемых функций и все такое.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Ты заменил все слова Cat во всех файлах, но теперь вместо Catalog у тебя Dogalog!

Открой для себя регулярные выражения.

iron 👍👍
()
Ответ на: комментарий от wandrien

Учащийся, зато понтов сколько.

Юность склонна к некоторой категоричности высказываний.

А что учебный процесс не организован, это да.

В том-то и дело,что по существу своих претензий к организации учебного процесса он абсолютно прав, хотя и высказал их возможно в несколько «тролльской» форме.

Вообще-то эти вопросы вполне можно обсуждать в конструктивном ключе с преподавательским составом учебного заведения. Обычно если студент в целом адекватный то прислушиваются. В конце концов надо-то всего лишь найти среди преподов (а то даже и студентов) того кто возьмется потратить время на тщательную настройку инструментария к которому претензии есть.

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от iron

Открыл, дальше что? Почему у тебя поле «private Dog cat;»? У меня после переименования в IDE стало private Dog dog;

MOPKOBKA 👍👍👍👍👍
()
Ответ на: комментарий от MOPKOBKA

Видны имена аргументов вызываемых функций и все такое.

Вот (imgur.com) кусочек кода который у меня сейчас перед глазами. О боги! Отображаются названия аргументов функций. Какая же уникальная особенность IDE.

iron 👍👍
()
Ответ на: комментарий от iron

И занимает весь экран, в IDE это текст мелким шрифтом. К тому же у тебя все сломалось, выше ниже посмотри, ничего не отображает он что то.

При отладке IDE показывает возле if чем они закончились, true или false, тоже очень приятно. И кто менял последний функцию, по гиту определяет.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

И занимает весь экран

Как мне удобно – так и отображается.

К тому же у тебя все сломалось, выше ниже посмотри, ничего не отображает он что то.

Не волнуйсь, так и нужно.

iron 👍👍
()
Ответ на: комментарий от iron

Как мне удобно – так и отображается.

Но сделать по нормальному не получится. Иначе придется переписывать уже не только плагин, но и редактор. Я верю что тебе удобно.

Не волнуйсь, так и нужно.

Думаю это сделано из за того, что иначе строка будет 200 символов. Угадал?

Кстати, с перегруженными функциями, это как работает? Просто интересно. Думаю у тебя clangd, он неплох.

MOPKOBKA 👍👍👍👍👍
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Но сделать по нормальному не получится.

Понятие «нормальности» у каждого разное.

Я верю что тебе удобно.

Спасибо что уверовал в мое удобство)

Думаю это сделано из за того, что иначе строка будет 200 символов. Угадал?

Не угадал. Отображаются только параметры тех функций которые мне нужны.

iron 👍👍
()
Ответ на: комментарий от MOPKOBKA

Кстати, с перегруженными функциями, это как работает?

Тут не подскажу. В сишке особо не поперегружаешь)

Думаю у тебя clangd, он неплох.

В яблочко.

iron 👍👍
()
Ответ на: комментарий от watchcat382

Я под осилением подразумеваю способность любой алгоритм и программу на языке построить (качество кода пока опустим). Разумеется, до гуру мне ещё очень очень далеко! Без теории алгоритмов, знаний высшей математики, et cetera, невозможно в принципе стать программистом. Ну, буду уже в ВУЗе это всё изучать. Но и без многолетней практики гуру не станешь :-)

realbarmaley
()
Ответ на: комментарий от watchcat382

Над архитектурой.

Ну блин. Окунемся же в реальность. Не сидишь ты каждый день в глубоких раздумьях над архитектурой. Архитектурные решения принимаются на стадии прототипирования/препродакшена/выбора стека и в реальном мире в основном диктуеются фреймворком и/или бест-практиками. Разработчик в основном кодит. Пишет контроллеры/сервисы/комоненты/что там в твоей архитектуре подразумевается под имплиментацией твоей самой лучшей в мире архитекруры. Обычно, на этом этапе мучительные раздумья не очень нужны.

FishHook ☕☕☕☕☕
()
Ответ на: комментарий от watchcat382

Кому надо - тем вполне известный. Учитывая что и делался он для «кого надо». А рекламы языка Ada действительно нет. И не надо.

Дело не в рекламе, а в наличии в т.ч и библиотек в штатном составе ОС.

Was2023 🤡🤡🤡🤡🤡
()
Ответ на: комментарий от watchcat382

Даже в наших хибинах есть аж две фирмы, которые разрабатывают сетевое оборудование. И обе на Си. Вполне себе проекты, зависит от задач.

shTigrits
()
Ответ на: комментарий от Was2023

Дело не в рекламе, а в наличии в т.ч и библиотек

Вот с этим аргументом согласен. Свободных библиотек для Ada действительно немного. Но подключение библиотек на других языках не требует особо титанических усилий. Хотя и чуть побольше писанины чем в Си написать #include

watchcat382 👍👍👍👍👍
()
Ответ на: комментарий от watchcat382

Свободных библиотек для Ada действительно немного.

Да и несвободных тоже не але. А вот си входит в практически любую ОС.

Was2023 🤡🤡🤡🤡🤡
()
Ответ на: комментарий от Was2023

несвободных тоже не але

Несвободные как раз вполне есть у тех кому они нужны. Вон тот же Боинг вполне на Аде пишет. И французкий аэроспейс всякий тоже. Понятно что потому библиотеки и «несвободные» что с нами никто ими делиться не будет.

А вот си входит в практически любую ОС.

Ни в коем случае не спорю что доступных сишных библиотек больше. Но как я уже говорил, их не особо сложно подключить в Аду,во всяком случае при использовании gnat. Если конечно это не совсем уж монстры типа например QT или GTK. Так с ними и в Си очень непросто разобраться и они явно не для небольших проектов окололюбительского уровня.

watchcat382 👍👍👍👍👍
()

расти человече, программистом станешь, все языки говно, по мере учёбы поймёшь зачем оно так сделано. Осиль gdb или борланд си юзай.

s-warus ☕☕
()
Ответ на: комментарий от monk

gtkada есть.

Есть-то оно есть,но сделано (было лет 10 назад когда смотрел) весьма примитивно и поэтому для использования из Ады неудобно. Похоже что как бы не вообще автогенерацией какой-то делали с минимальным ручным вмешательством. Может с тех пор что-то и изменилось,но так как в небольших проектах возиться с таким монстром как GTK смысла нет то я больше не заглядывал.

watchcat382 👍👍👍👍👍
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.