LINUX.ORG.RU

CL быстрее прочих :)


0

3

Новый, и как всегда красивый, пример кодогенерации от swizard

http://swizard.livejournal.com/158763.html

на этот раз решение задачи http://shootout.alioth.debian.org/u32q/benchmark.php?test=fannkuchredux&lang=...

★★★★★

Последнее исправление: psv1967 (всего исправлений: 1)
Ответ на: комментарий от archimag

про абстрактные типы штанги.

И к штанге, кстати, они вообще никаким боком - скорее штанга к ним.

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Нет, я завязываю с тобой дальше общаться. Ты улетел куда-то очень далеко. На чём основанны твои утверждения совершенно не понятно. Но я физически не могу оспаривать каждое предолжение. Тем более, смысла половины из них я не понимаю.

archimag ★★★
()
Ответ на: комментарий от archimag

На самом деле, можно выкинуть все слова - http://www.linux.org.ru/jump-message.jsp?msgid=5400040&cid=5409827 второй выриант кода на обычном CL определяет бинарное дерево с листами и функцию для него - там всё обычно. Первые три строчи всегда однозначно генерируют всё что во втором вырианте, и весма декларативны и просты (и не имеют оверхеда). Вот и всё.

quasimoto ★★★★
()
Ответ на: комментарий от tailgunner

> C. Объяснить почему, или так ясно?

Объяснить.

Впрочем, я удивлюсь, если на практике кому-то взбредет в голову уплотнять массив с локами.

С другой стороны, у меня нет под рукой лучше примера.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от korvin_

> нужно было сразу обратиться к педивикии хотя бы

А смысл? Тут есть две проблемы:

1. Никаких алгебраических типов в треде не было, quasimoto их высосал из пальца, т.е. просто забыл, что ADT это прежде всего абстрактные типы данных.

2. Основным свойством программиста является способность к четкому и ясному изложению своей мысли, не важно на каком языке - если не можешь выразить свою мысль на русском, не сможешь ни на CL, ни на Haskell. Тут же в топике продемонстрирован весьма путанное, непонятное и лишённое внутренней логики объяснение не понятно чего. Вот и получается, что вместо TAPL лучше бы Гоголя почитал - пользы было бы намного больше.

archimag ★★★
()
Ответ на: комментарий от archimag

А не составит тебе труда объяснить нам всем доходчиво и без логических изъянов с твоей стороны, что такое «абстрактный тип данных» в твоем понимании? ADT - это просто создаем свою алгебру. Тут все легко и понятно. А что такое «абстрактный тип данных» лично для тебя?

dave ★★★★★
()
Ответ на: комментарий от dave

> Ты чего сильно путаешь, ибо абстрактные типы данных отличаются тем, что вся работа с ними (в том числе создание) производится через заданный интерфейс, а как они реализованы, через списки ли, через структуры, или ещё как - абсолютно не важно.

По-моему архимаг недвусмысленно дал понять, что такое АДТ в его понимании.

balodja ★★★
()
Ответ на: комментарий от www_linux_org_ru

>> C. Объяснить почему, или так ясно?

Объяснить.

Потому что он не просто уплотнил массив локов, но и перетасовал его.

tailgunner ★★★★★
()

Последние страницы влом читать. Перескажите вкратце: Лисп - всё ещё круто, или разоблачение уже произошло?

mv ★★★★★
()
Ответ на: комментарий от mv

> Лисп - всё ещё круто, или разоблачение уже произошло?

Уже произошло. Выяснилось, что для метапрограммирования Лисп непригоден. Чтобы тебе было понятнее: гигантские яйца Лиспа оказались обычными бильярдными шарами.

tailgunner ★★★★★
()
Ответ на: комментарий от mv

На самом интересном месте пришел корчеватель и расх**рил тред в клочья. Пока лишь сошлись на том, что если CL крут, то крут не в макросах :)

balodja ★★★
()
Ответ на: комментарий от dave

Кхм, а где там книжки? Там четко доложено своими словами.

balodja ★★★
()
Ответ на: комментарий от dave

> Хочу услышать краткое объяснение своими словами.

За чужими книгами каждый может прятаться.


Хм, оно ведь прозвучало, нет? Ну, давай ещё раз:

