Как стать автором
Обновить

Комментарии 47

А теперь вопрос — насколько быстрее это было бы реализовано на лисповых макросах?
Видимо быстрее, но в моей больной голове так вопрос не стоял. Для меня, в тот момент, было важно, что это МОЖНО сделать на C++, а не то, с какими человеко-потерями это можно сделать. Я думаю, у всех бывали такие моменты.
Помнится доказывали, что движок шаблонов в C++ Тьюринг-полный, так что сделать можно всё. Другое дело, что такой код вызывает желание убивать…
Рекомендованные стандартом ограничения (максимальное количество шаблонных параметров, вложенных инстанциирований...) скорее всего делают его неполным.
В архитектуре ЭВМ нет принципиального ограничения на размер памяти, хотя практически он ограничен размером Вселенной.

Ограничения налагаемые реализацией компилятора делают невозможным решение сколько-нибудь сложных задач с помощью шаблонов.
>> хотя практически он ограничен размером Вселенной
После квантовых компьютеров я уже вообще ни в чём не уверен.
Вполне возможно, нам удастся опровергнуть тезис Чёрча, построить память, в которой будет бит больше, чем частиц во Вселенной и т. д.
Xenocephal, перелогиньтесь.
НЛО прилетело и опубликовало эту надпись здесь
набрал 666 постов и зарегал новый акк
Кстати, я с удовольствием почитал бы статью о Lisp-овых макросах.
Я тут недавно про scala-макросы писал — статья популярности не имела.
О, спасибо. Почитаю
Было поздно, вспомнились только упомянутые :)
Вы правы, особенно хороша Let Over Lambda.
Ох что вспомнили :) Вот кстати ссылка на тред, очень советую к прочтению www.sql.ru/forum/466654/s
Ага, точно. Он родимый
Вброшу цитатку из него для того чтобы интерес подогреть, тем более что к содержанию поста она некоторое отношение имеет :)
C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется — это хорошее зубрилко а не хороший программист. Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современно мире ценится разве что только среди прыщавых сосок. Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
© Xenocephal
Я бы сказал, что в последнее время erlang и clojure набирают обороты, так что я не настолько пессимистично настроен и в свободное от работы время почитываю SICP, чтоб в нужный момент быть в форме.
clojure действительно набирает, правда скорость этого набора ну совершенно не радует. Такими темпами пройдёт ещё лет десять, прежде чем он хотя бы приблизится к мейнстриму.
Что до Erlang'а, то тут вообще трудно что-то прогнозировать, больно уж его «рост» нестабилен:

Максимальные же темпы роста сейчас у Objective C по вполне понятным причинам. А вот топе по востребованности вообще висят Java, Javascript, C#, PHP, а в последнее время к ним ещё Python приблизился. Увы, популярность низкоуровневых языков упала ниже плинтуса…
А вот нифига не у Objective C. Судя по Tiobe с начала года он только падает.
Tiobe показывает, как часто гуглят данный язык, т.е. не востребованность у работодателя, а всего лишь популярность у самих разработчиков.
Чтобы оценить востребованность языка, нужно смотреть статистику вакансий, очень многие биржи труда её предоставляют. Вот как пример.
«Увы, популярность низкоуровневых языков упала ниже плинтуса…»
Парней, которые написали вот эту штуку — habrahabr.ru/company/eset/blog/178639/, расстраивает Ваш комментарий :)
А теперь перепишите на constexpr из C++14 :)
Это будет тривиально и уже не так интересно.
Радует конечно, что такой инструмент появился, но, IMHO, для очень редкой задачи может действительно понадобиться CompileTime
constexpr — compile time.
Я знаю. Я не знаю задачи, для которой он мог бы всерьез понадобиться, вот в чем беда.
НЛО прилетело и опубликовало эту надпись здесь
В C++11 constexpr функции очень ограничены (запрещено использовать много конструкций), а в C++14 (C++1y) большая часть ограничений была снята. В C++1y в constexpr функциях можно использовать if, switch, циклы, изменять переменные (если их lifetime начался во время вычисления константного выражения), и прочее.

isocpp.org/files/papers/N3652.html

Можно попробовать в clang -std=c++1y (Clang брать из SVN, реализация ещё не полная).
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Что-то мне подсказывает, что суть постов Луговского сводилась не к тому, что на цпп чего-то сделать невозможно, а к тому, что на лиспе это будет проще, элегантнее и быстрее.
Суть постов Луговского сводилась к доказательству его превосходства над всеми остальными. Nothing more.
Если уж вы так интерпретируете это, то превосходство не его, а тех, кто не ограничивает набор своих инструментов одним-двумя языками.
Судя по отсутствию комментариев, сливают карму те, кто кроме цпп/пхп ничего больше не знают и знать не хотят…
На лиспе бы это было гораздо проще, короче и быстрее (в пране скорости реализации, а не производительности бинарника). Это вызвано, в частности, тем, что метапрограммирование в лисп — результат намеренной направленной работы, а в с++ — «счастливое» недоразумение, «удачное» стечение обстоятельств.

Как минимум, отладка далась бы автору существенно менее болезненно бгадаря наличию интерпретатора и macroexpand-1.
да.., моя маленькая статья даже рядом не валялась.
Кто-то мне говорил, что, кроме всего прочего, есть генератор псевдослучайных чисел реализован с помощью шаблонов C++. Всё это очень интересно…
Спасибо за впечатления.
У Вас очень хорошая статья. И да, вычисление e в CompileTime, это тоже сложнее факториала.
Посмотрите на Clay, в нем все эти шаблонные дела сделаны правильно.
А макросы — зло по типу goto, только на другом уровне. В языке должны быть ограничения
А макросы — зло по типу goto

Не надо путать сишный препроцессор с лисповыми макросами.
… а в Киеве дядька
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории