Комментарии 29
Для такого есть специальные сайты. govnokod.ru/
А почему вы думаете, что это говнокод? Просто используется часть языка, о которой мало кто знает
Собственно, сайт предназначен для малопонятного и нелогичного кода. Этот, может быть, и логичен, но никак не понятен. Суть в том, что незачем писать посты в 3 строки, не твиттер.
Считайте что это социальный эксперимент. Изначально Хабр был IT ресурсом, в котором профессионалы общались на профессиональные темы. Хочу узнать остался ли ресурс таковым.
Профессионализм, в том числе, определяется любопытством и знанием своего инструмента (языка)
Профессионализм, в том числе, определяется любопытством и знанием своего инструмента (языка)
Считаю, что ваш эксперимент прошёл успешно.
Хабр отвергает недопост в 3 строки, Хабр — торт! :)
Закопайте, пожалуйста, ваши диграфы обратно, чай на дворе 2014-й год.
Хабр отвергает недопост в 3 строки, Хабр — торт! :)
Закопайте, пожалуйста, ваши диграфы обратно, чай на дворе 2014-й год.
Знание языка разделяется на академическое и практическое. Академическим знанием обязаны обладать лишь две категории разработчиков: эксперты высочайшего класса и создатели компиляторов. Все остальные программисты-практики обязаны знать язык настолько, насколько это необходимо для эффективного решения стоящих перед ними задач. В этом смысле знание диграфов и триграфов не имеет ни малейшей практической пользы.
Опять-таки, нет ничего плохого в том, что программист знает о них. Но вы сказали, что «эту строку можно использовать как детектор на C++ программистов». По моему опыту, детектировать профпригодность C++-программистов следует иными способами.
Опять-таки, нет ничего плохого в том, что программист знает о них. Но вы сказали, что «эту строку можно использовать как детектор на C++ программистов». По моему опыту, детектировать профпригодность C++-программистов следует иными способами.
Я несколько более самокритичен, нежели Вы, и могу предоставить на разбор свой древний (2007 г.) говнокод на ассемблере. Надеюсь, что Ваша печень выдержит N*0.5 л, пока Вы поймёте, что там вообще происходит.
На самом деле код очень прост — там всего лишь 3 вложенных друг в друга лямбды. Как оказалось мало кто из С++ программистов уже вообще знает что такое диграфы.
Ди- и триграфы суть вынужденная альтернатива ввода лексических конструкций. Подчёркиваю: альтернатива, а не основной рабочий вариант. Допущение смешения основных и альтернативных конструкций разве не говнокод? Сочетается ровно так же, как AT&T и Intel синтаксисы.
Так я не спорю. Но о ди и триграфах нужно как минимум знать. Это часть языка. Это история, как этот язык развивался. Я-же не говорю, что код — пример production кода. Это пример. С подсказками — несбаллансированые квадратные и фигурные скобки — одни из таких подсказок.
Забавные зверьки, однако, водятся в С++. Конечно, когда–то кому–то они были нужны, но сейчас это лишь повод для Look ma/guys, how can I code C++
Но о этих зверьках знать нужно ИМХО. По крайней мере нужно знать что они существуют в природе, чтобы потом не удивляться.
Так спасибо что познакомили!
ИМХО, читатели статью приняли бы более благосклонно если про них (ди/триграфы, не читателей :) было бы написано более развёрнуто… возможно, с неким экскурсом в историю и в причины появления, практик использования (желательно, с примерами сорцов – а вдруг в каком–нибудь известном опен–сорсе такое до сих поп лежит?), и т.д. Вот и ploop ниже это же рекомендует.
ИМХО, читатели статью приняли бы более благосклонно если про них (ди/триграфы, не читателей :) было бы написано более развёрнуто… возможно, с неким экскурсом в историю и в причины появления, практик использования (желательно, с примерами сорцов – а вдруг в каком–нибудь известном опен–сорсе такое до сих поп лежит?), и т.д. Вот и ploop ниже это же рекомендует.
Знать просто о факте их существования? Согласен с вами. Но знать о существовании диграфов и триграфов — это одно, а уметь свободно читать наводнённый ими код — совсем другое.
Это и на говнокоде заминусуют.
Краткость — сестра таланта (с)
Но неплохо бы ещё разбор этого кода провести :)
Честно говоря я написал этот чтобы понять — много-ли С++ программистов смогут понять что тут написано. И самое главное — как оно работает. Как оказалось среди моих коллег таких единицы.
Вся суть в диграфах — мало кому известной фиче сишечки. Несогласованность фигурных скобок — это такая толстая подсказка.
После замены диграфов код становится таким:
После замены диграфов код становится таким:
int main()
{
return
![]() // отрицание лямбды, неявно приводимой к bool
{
; // пустой оператор
[=]() // лямбда-функция без аргументов
{
[&]()
{
;
}(); // вызов лямбды
}();
};
}
Да. Все правильно. А в C++ есть еще и триграфы, начинающиеся с "??" en.wikipedia.org/wiki/Digraphs_and_trigraphs. Как оказалось о таком даже не слышало больше половины С/С++ программистов. Насколько я знаю триграфы по умолчанию отключены в большинстве компиляторов
Знание диграфов и триграфов только мозг загружает нелепой устаревшей информацией.
Я не говорю, что все должны знать ди-/триграфы наизусть. Но знать, что они вообще существуют в природе — обязаны.
Если так загоняться, можно дойти и до перфокарт с лампами.
Если человеку интересна история компьютеров/языка — это действительно здорово.
Но, мне кажется, очень сомнительно говорить о том, что знать историю — это обязанность, а тем более считать её одним из критериев профессионализма. Если мне на собеседовании подсунули бы такой код и спросили: «Что вы знаете о диграфах?» — я бы молча встал и ушёл.
Если человеку интересна история компьютеров/языка — это действительно здорово.
Но, мне кажется, очень сомнительно говорить о том, что знать историю — это обязанность, а тем более считать её одним из критериев профессионализма. Если мне на собеседовании подсунули бы такой код и спросили: «Что вы знаете о диграфах?» — я бы молча встал и ушёл.
Кто, что, и кому обязан, наверное, не вам решать, но что это интересно — однозначно. Вот и рассказали бы (под спойлером, если хочется интригу сохранить) что это такое, и для чего применялось. Был бы отличный пост. А то вышло в стиле «гляньте, что я узнал»
Про диграфы знал довольно давно, и даже встречался с ними пару раз в реальном боевом коде лет 5 назад, когда еще писал на C++. И знал именно потому что мне язык тогда очень нравился и стремился узнать все о своем инструменте. А недавно вот попросили помочь с элементарным примером. И оказалось, что большинство моих коллег даже не слышало таком. Для меня это было шоком: да — это устаревшая часть языка, да очень редко используемая. Но это все равно часть языка — часть стандарта инструмента, на котором пишешь много лет
Я еще понимаю рассматривать случаи UB и тому подобное, но не тот функционал, который устарел и без которого можно и нужно обходиться.
Мне кажется, это ужасно, что диграфы включены по-умолчанию. Это ещё 1 обратная несовместимость с C, что «not_eq» — зарезервированное слово.
Автор спасибо. and not or это прикольно для тех, кто понял зачем в начале поста шутка про фортран )))
«С моей точки зрения профессионал должен досконально разбираться в своем инструменте.»
Что ещё за доскональность такая? есть разумность, эффективность, целесообразность…
А на доскональности подскользнется кто угодно, и автор и «гости»… Сразу как начнут делится тут всем разнообразием хитросплетений.
Что ещё за доскональность такая? есть разумность, эффективность, целесообразность…
А на доскональности подскользнется кто угодно, и автор и «гости»… Сразу как начнут делится тут всем разнообразием хитросплетений.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
С++ для Perl программистов