Абстрактный тип данных определяется набором операций, которые могут над ним осуществляться (включая операцию создания). Например, список характеризуется, в первую очередь, возможностью последовательного перебора элементов (в одну или обе стороны), а также операциями вставки и удаления элементов на основе имеющегося элемента списка. Над стэком определены операции получения элемента с вершины, помещения элемента на вершину и удаления элемента с вершины. Что характерно, в конкретной реализации и стэк и список могу представляться одной и той же структурой данных с точки зрения используемого ЯП. Поэтому, повторяем ещё раз: ADT определяется не способом реализации, а множеством определённых для него операций. Концептуальное описание ADT не привязывается к конкретному языку программирования и не зависит от доступных в конкретном языке выразительных средств.

Из вышесказанного однозначно следует, что какие-либо аналогии или сопоставление абстрактных типов данных с алгебраическими типами данных совершенно не уместны, ибо эти понятия находятся в различных плоскостях восприятия структуры компьютерных программ.

archimag ★★★
()
Ответ на: комментарий от tailgunner

Уже произошло. Выяснилось, что для метапрограммирования Лисп непригоден.

Если в сиём мудром выводе принимал участие archimag, то он мне сегодня ночью предлагал сделать delete-package встроенного лиспворковского пакета, чтобы его поделкапакет, имеющий схожий двухбуквенный никнейм, мог в lw нормально загружаться. Поэтому я к его выводам отношусь с легко объяснимым подозрением :)

Чтобы тебе было понятнее: гигантские яйца Лиспа оказались обычными бильярдными шарами.

А точно не вы решили настоящими яйцами в бильярд играть?

mv ★★★★★
()
Ответ на: комментарий от balodja

> Пока лишь сошлись на том, что если CL крут, то крут не в макросах :)

Правильно. Сила CL во всём комплексе предоставляемых им инструментов, который отличается высокой степенью продуманности и сбалансированности. Ни одна из фич CL не является уникальной или дающей однозначное преимущество по сравнению с прочими языками. Если касаться отдельных, злободневных тем, таких как метапрограммирование или функциональное программирование, то имеются языки, которые предоставляют более мощные выразительные средства в этих областях. Но, если рассматривать весь комплекс предоставляемых CL инструментов, то он является чрезвычайно мощным и можно даже сказать уникальным.

archimag ★★★
()
Ответ на: комментарий от mv

Ты же не предложил другого решения, впрочем, спокойно, я уже кажется придумал что делать. Будет пост ;)

Если в сиём мудром выводе принимал участие archimag


Нет, я всего лишь процитировал высказывание Fare Rideau, авторитет которого, надеюсь, не вызывает сомнений.

archimag ★★★
()
Ответ на: комментарий от archimag

Нет, я всего лишь процитировал высказывание Fare Rideau, авторитет которого, надеюсь, не вызывает сомнений.

Не люблю авторитетов, кроме себя.

mv ★★★★★
()
Ответ на: комментарий от mv

> Не люблю авторитетов, кроме себя.

Ну тогда, может стоит, обратиться к его аргументации?

Кроме того, поскольку Fare в данный момент один из немногих людей, реально занимающийся проблемам разработки действительно крупномасштабного ПО на CL, то к его мнению всё же стоит прислушиваться.

archimag ★★★
()
Ответ на: комментарий от archimag

Ну не нашёл чувак сильвер буллет, огорчился, бывает. Что с того? Не метапрограммировать на CL?

mv ★★★★★
()
Ответ на: комментарий от mv

> Ну не нашёл чувак сильвер буллет, огорчился, бывает.

Да с ним вроде всё хорошо. Вон в рассылку hunchentoot патчи, которые используют в ITA, шлёт.

Что с того? Не метапрограммировать на CL?


Хм, ты ещё не проснулся? Речь идёт о том, что метапрограммирования не является самой главной фичей лиспа, мало того, есть языки в которых оно развито лучше. Но, конечно, метапрограммировать можно, бывает даже нужно, просто не стоит увлекаться и сводить всё к этому.

archimag ★★★
()
Ответ на: комментарий от dave

> Выходит, коллизия имен.

Именно, об этом много где предупреждают, когда речь начинает идти про алгебраические типы данных.

balodja ★★★
()
Ответ на: комментарий от archimag

Хм, ты ещё не проснулся? Речь идёт о том, что метапрограммирования не является самой главной фичей лиспа,

Сессно, не является. Если открыть оглавление в том же Cltl2, то там на каждую главу можно изобретать язык, в котором содержимое этой главы будет киллер-фичей. Но из всех лисповых фич, макросы - это, всё-таки, самая мощная фича. Не единственная, но самая-самая.

