LINUX.ORG.RU
ФорумTalks

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

 


0

3

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

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

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

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

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

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

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

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

кроме си на сегодняшний день относительно сбалансированных языков нет.

Есть Ada. Хоть сколько-нибудь существенных недостатков не имеет.

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

А ты когда машину ведешь или на метро едешь, тебе тоже принципиально важно понимать что там под капотом происходит?

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

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

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

Потому что С
это удел бородатых дедяк

Вы где бородатого Линуса видели?

с мпх меньше чем ushort

В каких единицах? Если в «традиционных сантиметрах» то Лука Мудищев нервно курит в сторонке.

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

Для нормального дебага с мультиоконностью можешь хоть BorlandC 3.1 взять

Кстати да! Когда я в 96-97 годах переходил из ДОСа на Линукс мне весьма не хватало в Линуксе этой удобной штуки,позволяющей буквально глазами видеть как по шагам код работает,а не восстанавливать мысленно ситуацию,анализируя то что отладочный printf написал. Другое дело что далеко не всякий код можно «отлаживать глазами»,например так не получится с кодом,критичным к времени обработки внешних событий. Но когда программист до этого добирается он уже обычно неплохо понимает как что работает. А вот для освоения программирования - борландовский компилятор был в самый раз. При том, он позволял писать и достаточно сложные вещи не переходя на что-нибудь другое,используя всё тот же знакомый инструмент.

watchcat382
()

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

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

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

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

Не люблю С++ с института. Как сказал мой согруппник, «Здесь ты с каждой кнопочкой потрахаешься, зато производительность». Ушёл сперва на Delphi, потом на C# - там не надо трахаться, там можно просто писать.

А вот насчет именно «плюсов» я пожалуй соглашусь. Не самая удачная попытка прикошачить к изначально явно низкоуровневому языку высокоуровневые абстракции. Даже к паскалю и то оно лучше прикрутилось и получилось Delphi.

Но и то и другое были первыми попытками внедрения объектно-ориентированного подхода в программирование. Поэтому и прикручивали к тем языкам какие были.

Для высокоуровневых абстракций действительно лучше использовать языки,изначально на это ориентированные.

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

Си прям очень хорошо выпрямляет руки.

Если сравнивать например старым бейсиком или старым классическим фортраном - то пожалуй что да. Но одновременно провоцирует на всякие трюки и хаки,которые хороши с точки зрения самовыражения но плохи если потом этот код поддерживать надо. Для выпрямления рук вообще-то лучше использовать более строгие языки - Pascal,Ada. Благо в Линуксе есть и то и другое(FreePascal,gnat).

watchcat382
()

Почему тулинг для дерьма должен быть недерьмом?

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

так и запишем: Жалкий неосилятор Си.

Осиляторов Си не существует, это миф.

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

Потому, что тем кто пишет под C (матёрые системные программисты) так нравится.

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

Это в 90е годы программист начиная писать свой проект на каком-нибудь языке часто не имел под руками ничего кроме стандартной библиотеки,прилагаемой к компилятору. Садишься писать на Си - у тебя только сишная библиотека,на Паскале - паскалевская. Всё что тебе в программе потребуется - пишешь сам,своими руками и головой. Максимум из каких-нибудь примеров куски кода позаимствовать можно.

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

Хотя вон недавно видел статью где человек сам руками написал аж реализацию клиентской стороны иксового протокола.

watchcat382
()

Нужен тег «срывание покровов»

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

Сам с этим сталкиваюсь.

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

Думаю если бы каскад старых существующих библиотек, то Си бы уже давно сдохло.

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

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

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

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

Идея о том что типы должны что-то там контролировать стала популярна последние лет 10-15.

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

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

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

На assemblere же кодят, почему вы в них не плюётесь?

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

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

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

Существования нормальных языков, операционных систем и машин

Есть у меня ощущение,что нынешние «нормальные машины» также далеки от нормальных как какой-нибудь Форд-Т далёк от нормального автомобиля. Архитектура ibm pc это вообще одно огромное нагромождение унаследованных костылей - это вам любой разработчик железа подтвердит. Процессоры x86 - тоже самое. Да и нормальность нынешних ОС тоже под большим вопросом. Даже Линукс и тот имеет немало очевидных сейчас именно архитектурных недостатков. А что ничего лучше нет - так это не значит что имеющееся нормально. Если не случится общецивилизационный откат по причине истощения материальных ресурсов и энергоносителей то есть шанс что через несколько десятков лет получим что-то действительно нормальное. Те же автомобили много проще компов,а им сотня лет потребовалась.

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

