LINUX.ORG.RU
ФорумTalks

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

 


0

3

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

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

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

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

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

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

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

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

Осиль gdb или борланд си юзай.

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

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

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

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

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

Си в итоге оказался эволюционно продвинутее тех ЯП.

Пушто при естественном отборе побеждает не самый навороченный, а самый приспособленный организм %)

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

Не, теперь ругается что нельзя функции в макро и должно быть константное значение

avg_linux_enjoyer
() автор топика

Радуйся что пишешь на «C», в некоторых ОУ до сих пор на паскале пишут и преподаёт это старый задрот с завышенным ЧСВ, который в жизни ни одного продукта до релиза не довёл.

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

типа UNIX System V, plan9, ну а ещё рекомендую изучить проекты от suckless, ещё можно почитать Кормен, алгоритмы.

100% полезный комментарий. 32 кофия этому господину.

lbvf50txt
()

до сборки до дебаггинга (это просто ад).

Если для вас Си так неприятен это звонок о возможности перемены профессии пока не поздно.

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

Потому что SPA фреймворки это для пользователей. А Си это для инженеров - для тех кто пишет новые фреймворки и новые языки.

lbvf50txt
()
Ответ на: комментарий от PPP328

Ужасные книги,

У Столярова отличные методички из 2000ных, коротко, сочно и по делу. Лучше него азы UNIX мало кто рассказывает.

автор не программист и не скрывает.

Да. Он талантливый препод и хорошо объясняет самые самые азы.

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

Да. Он талантливый препод и хорошо объясняет самые самые азы.

Если бы он ещё при этом кучу откровенной лажи «ученикам» в головы не пытался вложить - было бы совсем хорошо. Один его пассаж «vector - самый бесполезный контейнер» чего стоит. Да и вообще - тараканов там предостаточно. Единственное что лично мне в его книгах «зашло» - это введение (предисловие).

bugfixer ★★★★
()

Си - отсутствие нормальной обработки ошибок,

Обработка ошибок это высокоуровневая абстракция. На практике это обозначает добавление к вашей программе еще одной программы, которая будет обрабатывать ошибки. Это пристегнутая программа назнывается не нулевой рантайм.

В языке Си нет таких высокоуровневых абстракций, и к программе на Си практически ничего не пристегивается. Нулевой рантайм, что написали то и перетекло в двоичный код и запустилось на процессоре.

Си это просто низкоуровневый язык программирования.

lbvf50txt
()
Ответ на: комментарий от bugfixer

Один его пассаж «vector - самый бесполезный контейнер» чего стоит.

Это ведь уже не азы UNIX. У человека есть область компетенции, в рамках этой области с ним продуктивно взаимодейстовать.

Столяров это преподаватель по физике который борется с полупроводниками, и считает, что электроника должна быть на лампах. Это не означает, что он плохо преподает. Просто его область компетенци не растпространяется на полупроводники.

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

Столяров это преподаватель по физике который борется с полупроводниками

Мы сейчас одного и того же господина Столярова обсуждаем? «А.В.»? Преподавателя ВМК и автора серии книг «Введение в профессию» (и много ещё чего)? Или я Вас понял слишком буквально?

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

Это не означает, что он плохо преподает.

Если вам преподаватель по физике будет говорить, что электричество добывают из карапульков это норма? Спросите у господина Столярова, что он понимает под «чистыми функциями».

PPP328 ★★★★★
()

Вот за что я ненавижу универные программы так это за «ууууу нада с аснов начинать!!!1 Кнута читат! Прес качат!». Ну это все равно что прийти в качалку и начать жать самый тяжелый вес, чтобы потом легкий вес казался легким. Чтобы надорвать себе спину в 4х местах и забить на айти в целом. Забей на этих клоунов, мой тебе совет… Прогай на чем тебе удобно и как тебе удобно. Постепенно наращивай «прогерную массу», занимайся, дрочи коллег чтобы помогли или подсказали куда копать. Не надо кидаться на проблему и ох***вать от сложности. Делай постепенно, Рим не за один день строился.

Аверейдж лор энджоир только кажется грамотным. На самом деле ест х**цы с гречей ибо работает на кафедре теоретического фантазирования и кроме дрочки на кнута и кресты больше ничего не делает. Жопу луковицей вывернет с криком «Кресты наше все, ничего другого нинужна». Хотя на самом деле, в энтерпрайзе, используют разные языки под разные задачи. Столько срача просто не про что. Одни пуки в лужу лишь бы показать свое ЧСВ и «смарите какой я умный, а вы все дураки».

Вот приходят к нам такие лороведы, сопли пузырями, вим под нами, с++ в кармане. Говорю: напили по бырому микросервис который подписывается на топик в кролике, слушает кьюху и кладет обработанные данные в другую кьюху. Результат:

Пук среньк

Я грит в гит не умею. В докер тоже не умею. Кубер? Не не слышал.

А шо умеешь?

Ну могу про алгоритмы затереть

А ну все с тобой понятно пиноккио, иди сортиры чистить.

You know what I mean?