От рассуждений, что DSL'и на CL писать неправильно вызывают разве что улыбку. С огладкой на тот факт, что каждая первая библиотека его в том или ином виде содержит.

мало того, есть языки в которых оно развито лучше. Но, конечно, метапрограммировать можно, бывает даже нужно, просто не стоит увлекаться и сводить всё к этому.

Судя по восторженным реакциям на завороты swizard'а, «народ хавает». Действительно ж прикольно, что если навернуть 3-4 фазы метакомпиляции, то на медленном, динамически типизируемом лиспе получается убербыстрый код.

Более того, окраска лиспонаездов, благодаря таким замутам, меняется в лучшую, более профессиональную сторону. Никто теперь в здравом уме, не боясь кинуть на себя тень, не скажет, что лисп - тормоз.

mv ★★★★★
()
Ответ на: комментарий от mv

> Но из всех лисповых фич, макросы - это, всё-таки, самая мощная фича

Огласи, пожалуйста, критерии сравнения. Ибо я тат вообще затрудняюсь проводить подобные сравнения.

От рассуждений, что DSL'и на CL писать неправильно вызывают разве

что улыбку. С огладкой на тот факт, что каждая первая библиотека


его в том или ином виде содержит.



Ну ка, давай их перечисляй, ибо по моим наблюдениям DSL в open source проектах встречается исключительно редко.

Судя по восторженным реакциям на завороты swizard'а, «народ хавает».


Это меня и беспокоит. У людей создаётся неправильно представление о языке.

Действительно ж прикольно, что если навернуть 3-4 фазы

метакомпиляции, то на медленном, динамически типизируемом лиспе


получается убербыстрый код.



Абсолютно не вижу ничего прикольного в раздувании размеров и увеличении сложности для увеличения производительности. Разработчики компиляторов столько пахали, что бы дать нам возможность писать чисто и ясно, а нам на них пох, нам нужно Java в скорости обогнать. Хочешь скорости - работай над платформой, а не в коде дурдом устраивай.

Никто теперь в здравом уме, не боясь кинуть на себя тень,

не скажет, что лисп - тормоз.



Да кого это волнует, тормоз он или нет. Он гораздо быстрее python, что очевидно, а большего подавляющему большинству и не надо. А кому надо, тот пишет на С.

archimag ★★★
()
Ответ на: комментарий от archimag

Но из всех лисповых фич, макросы - это, всё-таки, самая мощная фича

Огласи, пожалуйста, критерии сравнения.

Пожалуйста: на макросах написана весьма добрая часть реализаций языка Common Lisp. На сигнальном протоколе, ридтейбле, CLOS, MOP, etc столько кода внутри реализаций нет.

Нет, на самом деле самой мощной фичей является концепция символов, но это слишком низкоуровневая деталь, лежащая в основе самой идеи существования лиспа.

mv ★★★★★
()
Ответ на: комментарий от mv

> Пожалуйста: на макросах написана весьма добрая часть реализаций

языка Common Lisp


Отлично, тогда я буду утверждать, что самой главной фичей CL являются переменные и функции. Оспоришь?

archimag ★★★
()
Ответ на: комментарий от archimag

Ну ка, давай их перечисляй, ибо по моим наблюдениям DSL в open source проектах встречается исключительно редко.

Ну да! Проще перечислить, где DSL'ей нет.

Это меня и беспокоит. У людей создаётся неправильно представление о языке.

Хочешь скорости - работай над платформой, а не в коде дурдом устраивай.

а большего подавляющему большинству и не надо.

Много IMHO.

mv ★★★★★
()
Ответ на: комментарий от tailgunner

Кто тролль, я тролль? Да ты сам тролль!!11

Известный разработчик ядра Линукс на днях сказал, что ты всё ещё самый жирный тролль на ЛОРе. Но я усиленно питаюсь и стараюсь не двигаться.

mv ★★★★★
()
Ответ на: комментарий от psv1967

>Тот настоящий специалист, кто просто не может сделать хреново, ни за деньги, ни бесплатно.

Слышал аналогичное утверждение от знакомого программиста с многолетним стажем. Склонен согласиться. Предлагаю отныне считать пассажи: «Дай мне стотыщбаксофф и я сделаю заебись» толстым троллингом и констатацией беспомощности написавшего.

