Комментарии 47
А теперь вопрос — насколько быстрее это было бы реализовано на лисповых макросах?
Видимо быстрее, но в моей больной голове так вопрос не стоял. Для меня, в тот момент, было важно, что это МОЖНО сделать на C++, а не то, с какими человеко-потерями это можно сделать. Я думаю, у всех бывали такие моменты.
Помнится доказывали, что движок шаблонов в C++ Тьюринг-полный, так что сделать можно всё. Другое дело, что такой код вызывает желание убивать…
Рекомендованные стандартом ограничения (максимальное количество шаблонных параметров, вложенных инстанциирований...) скорее всего делают его неполным.
Ограниченный размер памяти любой ЭВМ делает её не-тюринг-полной, и что?
В архитектуре ЭВМ нет принципиального ограничения на размер памяти, хотя практически он ограничен размером Вселенной.
Ограничения налагаемые реализацией компилятора делают невозможным решение сколько-нибудь сложных задач с помощью шаблонов.
Ограничения налагаемые реализацией компилятора делают невозможным решение сколько-нибудь сложных задач с помощью шаблонов.
Xenocephal, перелогиньтесь.
НЛО прилетело и опубликовало эту надпись здесь
Кстати, я с удовольствием почитал бы статью о Lisp-овых макросах.
Я тут недавно про scala-макросы писал — статья популярности не имела.
Например, здесь:
PCL, глава 8. Создание собственных макросов
А тут вообще можно недорого разжиться книжкой по Лисп:
ANSI Common Lisp
PCL, глава 8. Создание собственных макросов
А тут вообще можно недорого разжиться книжкой по Лисп:
ANSI Common Lisp
Странно, что не упомянуты свободно доступные On Lisp и Let Over Lambda.
Ох что вспомнили :) Вот кстати ссылка на тред, очень советую к прочтению www.sql.ru/forum/466654/s
Ага, точно. Он родимый
Вброшу цитатку из него для того чтобы интерес подогреть, тем более что к содержанию поста она некоторое отношение имеет :)
C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется — это хорошее зубрилко а не хороший программист. Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современно мире ценится разве что только среди прыщавых сосок. Работодатель же это сомнительное умение не ценит, и совершенно справедливо.© Xenocephal
Оно возможно и так, но очень мало я видел работодателей ценящих Lisp. Увы
Я бы сказал, что в последнее время erlang и clojure набирают обороты, так что я не настолько пессимистично настроен и в свободное от работы время почитываю SICP, чтоб в нужный момент быть в форме.
clojure действительно набирает, правда скорость этого набора ну совершенно не радует. Такими темпами пройдёт ещё лет десять, прежде чем он хотя бы приблизится к мейнстриму.
Что до Erlang'а, то тут вообще трудно что-то прогнозировать, больно уж его «рост» нестабилен:
Максимальные же темпы роста сейчас у Objective C по вполне понятным причинам. А вот топе по востребованности вообще висят Java, Javascript, C#, PHP, а в последнее время к ним ещё Python приблизился. Увы, популярность низкоуровневых языков упала ниже плинтуса…
Что до Erlang'а, то тут вообще трудно что-то прогнозировать, больно уж его «рост» нестабилен:
Максимальные же темпы роста сейчас у Objective C по вполне понятным причинам. А вот топе по востребованности вообще висят Java, Javascript, C#, PHP, а в последнее время к ним ещё Python приблизился. Увы, популярность низкоуровневых языков упала ниже плинтуса…
Tiobe показывает, как часто гуглят данный язык, т.е. не востребованность у работодателя, а всего лишь популярность у самих разработчиков.
Чтобы оценить востребованность языка, нужно смотреть статистику вакансий, очень многие биржи труда её предоставляют. Вот как пример.
Чтобы оценить востребованность языка, нужно смотреть статистику вакансий, очень многие биржи труда её предоставляют. Вот как пример.
«Увы, популярность низкоуровневых языков упала ниже плинтуса…»
Парней, которые написали вот эту штуку — habrahabr.ru/company/eset/blog/178639/, расстраивает Ваш комментарий :)
Парней, которые написали вот эту штуку — habrahabr.ru/company/eset/blog/178639/, расстраивает Ваш комментарий :)
А теперь перепишите на constexpr из C++14 :)
Это будет тривиально и уже не так интересно.
Радует конечно, что такой инструмент появился, но, IMHO, для очень редкой задачи может действительно понадобиться CompileTime
Радует конечно, что такой инструмент появился, но, IMHO, для очень редкой задачи может действительно понадобиться CompileTime
НЛО прилетело и опубликовало эту надпись здесь
В 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, реализация ещё не полная).
isocpp.org/files/papers/N3652.html
Можно попробовать в clang -std=c++1y (Clang брать из SVN, реализация ещё не полная).
НЛО прилетело и опубликовало эту надпись здесь
Что-то мне подсказывает, что суть постов Луговского сводилась не к тому, что на цпп чего-то сделать невозможно, а к тому, что на лиспе это будет проще, элегантнее и быстрее.
Суть постов Луговского сводилась к доказательству его превосходства над всеми остальными. Nothing more.
На лиспе бы это было гораздо проще, короче и быстрее (в пране скорости реализации, а не производительности бинарника). Это вызвано, в частности, тем, что метапрограммирование в лисп — результат намеренной направленной работы, а в с++ — «счастливое» недоразумение, «удачное» стечение обстоятельств.
Как минимум, отладка далась бы автору существенно менее болезненно бгадаря наличию интерпретатора и macroexpand-1.
Как минимум, отладка далась бы автору существенно менее болезненно бгадаря наличию интерпретатора и macroexpand-1.
да.., моя маленькая статья даже рядом не валялась.
Кто-то мне говорил, что, кроме всего прочего, есть генератор псевдослучайных чисел реализован с помощью шаблонов C++. Всё это очень интересно…
Спасибо за впечатления.
Кто-то мне говорил, что, кроме всего прочего, есть генератор псевдослучайных чисел реализован с помощью шаблонов C++. Всё это очень интересно…
Спасибо за впечатления.
Посмотрите на Clay, в нем все эти шаблонные дела сделаны правильно.
А макросы — зло по типу goto, только на другом уровне. В языке должны быть ограничения
А макросы — зло по типу goto, только на другом уровне. В языке должны быть ограничения
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Что-то посложнее факториала