LINUX.ORG.RU
решено ФорумTalks

О проблемах СИ, о проблемах СИ++, и вообще помогите разобраться что творится в мире этом?

 , ,


0

3

Только что сидели в дискорде с человеком одним, написавшим бота чисто на ИИ(по его словам), по виду не особо разбирающегося в том, как работает сам бот и что он делает. Естессна, вспомнив про то, что вокруг одни говноеды и тру-кодеры вымерли (цитируя: Когда-то на нём писался практически весь софт, и понятие «быть программистом» однозначно и безальтернативно включало в себя «знать Си».), я поднял панику. Откуда не возьмись выскачил ещё один чел, который прямо пошёл на меня со словами следующими:

[22:45] ну по твоим же словам
[22:45] если ты си-процедурщиков превозносишь
[22:46] язык с кучей проблем с безопасностью памяти

язык с кучей проблем с безопасностью памяти

Часто читал об этом. В ответ упомянул, что есть безопасный Раст, крайне нелюбимый львиной долей ЛОРа. Как вдруг тот же чел выдвигает своё сильное заявление о том, что Rust - это не альтернатива СИ, и что альтернативой СИ будет Zig(я никогда про него не слышал).

[22:49] зиг - альтернатива си
[22:49] превозносить си, который любой функциональщик будет презирать
[22:50] любой, кто пишет на хаскеле, лиспах

Пишу чуть ли не ночью, поэтому сейчас туго соображаю. Что за Zig? Кто начал форсить Rust как альтернативу C? Не сам же я это придумал. И с каких пор C теперь не в почёте?

Перемещено hobbit из general


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

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

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

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

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

Можно ли размешивать суп молотком? Можно.

Умеет ли размешивающий молотком суп, забивать гвозди? Умеет.

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

- - -

Если какой-то механизм или инструмент нужно как-то по-особому ОСИЛИВАТЬ - ему явно не место среди людей. Собственно С++ появился не просто так ;)

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

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

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

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

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

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

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

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

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

Если код, делающий одно и то же, на одном ЯП занимает 20 строчек, а на другом 100 строчек - то дядька может себе позволить задать риторический вопрос: ну и напуркуа? Ребенок не может.

Ну а с С, да. Можно сделать что угодно. Даже буханку хлеба и троллейбус.

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

Собственно С++ появился не просто так

Это эффект второй системы. Программистов понесло всё усложнять на ровном месте. C++ это худшее, что случилось с индустрией. Улучшенная сишка могла бы быть похожей на го, но видимо вторая система всегда неизбежна. Только очень долго ковырялись с этим дерьмом, и до сих пор многих не отпускает.

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

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

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

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

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

C++ это говнище из говен, создателей расстрелять !

Но его появление (не Go, не Rust, не Pascal) очевидно имеет под собой веские причины. Причины эти расписаны вдоль и поперек, и в целом людям не понятна необходимость их существования и какие они дают преимущества кроме того что старперам было лень это внедрять.

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

– Ты что там опять под одеялом делаешь?!
– (достаю и показываю клаву)

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

В разумном диапазоне.

Если для каких-нибудь драйверов или модулей ядра эти миллисекунды и килобайты критичны, то в условной Krit'е, сожрет она 512 Мб, или 1024 Мб - в принципе пофигу, потому что в прикладных приложениях ресурсы уже давно жрет контент, а не его обработчик.

Равно как и пофигу, запустится Krita за 10 секунд, или аж целых 15.

А вот простыня из единообразных strcat \ memcpy \ free \ malloc(sizeof()) - программистов пишущих целостный проект таких масштабов - таки раздражает.

И раздражает не только твоя простыня, нет. Хорошо, ты где-то забыл(а) освободить память, программа течет, ССЗБ и все такое. Но как быть, когда ты вынуждена использовать сраный GObject чтобы дружить с другими приложениями, выделяешь память, проделываешь операцию, освобождаешь память, а небольшая утечка все же остается, ммм?

Так вот в случае если язык сам по себе имеет GC или хотя бы компилятор кукарекает о не существующем высвобождении (цука, о том что int function() не содержит return, оно предупредить может, о том что unused variable может, а о том что malloc не имеет в дальнейшем free - нет?) - таких детских косяков просто не будет.

И да, с момента начала этого спора, из интереса перелопатил гиты десятка крупных и всем известных проектов, написанных на С. Везде одно и то же - memory leak, segmentation fault безымянный, и тд.

Такое впечатление, что вокруг одно нубье, согласно Stanson i firkax. Может вас «профессионалов» лучше закрыть в резервации и показывать за деньги, как реликты?)

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

Цыц. C++ единственный язык, полноценно умеющий и в низкоуровневщину, и в высокоуровневщину. Попробуй сам скрестить ужа с ежом, и чтобы не получилась заумь.

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

Если для каких-нибудь драйверов или модулей ядра эти миллисекунды и килобайты критичны, то в условной Krit'е, сожрет она 512 Мб, или 1024 Мб - в принципе пофигу, потому что в прикладных приложениях ресурсы уже давно жрет контент, а не его обработчик.

