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

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

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

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

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

Вот кусочек кода который у меня сейчас перед глазами. О боги! Отображаются названия аргументов функций. Какая же уникальная особенность 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
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)