Почему C — единственный язык, который не врёт, а всё остальное — просто сахарная вата на ассемблере

Pixelfucker
2026-08-02 15:31
Опять двадцать пять: очередной кодер на Python вчера доказывал мне, что его язык «проще и быстрее разрабатывать». Ага, пока не полез в память и не спросил, где у него утечка. С 1995-го пишу на C — и знаете что? C не врёт. А вот всё остальное — просто сахарная вата на ассемблере, которую выдают за прогресс. Смотрите: в C ты сам управляешь памятью, сам думаешь о выравнивании структур, сам знаешь, где у тебя переполнение буфера. Да, это больно. Но когда ты наступаешь на грабли — ты их видишь. В C++ тебе подсовывают умные указатели, и ты думаешь, что память — не твоя забота. Спойлер: она твоя, просто компилятор молчит, а потом прилетает UB и валит прод в три часа ночи. Возьмём Rust. Модно, безопасно, но попробуй объяснить borrow checker, почему тебе нужно два mutable-указателя на один вектор. Он тебе не даст, будет истерить. А в C я просто сделаю два указателя и буду знать, что делаю. Или не знать — но это моя проблема, а не линтера с пафосом. Теперь про «производительность». Go, Java, Python — все они под капотом компилируются или интерпретируются, но ты никогда не контролируешь, как именно. В C я пишу цикл и знаю, что он скомпилируется в три инструкции на x86. Я могу посмотреть дизассемблер и ткнуть пальцем в каждый байт. А ты в своём Go посмотришь в горутины и будешь гадать, почему latency скачет. Конечно, скажут: «C — это старо, небезопасно, для системного программирования уже не модно». Ха. Я вам так скажу: ядро Linux, драйверы, микроконтроллеры, даже ваш любимый интерпретатор Python — всё написано на C. Без C не будет вашего «быстрого» Rails или Node.js. Вы просто не замечаете костыля, на котором стоите. Итого: C не для всех. Это как ручная коробка передач: неудобно в пробке, но ты чувствуешь машину. Хотите безопасность и абстракции — идите в Rust, но не нойте, когда он не даст вам сделать то, что в C решается за 10 строк. Я останусь на C, потому что он честен: если я налажал — это моя вина, а не баг среды. Ну и последнее: прежде чем спорить, откройте стандарт C11 и напишите простой memcpy без UB. Слабо? То-то же.
👍 1👎 1
Игорь_Прагматик
2026-08-02 16:51
Ну давай разберем. Спор про «честность» C — это всегда смесь правды и романтизации. Да, C не прячет от тебя память, и это плюс, когда ты пишешь драйвер или работаешь с железом. Но «не врёт» — это громко сказано. C тоже врёт: он молчит про data race, про неинициализированные переменные и про то, что твой `memcpy` на практике может соптимизироваться в вызов libc, а не в три инструкции, как ты ожидал. Просто его ложь — это тишина, а не сообщение об ошибке. Я согласен, что владение памятью — это база, которую полезно знать. Но из этого не следует, что все остальные — «сахарная вата». Rust не истерит — он статически доказывает то, что в C ты проверяешь глазами и опытом. Вопрос не в том, кто честнее, а в том, кто дешевле платит за свою честность. В C ты платишь временем на дебаг и фортраном в три часа ночи. В Rust — временем на объяснение borrow checker'у, что ты действительно имел в виду. И для 90% бизнес-логики второе выгоднее. А то, что ядро Linux на C — так это скорее инерция, чем аргумент. Иначе бы мы до сих пор писали на ассемблере — он вообще не врёт, там каждый байт видно. Но почему-то никто не зовёт это прогрессом.
👍 1
Pixelfucker
2026-08-02 17:42
Слушай, «тишина» — это не ложь, это честность в чистом виде. Ты сам сказал: в C ты проверяешь глазами и опытом. Вот именно. Я не жду, что компилятор будет за меня думать, я жду, что он сделает то, что я написал. А вот когда твой Rust молча решает, что мой код «небезопасен» и не даёт мне выстрелить себе в ногу — это и есть патернализм с сахарной ватой. Про `memcpy` — да, он может соптимизироваться в libc, но я это знаю, потому что смотрю на дизассемблер, а не потому что мне линтер запретил. И про data race — в C я хотя бы могу написать `volatile` и понимать, что происходит, а не гадать, что там borrow checker решил про мои потоки. Насчёт «инерции» Linux — это не инерция, это доказательство. Если бы был язык, который реально лучше для ядра, его бы уже переписали. Но нет, потому что C — это единственный язык, где ты можешь быть уверен, что твой код делает именно то, что ты сказал, без скрытых проверок и неявных копирований. А то, что 90% бизнес-логики проще на Rust — ну так иди и пиши свой CRUD на Rust, я не против. Только не называй это «разработкой системного ПО».

Войдите или зарегистрируйтесь, чтобы ответить.