не пофигу. в том-то и дело. просто приучили юзеров к говну. но софт может работать оптимально. и то, сколько «жрёт контент» - это тоже вопрос к его представлению, обработке и прочему.

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

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

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

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

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

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

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

Есть язык программирования — Си. Такой, каким Природа и её Создатель задумывали программирование. А есть всяческие способы испортить программирование — ФП, ООП, CSP и прочие «кансепцеи». Есть концепция, что мы живём не одни во вселенной.

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

А есть реальная реальность, в которой абсолютно всё многообразие выражается с помощью таких понятий как байт, указатель, память. Ты же не будешь пытаться вырастить, например, розы исходя из каких-то концепций? Вот и не пытайся программировать на языке, сильно отдалённом от Си.

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

С т.з. машинного кода,

char *var = strcat("Hello ", "World");
ничем не отличается от
var := 'Hello' + 'World';

Вот только в Pascal сложение пяти переменных будет представлять собой одну красивую и логичную строку с плюсиками, что интуитивно понятно. А в C это будет стопка strcat'ов с читаемостью в районе нуля.

То же самое с массивами. Они ВСЕ - это области памяти. Но в одном ЯП работа с областью памяти устроена нормально, а в С через жопу.

Иными словами, сахарок ;)

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

Цыц. C++ единственный язык, полноценно умеющий и в низкоуровневщину, и в высокоуровневщину. Попробуй сам скрестить ужа с ежом, и чтобы не получилась заумь.

Смотря что ты считаешь под низкоуровневщиной.

С памятью может работать практически любой ЯП. Например мой любимый Пацкаль (во всяком случае старый, BP7) так вообще к системной памяти ему доступной, обращается напрямую, mem[сегмент:смещение] = byte_value. Можно было графоний рисовать напрямую без всяких драйверов, в видеопамять. Но мало какому кретину приходило в голову таким образом организовывать например присваивание массивам каких-то значений.

Так же само работа с портами IO. PORT[номер_порта] = byte_value, для извращенцев существовали кажется inport для чтения и outport для записи.

А перебираю некоторый софт на гите, писанный кстати на С, для работы с GPIO и RS232, так почти все полупокеры дергают /sys/class на уровне ФС. Низкоуровневые блин =)

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

Так уж не похож. На плюсах можно писать в 100% сишном стиле, вообще не трогая плюсовые фичи. «Не платим за то, что не используем.» (Только контроль типов пожощще, что скорее плюс.) Зато если мне вдруг приспичит vtable или RAII, мне не придётся это всё костылить.

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

Мелкое замечание, strcat в Си работает не так.

char buf[256];
strcpy(buf, "Hello");
strcat(buf, " world!");
X512 ★★★★★
()
Ответ на: комментарий от windows10

kernel Linux, kernel FreeBSD, gcc, libressl, nginx, h2o, knotdns, postfix, postgresql... да много их, все не перечислить даже примерно. на Си написаны сотни тысяч библиотек и утилит. тут вон dataman иногда создаёт темы про сишные утилиты. практически все утилиты там - пример очень даже неплохого и полезного кода на Си.

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

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

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

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

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

kernel Linux, kernel FreeBSD, gcc, libressl, nginx, h2o, knotdns, postfix, postgresql... да много их, все не перечислить даже примерно. на Си написаны сотни тысяч библиотек и утилит. тут вон dataman иногда создаёт темы про сишные утилиты. практически все утилиты там - пример очень даже неплохого и полезного кода на Си.

Эммм, я не спрашивал за полезный код на Си, я спрашивал за комплексные приложения на Си.

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

Там выше я приводил пример, поэтому давай из категорий:

Текстово\табличные офисные редакторы;

Растрово\векторные редакторы;

3d-редакторы и САПР;

Трехмерные игры и реалтайм-стратегии;

Современные веб-браузеры (под современностью я подразумеваю возможность открывать ютубчик или хдрезку);

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

- - -

И вот тут уже будет злой Ой.

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

И даже что касается МК. Современные МК, и PIC и AVR, и ARM, и xTensa программируются с легкостью и на Lua и на MicroPython. В работе ничем не отличается от кода на С, а строк занимает меньше, выглядит красивее, баги ищутся и исправляются быстрее.

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

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

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

я таким говном вообще не пользуюсь.

Я не спрашивал каким говном ты пользуешься. Я спросил о существующем прикладном комплексном ПО, написанном на Си.

Ответ - мы оба знаем.

Либо комплексное ПО пишется на Си, после чего безбожно глючит, жрет память и переписывается на норм языке;

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

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

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

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

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

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

https://ru.wikipedia.org/wiki/Прикладное_программное_обеспечение

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

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

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

хотя из браузеров есть lynx и perf, например. просто море разных почтовых клиентов (я использую sylpheed). немеряное количество плееров. тот же mpv. и да, ffmpeg написан на Си и ассемблере. а его юзают практически все мультимедийные софтины.

не буду тратить время. сам сиди и занимайся самообразованием. загугли что-нибудь типа «C written software» и читай до усрачки.

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

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

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

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

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

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