борландовский компилятор был в самый раз.

Ну и при чем здесь конпелятор?

При том,что у Борланда «компилятором» назывался некий очень удобный для освоения программирования комбайн из собственно компилятора в узконаучном смысле этого слова,отладчика и редактора с интерактивным хелпом по языку и сишной библиотеке. Всё это было изначально хорошо состыковано вместе и начинающий программист мог не отвлекаться на настройку всего этого по отдельности. Если говорить об обучении в колледже и на линуксе - то по уму это преподаватель должен быть скомплектовать и тщательно настроить аналогичную конструкцию из имеющихся компонентов. Правда я не знаю насколько сложно будет получить такой же уровень удобств как был у Борланда. (Еще могу вспомнить менее известный TopSpeed C - тоже «комбайн»).

watchcat382
()

Cmake нельзя.

Можно.

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

С CMake всё работает.

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

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

С CMake всё работает.

Человек хочет тех же удобств что в Borland C. И я его вообще-то понимаю. Крутым профи оно может и не надо,а вот для любительского или учебного программирования - в самый раз.

watchcat382
()

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

KDevelop попробуй. Поддержка проектов на Makefile, парсинг макро, интеграция с gdb.

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

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

Как нетрудно заметить, твой совет уже запоздал.

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

Я залез в недра Qt и охерел от количества мелких функций, которые друг на друга пересылают, я нихера не разобрался, а в goto вы плюётесь… Фанатики, вам запретили goto, теперь вы всем чешете про это, а большим количеством функций - всё тоже самое. Думайте всегда сами, а не читайте книжки.

Кстати да. Видал я одного, начитавшегося МакКоннела – он все большие функции назрезал по 20 строк, бессмысленно и беспощадно.

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

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

Когда-то давно - в прошлой жизни - приходилось довольно много писать на Ассемблере IBM 360/370. И, естественно, работать с текстами OS :) Надо сказать, что ихний Ассемблер - это просто песня по сравнению с интеловским!) И код операционки был настолько грамотно оформлен и отдокументирован, что с чтением исходников не возникало никаких проблем - и даже получалось делать в определенных местах кое-какие вставки, чисто на уровне прилинковки своего кода. IBM-овские мэйнфрэймы, кстати, благополучно здравствуют и по сей день)

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

Надо сказать, что ихний Ассемблер - это просто песня по сравнению с интеловским!)

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

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

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

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

При том,что у Борланда «компилятором» назывался некий очень удобный для освоения программирования комбайн

Нет, мухи отдельно, котлеты отдельно. Не путайте IDE с конпелятором.

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

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

У тебя отсталое представление об ассемблере. Посмотри все фичи которыми обладает fasm. При помощи макросов и прочих фишек там можно сделать даже свой мини язык, код которого потом будет очень легко дополнять и модифицировать. В последующем, программить на нем будет не сложнее чем на сишнике. И удобного тулчейна для дебага уже хоть ж*пой жуй. К примеру, radare2, я уже молчу про интерфейсы для gdb и lldb на любой вкус и цвет.

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

Нет, мухи отдельно, котлеты отдельно. Не путайте IDE с конпелятором.

Сам я имел дело с Борландовским продуктом Turbo C 2.0,так вот там было два главных «экзешника» - tc.exe и tcc.exe. Вот второй был именно команднострочным компилятором. А первый - комбайн из IDE,компилятора и отладчика. Про него я и писал что штука была удобная именно для освоения программирования,причем не только для начинающих а где-то до некоторого среднего уровня. Кстати,такой же комбайн был для Паскаля - TurboPascal 5.0

Сейчас конечно нет смысла всё в один исполняемый файл пихать. Но что у нас сейчас в линуксе может заменить тот «комбайн» чтобы также удобно было и не слишком монстрообразно (без явы и электрона какого-нибудь)? Я например смотрел на geany - по удобству не дотягивает до борланда тридцатилетней давности. Правда было это лет пять назад,может сейчас там лучше стало. Так и продолжаю уже много лет писать код в текстовом редакторе,компилировать посредством make,а при необходимости «походить по коду» вот nemiver приспособил. Благо «хождение по коду» мне давно уже не часто требуется. Но это - мне. Я и по отдельности знаю как что запустить. Начинающему будет сложно. Он в том же geany опять пожалуется на неудобство работы над проектом из более чем одного файла.