inb4: у меня у самого порой кишка выпадает от крестов. Особенно если эти кресты нужно подружить с каким нибудь другим языком, вроде Java или С#. Начинается бл**ский анал-карнавал с бриджами, бингингами, со сборкой этой заупы это отдельный секас. Еще к тому в контейнер нужно говна с лопаты набросить чтобы CI-ка не поперхнулась. А если не дай бох у тебя имейдж как-то нестандартно билдится, то велком мой дорогой друг, присаживайся блть, у нас тут как раз бутылка от прошлого разраба еще горячая. Так что я понимаю твою попоболь.

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

Вот за что я ненавижу универные программы так это за «ууууу нада с аснов начинать!!!1 Кнута читат! Прес качат!». Ну это все равно что прийти в качалку и начать жать самый тяжелый вес

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

Потому как один из основополагающих принципов методики преподавания – от простого к сложному.

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

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

как по мне я бы начинал бы не с алгоритмов.

  1. во-первых сначала маслятам нужно показать какие чудеса может технология. так сказать показать демку, дать код, пусть у себя локально скомпилят и поприкалываются. т.е это как прийти в зал где тренер сначала покажет тебе тренажеры, расскажет про группы мышц, инструктаж по ТБ, вот это вот все. Ну и покажет гигачадов, мол типо «и ты таким будешь если будешь тренится». Это нужно чтобы появилась «мотивейшен».

  2. начать с простого примера print(«Привет, медвед»). И постепенно вводить понятия такие как переменные, примитивы, циклы, ветвление, и т.д.

  3. Функции. Что это такое, нафиг это надо, и как круто можно делать. Не забыть про модули, и что не нужно писать все в одном файле. (Это важно, были случаи когда и такие приходили устраиваться, лол)

  4. Рассказать про объекты, массивы, кортежи, и про структуры данных. И показать писюн json. ЛОл.

  5. Бережно рассказать про сеть, запросы, параметры, вот это вот все. Дать простой пример сервера на express. И дать свободу творчества. Пусть каждый масленок придумает такую нибудь забавную для него/ее дроч и самостоятельно с ней потрахается. Ну пусть хотя бы напишет GET запрос который по параметру отвечает, ну или типо того

  6. Очень бережно про базы данных… Никакого SQL сначала, пусть хоть узнают нафиг они вообще нужны. Потом уже SQL и практика.

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

  8. ООП. Шо это? Нафиг это нужно и почему без этого не берут на работу.

  9. SOLID. Ну это уже для совсем поехавших задротов.

А дальше гонять по кругу с 3-го по 8-й пункт пока последний гумус не сдрыснет с кафедры и не останется только кучка каленных задротов готовых к нырянию в бочку с говном IT индустрии.

Unixson
()
Последнее исправление: Unixson (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

У Столярова отличные методички из 2000ных,

если не видел ничего лучше – может и так. Теорию даёт неплохо, но вместо примеров полная содомия.

коротко, сочно и по делу

нифига не «коротко»: каждую тему растекается мыслию по древу без схем, графиков и примеров. Открой книжку по nasm.

tt
()
Ответ на: комментарий от Unixson

Алгоритмы, уважаемый, это линейный, ветвления/выбора, цикла, а уж много потом всякие сортировки вставками. Ваше же «запросы в сеть» – это уже после Си и на Си, потому как это уже «прикладуха», а не обучение программированию. Как и БД и т.д.

Функции/процедуры вы не объясните, пока не подойдёте к проге, что разбухла или к алгоритму, где в разных местах надо делать одно и тоже.

Дать простой пример сервера на express.

Это тоже не программирование. Вы смешиваете всё в кучу, собственно, как это и принято в курсе «Информатика». «Пывбивав бы усих» за это.

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

Он умеет видеть сквозь неймспейсы? А если в двух разных неймспейсах одинаковые названия классов, он предлагает выбрать?

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

Возможно, эта функциональность сильно ограничена по сравнению с ide. Стандартную библиотеку он так добавляет. Но, к примеру, не видит, что в уже добавленном файле есть нужный инклюд. Я отключал эту функциональность.

andalevor ★★
()

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

Да.

Си — ЯП для старых пердунов, развиваемый и оберегаемый старыми пердунами. Они страдали — ты тоже страдай. Никто не помнит, почему этот ЯП такой, но все знают, что именно таким он и должен быть. Когда-то давно Pascal, он же Algol W, с норм типами данных и минимумом неопределенного поведения, чуть не стал стандартом для индустрии, но нам повезло, и потому теперь низкоуровневым стандартом стал C/C++. С чем я нас всех и поздравляю.

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

Никто не помнит, почему этот ЯП такой

Си такой, потому как был создан ради практических целей практиком программирования в условиях очень ограниченных машинных ресурсов и практически на коленке, а не в лаборатории программистами-математиками. Последние создали Лисп.

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

Си такой, потому как был создан ради практических целей практиком программирования в условиях очень ограниченных машинных ресурсов и практически на коленке, а не в лаборатории программистами-математиками. Последние создали Лисп.

Я бы не хотел писать о том, кто создал Лисп, потому что сообщение могут удалить. Язык Си, как и JS, как и PHP, вообще не создавались изначально как отдельные ЯП. Это был непреднамеренный маркетинговый ход, наращивание слоев совместимости, одновременно являющихся техническим долгом, но зато утята, из которых на 95% состоит IT, очень любят, когда новый инструмент похож на старый. Это плюс судьба Unix стали причиной его популярности.

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

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