linuxfan
()
Ответ на: комментарий от archimag

>Прежде чем ссылаться на авторитетное мнение человека, который простился с лисп 10 лет назад

Ехидно так спрашиваю: что за последние 10 (14, раз статье 4 года) лет изменилось в лиспе?

http://en.wikipedia.org/wiki/Common_Lisp_the_Language#After_standardization

The ANSI Common Lisp standard was published in 1994

Ты хочешь сказать, что в этом стандарте не было символьных вычислений, мультиметодов и динамических переменных?

linuxfan
()
Ответ на: комментарий от mv

> Ну да! Проще перечислить, где DSL'ей нет.

Ладно, давай так, для того, что бы развернуть lisper.ru надо установить около различных пакетов, из них какой либо DSL имеется в следующих:

* iterate - работа с различными циклами
* parenscript - очень условно, ибо это не DSL, а компилятор с языка, похожего на CL, в JavaScript
* s-sql из postmodern - тоже достаточно условно (но очень удобно), позволяет представлять SQL-выражения в виде s-выражений

Итого, 3 из 70 это каждая первая?

archimag ★★★
()
Ответ на: комментарий от archimag

Отлично, тогда я буду утверждать, что самой главной фичей CL являются переменные и функции. Оспоришь?

Оспорю. Переменные и функции есть, практически, в любом языке. Макросы а-ля CL - нет.

mv ★★★★★
()
Ответ на: комментарий от archimag

Итого, 3 из 70 это каждая первая?

Если DSL не торчит наружу через API, это не значит, что его нет внутри.

mv ★★★★★
()
Ответ на: комментарий от linuxfan

> Ехидно так спрашиваю: что за последние 10 (14, раз статье 4 года)

лет изменилось в лиспе?


В стандарте С++ 97-го года была предусмотрена раздельная компиляция шаблонов, почему никто не использовал их? Это тедь такая мощная фича?

Ты хочешь сказать


Я хочу сказать то, что сказал: ни Грэхэм, ни Норвинг, не использовали CLOS.

archimag ★★★
()
Ответ на: комментарий от mv

> Если DSL не торчит наружу через API, это не значит,

что его нет внутри.


Да я как бы тщательно исследовал очень многие пакеты изнутри, и не замечал. Может будем на чём-нибудь основывать свои утверждения?

archimag ★★★
()
Ответ на: комментарий от archimag

Ну вот под порядку, что у меня сейчас установлено:

alexandria - без комментариев
babel - допустим, define-character-encoding
bordeaux-threads - defbindings, defdfun, defdmacro
cffi - без комментариев
iolib - без комментариев

mv ★★★★★
()
Ответ на: комментарий от quasimoto

>Каких тривиальных вещей я не знаю?

Не беспокойся, это просто его коронный финальный аргумент, после которого любое прение автоматически считается выигранным.

linuxfan
()
Ответ на: комментарий от archimag

> Итого, 3 из 70 это каждая первая?

есть несколько путей опровергнуть

1) какой объем вычислений конечной программы обеспечен именно за счет (e)DSL

да один iterate c loop (и всякими map-редьюсами) практически охватывают 60% времени работы программы...

2) от угла зрения под которым мы смотрим на (e)DSL :)

ну представьте что вы смотрите на слона не в бинокль, а имея всего 1 градусов поля зрения... да еще подойдя вплотную. Тут куда посмотришь то и увидишь... один говорит слон это два шара, второй что это стена, третий что змея :) известная вещь в общем... кто то видит (e)DSL кто то нет :(

Расширяйте поле зрения.

psv1967 ★★★★★
() автор топика
Ответ на: комментарий от mv

> alexandria - без комментариев

Хм, и где же там DSL?

babel - допустим, define-character-encoding


И ещё раз, в чём заключается DSL?

bordeaux-threads - defbindings, defdfun, defdmacro


И это тоже всё DSL?

cffi - без комментариев


Комментарии, однако, нужны, ибо не понятно что ты имеешь в виду.

iolib - без комментариев


И снова прошу комментарии (исходный код видел не весь)

Ты что, вообще любое использование макросов относишь к DSL?

archimag ★★★
()
Ответ на: комментарий от archimag

Ты что, вообще любое использование макросов относишь к DSL?

Нет, только те, где определяется синтаксис, специфичный для решения какого-то класса проблем.

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.