LINUX.ORG.RU
ФорумTalks

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

 


0

3

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

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

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

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

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

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

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

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

да, сразу бросилось в глаза ООП+асм.
хотя если это хорошо, то хорошо[+пташка]. кто я такой чтобы говорить в этом случае плохо?
хотя... hard-coded примитивы...

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

Кстати, а что плохого в отладке принтами?

Есть же assert(3), который куда функциональнее чем дебажить принтами.

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

Да, FASM это очень крутой ЯП. Я когда-то на нём тоже писал всякие интересные штуки в качестве хобби.

Практичности, конечно, в этом мало, но как вызов – интересно. Вроде бы на нём кто-то даже систему управления сайтом писал.

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

Это всё на макросах делается. Там макроязык мощный.

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

Что-то мне подсказывает, что отладкой чего-то серьезного ты не занимался.

Кстати да. Если человеку отладчик нужен как воздух, как ТИПОВОЕ средство написания кода, значит он в самом начале пути программиста.

В моей практике отладчик gdb — это когда «кровь, кишки, развалилось всё!». Вот крайний случай, когда мне туда приходилось лазить — по итогам разбора оказалось, что падение происходит из-за ошибки в одной из версии gcc, которая генерирует неверный фрейм функции.

А еще отладчик гораздо чаще бывает необходим в ЯП без статической типизации, нежели в компилируемых статически типизированных. Когда пытаешься понять «как сюда это вообще попало, чего здесь в принципе оказаться не может», а сам ЯП тебе в этом ничуть не помогает.

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

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

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

Ды нет, когда ЛОР’овцы обсуждали мой кроссворд, я в одном месте использовал goto и заплевали все, типо ты кривокодер

Ты лучше покажи поделие того автора, которое ЛОР’овцы не заплевали

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

Если ЛОР’овцы плюются, то это… ЛОР’верблюды?

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

Это fasm, классов там нету, они написаны на встроенных макросах.

MOPKOBKA ★★★★★
()

Программируем в колледже на Си

Поменяйте колледж на тот, в котором будут учить пограмировать на васике.

Makefile с его отвратительным неинтуитивным синтаксисом.

А вы хотели вариант «Сделай мне зашибись»? Вы пошли учится погромированию или на курсы домохозяек?

gdb, а это то еще веселье на проекте больше чем хэллоу ворлд.

Зато работает и ого-го как работает!

Valgrind тоже не самый лучший вариант.

Это уже про другое.

Приходится извращаться с дебагом через printf.

То что нужно... ну или вам «не нужно»... зависит от...

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

Когда пытаешься понять «как сюда это вообще попало, чего здесь в принципе оказаться не может», а сам ЯП тебе в этом ничуть не помогает.

Вот именно поэтому я всегда говорю, что для первого языка всякие пистоны негодны.

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

Ты лучше покажи поделие того автора, которое ЛОР’овцы не заплевали

Да и не только лоровца…

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

Кстати да. Если человеку отладчик нужен как воздух, как ТИПОВОЕ средство написания кода, значит он в самом начале пути программиста.

Мля… чувак в колледже учится. Отладчик - то, что ему необходимо.

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

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

Кто?

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

А еще можно сделать красивый ход — позвать сюда адепта Си и действующего преподавателя — @Croco, который, скорее всего, расскажет тебе то же, что я в первом сообщении, но не факт, то более мягко :)

Лучше Яну. Она его «на басухе» так «покроет» :)))

anc ★★★★★
()
Ответ на: комментарий от tiinn

Мля… чувак в колледже учится. Отладчик - то, что ему необходимо.

Ну пусть преподы дадут ему современный аналог Visual Studio 6, что там нынче эту нишу занимает, я не знаю. Или сами настроят интеграцию отладчика с VSCode, если там всё так сложно.

Си-то тут ни при чём, это «фишка» преподов дать ему такой инструмент.

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

пихать его не нужно куда попало = плохой тон. Вот только почему? Никто не объясняет.

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина... ну походили вы по улице Пришвина, а вот как вернуться на улицу Пушкина вы не знаете.

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

Я тоже хочу стейки есть как вы тут

Я ем стейки и пью всякие мерло/совиньоны. И при этом вся моя приближенность к айти - недавно вкоряченная в нашей компании 1С. Так что эти вещи мало друга от друга зависят. Вы все-таки подумайте над профессией.

utanho ★★★★★
()
Ответ на: комментарий от anc

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина... ну походили вы по улице Пришвина, а вот как вернуться на улицу Пушкина вы не знаете.

Один в один прям работу функций описал... Тогда никаких дополнительных проблем с ними(goto) нету, которые добавляют функции.

xwicked ★★☆
()
Ответ на: комментарий от no-such-file

Но в ряде моментов он даже для 70-х годов был отсталым

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

Прогрессивный, как хиппи и ЛСД. И хорошо бы его было оставить там же вместе с ними.

Virtuos86 ★★★★★
()
Ответ на: комментарий от tiinn

Ды нет, когда ЛОР’овцы обсуждали мой кроссворд, я в одном месте использовал goto и заплевали все, типо ты кривокодер

Ты лучше покажи поделие того автора, которое ЛОР’овцы не заплевали

Если показать плевательницу, ее не заплюют – «… не той конструкции»!

Virtuos86 ★★★★★
()
Ответ на: комментарий от anc

пихать его не нужно куда попало = плохой тон. Вот только почему? Никто не объясняет.

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина… ну походили вы по улице Пришвина, а вот как вернуться на улицу Пушкина вы не знаете.