Вот на что не смотрел - это на FreePascal. Говорят у него в комплекте свое удобное IDE. Но это паскаль - язык почти чисто учебный,и для обучения очень хорош. Но потом всё равно придется и Си учить.

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

У тебя отсталое представление об ассемблере.

Не отсталое,а классическое.

фичи которыми обладает fasm. При помощи макросов и прочих фишек там можно сделать даже свой мини язык

fasm уже сам по себе довольно далёк от классического понятия «ассемблер». А если еще и «мини язык» то программа уже будет не на ассемблере,а на этом мини языке.

К тому же когда я писал про написание проекта на асме - я держал в уме микроконтроллеры,для которых нет fasm,а только классический ассемблер. Потому что сейчас писать на асме под x86 нет смысла кроме отдельных небольших функций в узкоспециальных случаях. В общем случае gcc генерит код лучше чем программист-человек на асме,причем это уже достаточно давно так.

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

Тяжело в учении…

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

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

Думайте всегда сами, а не читайте книжки.

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

А у goto, как я недавно писал, как минимум одно толковое применение – break из нескольких вложенных циклов. В Java это не нужно, там готовый break с меткой есть, а для плюсов в самый раз.

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

я в одном месте использовал goto и заплевали все

Поиском я драму не нашёл. Поэтому вангую, что «все» — это пара троллей-анонимусов (а может, и не анонимусов), которым всё равно что оплёвывать, лишь бы повод был. Остальной ЛОР просто прошёл мимо.

Ну и зависит от того, где и как ты его использовал, конечно.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

А чем не устраивает nelua.io вместо C, если для user space?

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

Линтер кастомный, скрипт на питоне который используется внутри колледжа. В принципе goto не получится, даже с ассемблерной вставкой как писали выше

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

Но что у нас сейчас в линуксе может заменить тот «комбайн»

CLion, больше живых IDE нету. Комбайны уже умерли, даже Visual Studio теперь поддерживает импорт проектов из CMake, компилятор Clang, и сторонний отладчик.

CLion работает так же, поддерживает CMake, компилятор и инструменты на выбор, ставь что хочешь и поддерживается.

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

Вендузятник

Ваще-то я линуксоид и на учебе у нас линукс. А дома как систему использую kali

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

В питоне нет типов (аннотации не считаем), поэтому думать там надо больше. Получается Си для любителей смузи кто не осилил питон

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

Мне надо в айти.

Вот и иди и не ной. Там тебя ждет на порядки более забористые вещи, чем вот то, от чего у тебя сейчас подгорает. Так что привыкай.

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

Вот и иди и не ной. Там тебя ждет на порядки более забористые вещи, чем вот то, от чего у тебя сейчас подгорает. Так что привыкай.

Я собираюсь в мобилки\веб или бэк на какой-нибудь яве. Там тулинг есть. А здесь говно старое с отсутствием тулинга с фанатами консерваторами

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

Я собираюсь в мобилки\веб или бэк на какой-нибудь яве. Там тулинг есть. А здесь говно старое с отсутствием тулинга с фанатами консерваторами

Все просто: бросай эту шаражку с старперами-преподователями, которые сами ни строчки продукшен кода не написали (не можешь делать, учи других). Начинай писать софт. Будешь писать как хочешь, что хочешь. Могут взять в кантору на зрплт в будущем. Но избегая сишку, хардкорным разрабом не станешь, а пополнишь армию смузихлебов.

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

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

Лучше хлебать смузи, чем жрать говно (с) Конфуций

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

Но надо отдать Сишке должное. Начал понимать почему некоторые вещи так устроены в более высоких ЯП. Устройство стека\хипа, работа с памятью без абстракций – это всем нужно, но немного. А вот дальше на этом писать что-то серьезное без адекватного тулинга это говноедство.

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

А вот дальше на этом писать что-то серьезное без адекватного тулинга это говноедство

Матерые профи тот самый «адекватный» тулинг и те самые божественные язычки считают говном. Пишут на сишке, плюсах в vim. Сурьезное такое пишут, ядра ОС и СУБД. Выбор могут обосновать но не будут этим заниматься. Велком в армию смузихлебов. Советую фронт и JS, там и тулкиты, и простой езычек, и востребованность самая большая.

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