После четырёхлетнего перерыва объявлено о возобновлении конкурса IOCCC (International Obfuscated C Code Contest), нацеленного на написание наиболее запутанного и трудноразбираемого кода на языке Си. Мероприятие IOCCC28 станет сороковым в истории конкурса, проводимого с 1984 года. Работы будут приниматься c 31 января до 2 апреля 2025 года. В отличие от прошлых конкурсов, отныне в исходном коде разрешено использовать кодировку UTF-8...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=62503
взять любой проект с автомаппером и меддиатром - и приз твой
Как сделать подобное дома:
- берем среднюю актуальную программу.
- пытаемся читать.
Я вот неделю уже ковыпяю программулину на C + QT и это просто какой-то ад! Ни один недочатбот не может понять, что там происходит, про себя я вообще молчу...
>Я вот неделю уже ковыпяю программулину на C + QT и это просто какой-то ад!На Си разве были биндинги к QuickTime? Я всегда полагал, что это чисто Objective-C приблуда...
при чём тут quicktime?
> при чём тут quicktime?Просто некоторые нудилы не могут пройти мимо и указать что у Qt вторая буква lowercased, а QT - это QuickTime. Потому что это ОЧЕНЬ ВАЖНО!!!!1111.
ичсх quicktime поддерживается в qt
В прежних мажорных версиях - может быть, сейчас - вряд ли.
Ты тоже считаешь, что автор первого коммента путает QT и Qt, C и C++?Мне кажется, у автора первого коммента будет ещё много очень, очень сложных программ в его жизни, в которых он никак не сможет разобраться.
>Мне кажется, у автора первого коммента будет ещё много очень, очень сложных программ в его жизни, в которых он никак не сможет разобраться.Ну да. Для программиста никак нельзя считать такие ошибки безобидными. Как же он пишет программы на языке, в котором в идентификаторах различаются строчные и заглавные символы?
>Просто некоторые нудилы не могут пройти мимо и указать что у Qt вторая буква lowercased, а QT - это QuickTime.Просто это набатный звоночек, если для программиста что Qt, что QT, что C, что C++ — одно и то же. Звоночек о том, что учиться нужно систематически, прежде чем пытаться "работать".
> Просто это набатный звоночек, если для программиста что Qt, что QT,"если аргументов не осталось прикопайся к правописанию" (с)
> что C, что C++ — одно и то же.
Чисто технически - да, прям как в теореме г-на Эскобара - две ʼальтернативыʼ степень качества которых очень похожа.
Ну.. может плюсы слегка получше будут, но не существенно.> Звоночек о том, что учиться нужно систематически, прежде чем пытаться "работать".
А где учатся чваниться и писать банальщину с таким менторским тоном?
Это специальные курсы какие-то?
>А где учатся чваниться и писать банальщину с таким менторским тоном?Это специальные курсы какие-то?
А ведь вы правы, мне аж стыдно стало :). Зря я докопался до неряшливого написателя, да ещё в новогодние каникулы. Приношу свои извинения.
> А ведь вы правы, мне аж стыдно стало :). Зря я докопался до неряшливого написателя, да ещё в новогодние каникулы. Приношу свои извинения.Спасибо!
Сейчас праздники, кто-то с похмелья, кто-то со смены ночной вернулся..
Будем добрее друг-к-другу и мир станет лучше)
> "если аргументов не осталось прикопайся к правописанию" (с)Не обращай внимания на регистр, матери компилятор, будь мужиком!
википедия утверждает, что квиктайм написан на си.
Он про биндинги к QuickTime? А не про сам QuickTime.P.S.
Qt - правильно читается как Кьют, а не Ку-Тэ, и не Кью-Тэ.
> Qt - правильно читается как Кьют, а не Ку-Тэ, и не Кью-Тэ.ложь. пара шизиков из компании-разработчика написала на оф сайте, что они хотят, чтобы все так читали. но всем как всегда, и правильно читается "кью ти"
Когда написала? Я например об этом узнал в 2010-м...
Я когда впервые увидел аббревитуру Qt, прочитал его правильно "Кьют", всё происходило на подсознательном уровне. Но потом наслышавшись тёмных соотечественников стал читать по разному и неправильно: "Ку-Тэ", "Кью-Тэ", "Кью-Ти".Теперь я вернулся к изначальному, подсознательному правильному чтению. А тёмных русских программистов больше не слушаю.
Причём сдесь русские вообще непонятно...
Я точно знаю что в данном конкурсе победят иксы так как их с тех пор понимать перестали.
X-ы не пройдут из за размера исходных кодов
Да, жаль, но это хотя бы пример того, что явно используется. Я же не про оракловскую базу данных упомянул - там то вообще ад какой-то и непонятно как вообще работает.
Что тебе мешает перейти на язык 1с?
СледующийДень = ТекущаяДата() + 60 * 60 * 24;ДобавитьМесяц(Дата(2005, 1, 31), 1)
ДобавитьМесяц(Дата(2005, 2, 28), -1)
КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1))ФункцияПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней)
Запрос = НовыйЗапрос("
|ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата";Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата);
Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней);ВозвратЗапрос.Выполнить().Выгрузить()[0].Дата;
Ужас! Зачем ты всё это выучил? Это болезнь.В качестве таблетки для излечения я тебе прописываю: Си, GNU bash, GNU sed, GNU awk, сойдут и клоны из состава BSD-утилит. Из ядерного терминала не вылезай.
Когда-нибудь ты поймёшь, что си и гнутая муть - это семантически тот же 1с, но на английском))
страшно, очень страшно такое читать - если бы мы понимали что это такое, мы не понимаем что это такое
Чего не придумают чтоб m4, yacc и lex не использоват
https://sun9-27.userapi.com/impf/0dAeSn2XlAelcqxy_wXLpcx_J_a...зачем. лучше этого кода уже не будет
Что доказать хотели? Что заcpaть любой код можно? Доказали. Можно.
Если любой Си код можно заcpaть, то, следуя закону Мерфи, он рано или поздно будет засран.
А ну ка такой же пример на Pyhton или Java?
Это мне напоминает людей дающих лезвие и говорящих, что ничего случиться не может.
Мы видим что эволюция сделала станки джилет и количество порезов существенно сократилось.
Заничт берем какой-нибудь (не самый лучший пример) скажем Golang и все проблемы решили.
Только ты упускаешь одну немаловажную деталь. Лезвием можно не только бриться. А твой станок как и голанг подходит только для бритья и ничего более.
> Только ты упускаешь одну немаловажную деталь. Лезвием можно не только бриться.Что ты еще собрался им делать, колбасу резать?
Так даже после этого, его придется долго и нудно точить-править -- если ты конечно не страдаешь мазохизмом.
Ты не поверишь, но в этом мире есть гораздо больше задач кроме резанье колбасы.
И все эти задачи требуют… ммм… резать бритвой? Брится ножом? Чаще резаться при бритье? Развей мысль, если она была конечно.
> А ну ка такой же пример на Pyhton или Java?
def letshavesomefun(_, __ = type({( )} ^ {( )})): __ = type("""
.-=-. .--.
__ .' '. / " )
_ .' '. / .-. \ / .-'\
( \ / .-. \ / / \ \ / / ^
\ `-` / \ `-' / \ `-` /
jgs`-.-` '.____.' `.____.'""", (__,),
{'_'
:__.__dict__[
[*(_ for _ in sorted(__
.__dict__) if '_' not in _)][:
:-1].pop()]})( {( )} ); yield [_
for _ in _ if _ not in __ and
not __._(_)]print(*letshavesomefun("hello")
def _ (
_ ,
__
= type ((
{( )}
^
{( )} ))
) :
__ = type (
""".o00(0)(0)0( *)-< """
, ( __ , )
, {
'_' :
__ .
__dict__ [[ * (
_ for
_ in sorted (
__ .
__dict__ ) if
'_' not in
_ ) ][ {
( __ ) } > {
* (
_ ) } :
:
~ (
not (
_ ) )
][ not (
_ ) ]]
} ) ( {
( ) } )
_ ; yield [
_ for
_ in
_ if
_ not in
__ and not
__ .
_
( _ ) ]print(*_([3,1,2,5,1,0]))
print(*_("hello world"))
"Что сынку, помогли тебе твои принудительные отступы?"
Примени форматтер, не страдай ерундой, потом поговорим
> Примени форматтер, не страдай ерундой, потом поговорим
% autopep8 -aaa letshavesomfefun2.pydef _(
_,
__=type((
{()}
^
{()}))
):
__ = type(
""".o00(0)(0)0( *)-< """
, (__,), {
'_':
__ .
__dict__[[* (
_ for
_ in sorted(
__ .
__dict__) if
'_' not in
_)][{
(__)} > {
* (
_)}::
~ (
not (
_))
][not (
_)]]
})({
()})
_
yield [
_ for
_ in
_ if
_ not in
__ and not
__ .
_
(_)]print(*_([3, 1, 2, 5, 1, 0]))
print(*_("hello world"))
И как, лучше стало?А нам точно есть о чем разговаривать?
Видел код на php, где создавался объект класса, а класс брался из БД. На python такое тоже можно. Ещё на python при помощи ctypes делал фабрику COM интерфейсов (тут уже скорее ради прикола). ЯП со статической типизации без рефлексии такие приколы и не снились.
Пупкин давай пояснительную бригаду
А оно так будет работать? Case 1 не окажется внутри {, что приведет к тому, что компилятор пошлет нас куда подальше?
Можно почитать разбор тут pigeonsnest.co.uk/stuff/pigeons-device.html
Собственно откуда анон и взял скриншот.
Что без ссылки слегка свинство.Это хак, в какой-то мере восхищенный методом Даффа.
Костыльный хак из 80х, которые в свое время вызвал нехилый батхерт у небезызвестного Тцо - когда эту "оптимизацию" выпилили из ХОрга - то стало только лучше)
"In fact, by eliminating all instances of Duff's Device from
the XFree86 4.0 server, the server shrunk in size by _half_ _a_
_megabyte_ (!!!), and was faster to boot" [1][1] https://lkml.indiana.edu/hypermail/linux/kernel/0008.2/0171....
Эм, switch, оказывается, не очень честная конструкция в плане синтаксиса C, не подчиняется парности {}
Фактически, пример показывает, что switch() это набор if/goto перед основным кодом, а case X: собственно, выглядит почти как метка, и используется как метка для неявного goto. break кстати тоже goto.
Что не всегда ожидаемо после других языков, но отлично ожидаемо теми, кто знает ассемблер, и знает, зачем был сделан C.
>и знает, зачем был сделан C.Саботаж индустрии?
О нет, это же <s>сарказмъ</s> <s>обоснованное мнение<s> <s>тупость ньюфага</s> хотя да, тупость, я сейчас сразу же переменю своё мнение (нет).Вы же явно можете достигнуть лучшего, начав с той же позиции, как и они, зная то же, что и они. Почему же вы тут, комментируете пюре, а не в первых рядах, развивающих индустрию?
Наверное потому, что стоя на плечах гигантов, луче видно, да?
> Вы же явно можете достигнуть лучшего, начав с той же позиции, как и они, зная то же, что и они.Ну давай, посмотрим какая у них была позиция.
Итак у нас на дворе 1972 год.
У нас уже есть и используются годами такие языки как Фортран, APL, Лисп, Simula.
За пару лет до появляется FORTH, Паскаль и Smalltalk (в тот же год).
Т.е у нас есть разнообразие подходов, от императивных до функциональных.Итак появляется СИ и распространяется, благо он прост как тапок.
Стандарта нет. Научить ему можно даже камаку без мозгов.В 83 году начинаются попытки стандартизации.
В это время у нас уже есть Пролог, Scheme, Ада (отличный пример как нужно разрабатывать ЯП). Даже С++ уже появился.И наконец в 89 году, после многолетней болтовни и проедания бюджетов, коммитет в̶ы̶с̶р̶а̶.. родил "стандарт".
Наверное самый овняный из тех, которые можно было сделать.
Где сложение 2 чисел это уже UB. И этих UB хоть πоπой кушай.
Где один и тот же код дает разный результат в зависиммости от компилятора и даже его версии. Где ни один компилятор не реализует стандарт полностью...> Наверное потому, что стоя на плечах гигантов, луче видно, да?
И видно что они просто делали на отшибись?
И может они не такие уж гиганты.
А, вот, мне это нравится.
Стандарт на Pascal - 1983 год (13 лет от появления)
Стандарт ALGOL как родоначальника большинства системных языков - 1984 год (~24 года от появления).
С - посчитайте сами. Лучше возьмите за базу K&R C то есть 1978 год.
Не стоит козырять стандартом. До стандарта доживают те, кому что то удалось.>Где сложение 2 чисел это уже UB.
Так, а список компилируемых языков со статической типизацией, на то время, "которые уже используются годами", и таки нативно обрабатывают целочисленное переполнение, видимо пуст?
Или в _тех_ языках есть какой то механизм (для программиста) проверки переполнения?
Особенно подходящих для системного программирования?В современных то - Rust "Integer operators will panic when they overflow when compiled in debug mode." Ой, а в release mode что, overflow не бывает? О, нужно, чтобы программист сам проверял, да? Ну то есть как и везде. Особенно в ядре, да :)
И как то, если уж кое кто считает, что "C это такой макроассемеблер" (нет), то в ассемблере вообще нет никакой типизации. И проверку переполнения можно делать.
Я согласен, плохо, что факт переполнения спрятали. Но другого почему в системных языках то почти нет.
Что касается Ada, то да, язык хорош. И родился сразу стандартом, DOD поспособстовал. Но что мне кажется, что ломать системный язык (С, на который к тому времени уже было переписано несколько вариантов Unix) с целью добиться чего то большего (концепции, утверждённые в стандарте Ada), ну так себе идея.
Ну и, опять же ОС на Ada не мировые лидеры. ХЗ, может сложность языка всё же имеет значение.>И видно что они просто делали на отшибись?
>И может они не такие уж гиганты.Да? Вы уже повторили их дела? На их оборудовании? И с их ограничениями? На всех этих UNIVAC и PDP и VAX?
Или перестали пользоваться всем, что появилось благодаря их работе?
Только тогда, я щитаю, можно лить gov.no на все предыдущее.
Вы не прошли и шага в их обуви.ЗЫ. Я не пытаюсь убедить этого анонима. Я пытаюсь предостеречь других от поспешных суждений.
> Я согласен, плохо, что факт переполнения спрятали. Но другого почему в системных языках то почти нет.Тот аноним пишет про UB и вроде как понимает, что это такое. А ты нет.
Он не говорит об отсутствии доступа к факту переполнения. Совсем. Он говорит про допущение у компилятора о том, что знаковые целые никогда нигде не переполняются (а появиться они могут "из ниоткуда", потому что unsigned short + unsigned short = signed int). Чтобы в ходе оптимизации выкинуть куски кода, в которых он видит переполнение и иметь шанс набрать ещё копейку в каких-то бенчмарках.
> Да? Вы уже повторили их дела? На их оборудовании? И с их ограничениями?
1. "Сперва добейся"
2. Но да, он повторил дело Денниса Ритчи - указал на недостатки стандарта. "The fundamental problem is that it is not possible to write real programs using the X3J11 definition of C. The committee has created an unreal language that no one can or will actually use."
3. Гнаться за оптимизациями в ущерб стабильности никто не заставлял> ЗЫ. Я не пытаюсь убедить этого анонима. Я пытаюсь предостеречь других от поспешных суждений.
Сначала матчасть!
Потому что могу.
Не ищите слишком глубокого смысла. Вам повезло увидеть мой комментарий.
И ещё анонима выше, который что-то в вопросе понимает.
В компиляторах тех времен switch был просто набором условных goto на заданные case метки.Нынешние, вероятно, будут ругаться как минимум warning-ами.
Поверх этой фичи сделан более-менее легитимный Protothreads (библиотеку кооперативной многозадачности на макросах).
Красивый код не конпиляют, его ставят на полочку и исполняют нативно)
Думаю с пришествием негросетей подобные соревнования канут в лету. Как и кодгольф, например.
Очень сомневаюсь что нейросетям когда либо станет доступно то искусство, которое творят люди, увлекающиеся кодгольфом
Банально даже врятли сетки способны написать оптимизированный с код, чтобы генерировались симд инструкции, отсортированные по времени выполнения, чтобы все это правильно работало с кэшэм и памятью
«А вы можете?» ©
А зачем Си код нейросетям? Пусть сразу на ассемлере пишут. Си сделан для людей чтобы меньше писать, но код оптимизирует уже транслятор с компилятором. Для ассемблера это ненужно и он выдает тот код что был написан без его интерпретации.
Ну, формально, все языки для людей придумывают
Но реальность такова, что люди не могут/не хотят писать код, вот многие и хотят сбагрить сеткам и эту работу, по той же самой причине - писать меньше/вообще не писать
Уже есть же вполне себе codeless, или как там оно называется, даже видел "айти курсы" по этому делу, типа за день научат как мышкой написать сервис
Кодгольф нынче не канул в лету, он порвался вклочья под натиском специализированных языков.Зайдите на codegolf.stackexchange.com, поглядите, как это нынче выглядит.
Ну или https://esolangs.org/wiki/Category:Golfing_language — чтоб уж окончательно ужаснуться.
На специализированных языках гольфят очень странные люди. Обычно программист на языке foo, на языке foo же и соревнуются. Такие вот соревнования позволяют глубже изучить инструмент который используешь на работе и бонусом повеселиться.
просто кусок из официального учебника самого безопасного языкаimpl List {
fn tail(&self) -> Option<&RefCell<Rc<List>>> {
match self {
Cons(_, item) => Some(item),
Nil => None,
}
}
}
Это просто жениально!
И что тут неясно? :-/
И? Что не так?
Длинные слова тебя расстраивают?
Или непонятные значки не позволяют понять, что написано?
Не зря Раст называют худшим языком в мире.
> Не зря Раст называют худшим языком в мире.Хм.. и поэтому он на гитхабе любимый язык уже сколько лет?
Воистину страшные времена настали, белое называют черным, а лучший путают с худший.
Это толстые тролли и боты. Хорошему языку не нужны рейтинги чтобы быть хорошим. Он просто хороший.
тема про написание запутанного кода на Сина Си
запутанного кода
не на раст
на Си
тебе удалили первый коммент про раст, ты написал еще один коммент
зачем? в чем причина? зад жжет? или цирк на выходные закрыт, и есть потребность клоунировать клоунскую сишкоклоунаду?
И что тут плохого? Что тут недоступно познанию сишников
Что именно тебя пугает?Параметризация по типам (дженерики)? Это стандартная фича всех современных языков, как минимум что бы какой-нибудь List или Map знали, какого типа элементы внутри них содержаться. Ну там, List<String> - список строчек, Map<String, List<Integer>> - сопоставление ключ-значения, где ключ строка, значение список чисел.
Или тебя пугает match? Pattern matching - менее распостранённая фича, но довольно простая а понимании. Можно про неё думать, как про чуть более умный switch/case.
Я кажется начинаю догадываться, почему от раста и именно от раста вылезло на поверхность так много людей, у которых бомбит. Потому, что раст и только раст создал настоящую конкуренцию Си, все остальные современные языки - java, kotlin, scala, c# - это сборщики мусора и медленный, прожорливый код, они и не собирались заменять там, где требуется эффективность по ресурсам. Поэтому, вылезшие из спячки сишники в их сторону никогда и не смотрели. Поэтому, все эти «новые» фичи, которым уже по 20 лет - для них что-то запредельное.
Добро пожаловать в 2025 год, вы уже не в 1995-ом.
Исходники на Раст целый день компилируются. Нам это надо? Нет!
> Или тебя пугает match? Pattern matching - менее распостранённая фича, но довольно простая а понимании. Можно про неё думать, как про чуть более умный switch/case."Качество" свича в СИ отлично показал анон в этом сообщении
opennet.ru/openforum/vsluhforumID3/135692.html#98
Классическое "как отстрелить себе нору по саму опу")))> Поэтому, все эти «новые» фичи, которым уже по 20 лет - для них что-то запредельное.
> Добро пожаловать в 2025 год, вы уже не в 1995-ом.Будем объективны, еще 2-3 года назад для разработки ядра нужен был С89. И сменили его на новейший С11 ))
Т.е можно реально десятилетиями писять какой-то код и вообще не париться о каких-то новшествах.А тут вдруг в ядро принимают какой-то непонятный язык, с кучей новшеств, а мозги, за прошедшие годы - уже не те. И маячит перспектива пойти мести улицы, тк тебя заменят каким-то любителем смузи..
Страх рождает ненависть.
Напишите тоже самое на сишке)
Это невозможно. В дыряшке нет сопоставления с образцом, это не проверяется компилятором. И нет нормальной типизации, только вечные void*
> нет сопоставления с образцомот создателей системного лотка, ***ть. господи, выучи терминологию, а потом суйся на технические сайты
> Напишите тоже самое на сишке)
в сишке придётся думать, как написать настолько же нечитаемо, в расте по-другому писать не сможешь
а спрашивать, как написать tail списка на сишке, - это даже не смешно
> от создателей системного лотка, ***ть. господи, выучи терминологию, а потом суйся на
> технические сайтыВы двум разным людям отвечаете одним комментарием. Всё в порядке?
> в сишке придётся думать
Сложно. Понимаю.
> а спрашивать, как написать tail списка на сишке, - это даже не
> смешноА вас же не это просят написать, а функционально повторить вот тот код на хрусте.
> господи, выучи терминологию, а потом суйся на технические сайтыhttps://ru.wikipedia.org/wiki/%D0%A1%D0%...
Какая может быть техническая дискуссия с человеком, не понимающим и трех строк на Си-подобном языке?
с тобой всё ясно, иди изучай "лучшие практики" и "пользовательский опыт"
#include <iostream>
#include <memory>
#include <optional>class List {
public:
struct Cons;
struct Nil;using Node = std::variant<std::shared_ptr<Cons>, std::shared_ptr<Nil>>;
struct Cons {
int value;
std::shared_ptr<Node> next;Cons(int val, std::shared_ptr<Node> nxt)
: value(val), next(std::move(nxt)) {}
};struct Nil {};
std::optional<std::shared_ptr<Node>> tail() const {
if (std::holds_alternative<std::shared_ptr<Cons>>(node)) {
return std::get<std::shared_ptr<Cons>>(node)->next;
} else {
return std::nullopt;
}
}List(int val, std::shared_ptr<Node> nxt)
: node(std::make_shared<Cons>(val, std::move(nxt))) {}List() : node(std::make_shared<Nil>()) {}
private:
std::shared_ptr<Node> node;
};int main() {
auto nil = std::make_shared<List::Node>(std::make_shared<List::Nil>());
auto list = List(1, nil);auto tail = list.tail();
if (tail) {
std::cout << "Tail exists!\n";
} else {
std::cout << "No tail.\n";
}return 0;
}
>В отличие от прошлых конкурсов, отныне в исходном коде разрешено использовать кодировку UTF-8.Не знал, что они были такими отсталыми.
UTF-8 в исходниках (даже в комментариях) - бpeд. По тyпocти это как официальный совет офтопика - для каждой локальной версии создавать отдельное приложение.
И в чём бред? На старой EGA-карте в текстовом режиме не отобразится?
Ну да.
А писать лямбда и набла в переменных это не бред
А если printf должна что-либо на консоль вывести на национальном языке, транслит - ваше фсё?
Даёшь идентификаторы на кириллице! А лучше вперемешку с латиницей, и приправить арабской вязью.
Ты что, на 1с никогда не программировал?
Нет. У меня нет проблем с кириллицей, но мешанина из кириллицы и латиницы — это ужасно, учитывая, что есть одинаковые на вид символы.
Ты путаешь причину и следствие. В чистом Си, Юникод разрешили разрешили потому, что он является приемлемым мировым Стандартом. Никто в здравом уме не будет в исходники серить кириллицей или арабской вязью. Есть в конце концов правила написания исходного кода, от сообществ GNU, BSD, ядра; K&R и т.д.Организаторы соревнования думают так же. Ядре Линукса тоже на UTF-8, и чо?! Кто-то по этому поводу ноет?
> Ядре Линукса тоже на UTF-8, и чо?!Разве всё ядро Linux не на финском языке написано?
>Разве всё ядро Linux не на финском языке написано?То что ты перешёл на троллинг, свидетельсвует о том, что у тебя исчерпаны аргументы.
Жаль когда Линус ядро писал, никто не подсказал ему сначала сделать свой форк Си и назвать его Фи(где писать надо на Финском)
Лучше бы ему подсказали ничего не писать.
> Жаль когда Линус ядро писал, никто не подсказал ему сначала сделать свой форк Си и назвать его Фи(где писать надо на Финском)А разве GNUтые расширения гвоздями прибитые к ядру - это не "форк"?
Типичное ЕЕЕ и вендорлок в стиле корпоратов.
А как же ядро Шлангом собирают некоторые дистры?
А на корпоратов что, вруг, бочку катишь? Ты же их любишь.
Согласен, тупанул. Откуда-то появилась мысль про не-ASCII идентификаторы.
Любой код на Си (и Расте) - запутанный.
Да на Расте даже и специальных соревнований устраивать нет необходимости.
Ну не знаю. Всегда считал, что чем больше знаков препинания, тем хуже язык читается. Не зря же Бейсик самый читаемый. Потому мне всегда нравился Паскаль, где все пишется "словами". Но недавно перешел на C/C++. И в принципе если нормально писать, то получается достаточно читаемый код. Есть конечно там свои плюсы и минусы. Язык конечно помощнее. Но недостатки тоже есть. Кривая типизация например. Очень бесит, когда две переменных одинакового типа вдруг оказываются неприсваиваемыми без объявления оператора. Бесит, массивы присваивать нельзя, а если обернуть их в структуру - то можно. Ллогика, ога. Или когда перечисления вдруг оказываются не перечисляемыми типами (простите за каламбур) и для них опять же не работают операции типа ++/-- без объявления операторов.
в перлигате еще меньше пунктуации, она самая читаемая, ну если не смотреть на всякие "Moo"
используй std::vector, Люк.а ++/-- для enum хорошо, что не добавляют. я не хочу каждый раз думать, это инкремент underlying типа или следующие существующее значение enum-a
>Не зря же Бейсик самый читаемый. Потому мне всегда нравился Паскаль, где все пишется "словами". Но недавно перешел на C/C++.Дорогой ты мой человек, человечище! Где ты был всё это время, в НИИ, а может ты преподавал в универе? На Дельфи (Паскале) перестали писать ещё в конце нулевых. На Бейсике в последний раз писали в начале 1990-х гг, а VBA используют только в M$ Excel, и это уже не совесм тот Бейсик.
>C/C++
Бедняжка, ты ещё не можешь отличить чситый Си от плюсов? Для тебя это один язык, да? переходи на модные язык Python или Rust. Java уже не модная, хайп поднятый в 90-х и нулевых давно спал.
раст для тех, кто не понимает, что с++ это надстройка над си
> раст для тех, кто не понимает, что с++ это надстройка над сиНет, как раз для тех - кто понимает.
Что с++ построен на том же гнилом фундаменте из UB, что и СИ.
И что в плюсах, несмотря на все улучшения, остаются те же типичные ошибки, что и в СИ.
А добавление всяких smartPtr, MiraclePtr помогают только частично.Именно поэтому гугл старается новый код на с++ в андроиде писать на расте, везде где возможно.
ты хотел сказать : "код на java писать на kotlin"
Любой код болше 100 строк, где используются имена переменных и функций в виде букв ("математический стиль"), будет запутанным.
Я писал так.
Я тоже немного страдал этим, задрачивался на математический стиль. У Кормена в псевдокоде такое видел, думал так будет систематичнее и академичнее. Ошибался. Систематичо не означает однобуквенные идентификаторы. Такое трудно читать. Читабельность должна быть на самом первом месте.
> Я тоже немного страдал этим, задрачивался на математический стиль. У Кормена в
> псевдокоде такое видел, думал так будет систематичнее и академичнее. Ошибался. Систематичо
> не означает однобуквенные идентификаторы. Такое трудно читать. Читабельность должна быть
> на самом первом месте.В этом есть доля правды, но не учитывается то, что во время проектирования программы не берется в рачёт её назначение и задачи автора, которые он для себя ставит.
Иногда это может быть нужно для тренировки мозга.
Иногда надо скрыть от посторонних глаз реализацию, но тогда,
конечно, можно писать сразу два варианта - понятный и непонятный.И ещё психологический момент: если сильно увлечься стилем, можно потерять фокус внимания на содержании.
Все это можно рассматривать только для конкретной ситуации, как по мне.
А в целом, да - хорошо, когда любой код читается.
Мне кажется, я выиграю, не пытаясь запутать:
https://www.linux.org.ru/forum/development/17837644
https://youtu.be/jVtt_ol9S4g?si=Ztz2ki6YpBl2sR-M