Прям сны роботов какие-то :D. Как это вы не знаете, если сами прописали, что вас будет перекидывать на Пришвина в том месте, временная амнезия?

Virtuos86 ★★★★★
()
Ответ на: комментарий от anc

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина… ну походили вы по улице Пришвина

Это называется общественный транспорт.

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

запрещено линтером юзать goto

Ну так если линтер тупой и работает до препроцессора просто сделай макрос, если умный и после - эмулируй через ассемблерную вставку.

ya-betmen ★★★★★
()
Ответ на: комментарий от xwicked

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина... ну походили вы по улице Пришвина, а вот как вернуться на улицу Пушкина вы не знаете.

Один в один прям работу функций описал... Тогда никаких дополнительных проблем с ними(goto) нету, которые добавляют функции.

Разверните свою мысль пжлст.

anc ★★★★★
()
Ответ на: комментарий от Virtuos86

Вы идете по улице Пушкина к дому 23, вдруг напротив дома 21 фигак! вас перекидывают на улицу Пришвина… ну походили вы по улице Пришвина, а вот как вернуться на улицу Пушкина вы не знаете.

Как это вы не знаете, если сами прописали, что вас будет перекидывать на Пришвина в том месте, временная амнезия?

Я написал куда перекинуть, а как вернуться не прописывал. Более того, погуляв по Пришвина, вас внезапно перекидывает на улицу Лермонтова оттуда на «Park Avenue» и вот вы стоите на «Park Avenue», а как вернуться на улицу Пушкина 23 не знаете? Более того, таких адресов (Пушкина 23) дофига с учетом разных городов, вам адрес «Пушкина 23» в каком городе нужен? Ну и так... вспоминая новогодный фильм «Улица строителей...».

anc ★★★★★
()
Ответ на: комментарий от xwicked

Если просто заплевали за наличие оператора goto, то можешь смело юхан слать таких заплёвывателей.

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

С другой стороны, если у тебя будет повсюду goto, то у тебя на выходе получится спагетти-код. Такой код довольно сложен в отладке по очевидным причинам.

P.S. Вообще, имей в виду, что в сети в целом, не только на лоре, есть мода называть всех дураком. Делай скидку на это.

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

Можно пример твоего кода, на который ругается линтер при использовании goto? Какой линтер используется?

grem ★★★★★
()
Ответ на: комментарий от anc

Я написал куда перекинуть, а как вернуться не прописывал.

Тогда вы мудак, но при чем тут goto? Чисто человеческий фактор.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Dorif

В биологическом покрывает самец самку, так что… Хотя, учитывая современные нравы, так даже интереснее получается.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

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

Dorif ★★★
()

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

Makefile - максимально интуитивен, а cmake - кусок говна с платной документацией :)

sergej ★★★★★
()

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

сишечка как обычно божественна, это просто у тебя проблемы с ней :)

sergej ★★★★★
()

Дебаггинг - в VSCode из коробки для проекта из больше чем 1-го .с файла ничего не работает.

Вендузятник-мышевоз. Для твоих нужд CLion придумали.

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

Потому что создан для тех, кто умеет и хочет думать. Любителям смузи прямая дорога на Python.

Vilicus
()
Ответ на: комментарий от masa

У вызова функции есть адрес возврата, у goto - нет

Разговор о читабельности кода. Пошли отмазки. Множество функций делает код тяжелочитабельным, как и goto.

xwicked ★★☆
()
Ответ на: комментарий от Zhbert

Вот именно поэтому я всегда говорю, что для первого языка всякие пистоны негодны.

С аннотацией типов питон вполне юзабелен. Даже что-то сложнее hello world написать можно.

PRN
()
Ответ на: комментарий от Dorif

В матерном смысле, или в биологическом?)

Угадайте с трех раз. :) Хотяяяя и биологический момент тоже может оказаться, натравит на него свою игуану... а рептилии они такие... дай только человеченки покушать... :)))

anc ★★★★★
()
Ответ на: комментарий от Virtuos86

Тогда вы мудак, но при чем тут goto? Чисто человеческий фактор.

Именно при том, что это дорога в один конец.

anc ★★★★★
()
Ответ на: комментарий от Vilicus

Ну, не, на Питоне тоже писать можно по-разному. Хотя да, простор для быдлокодинга пошире будет.

Dorif ★★★
()
Ответ на: комментарий от hateyoufeel

Про переносимость UNIX разговора при изначальной разработке не было, оно пилилось под PDP и только под PDP изначально и работало.

Ну правильно, потом для этого ассемблерного UNIX-а сделали низкоуровневый язычок - чисто для системных целей, а не для бухгалтерских задач:) А потом - ну прям совершенно случайно - взяли и переписали UNIX на Си. Естественно, когда переписывали, даже в мыслях не имели потом переносить этот код на другие железки!)) Там же работали люди ну абсолютно тупые - которые даже на шаг вперед не планировали свои творческие действия… ))

достаточно низкоуровневый, но универсальный язык

Мне нравится, что упоротые сишники не видят никакого противоречия в этих словах.

А может просто научиться воспринимать смысл читаемых слов не отрываясь от контекста и не приписывая всем подряд какие-то напридуманные ярлыки?) «Универсальность» - она всякая бывает и, естественно, в границах соответствующей предметной области. Несложно же было догадаться, что речь шла о переносимости языка на различные железки с сохранением именно низкоуровневости. И «язычок» получился в этом смысле ну очень удачный)

vinvlad ★★
()

Потому что С/С++ - это удел бородатых дедяк с мпх меньше чем ushort. Сдай лабу и забей.

Hg194
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)