LINUX.ORG.RU

Быстродействие высокоуровневых языков программирования набирает обороты

 ,


0

4

По данным сайта lisp.ru, утверждение, что лисп является медленным ЯП, относится скорее к мифам. Приведу цитату из статьи про Common Lisp (http://lisp.ru/page.php?id=4):

5. Лисп работает очень медленно. Честно говоря, я тоже так думал. Но еще лет десять назад, под влиянием нескольких публикаций о реализации Лиспа на Бейсике, я написал небольшой (но полностью функциональный и расширяемый) интерпретатор Лиспа на языке Паскаль для ДВК-3. И что вы думаете? Мой доморощенный Лисп работал на вычислительных задачах быстрее, чем родной Бейсик фирмы DEC!

Рекорд бейсика по производительности побит. И это при отсутствии компилятора для лиспа:

6. Для Лиспа нет компилятора. Вообще то, это так, поскольку для серьезных Лисп-программ полная компиляция противопоказана - ведь в этом языке единство кода и данных поддерживается на все 100% и зачастую программа синтезируется непосредственно во время выполнения. Но что касается использования компилятора для генерирования промежуточного кода, ускоряющего последующую загрузку и выполнение программ, а также защиту исходного кода программ, то такие решения есть, и входят в состав стандартных дистрибутивов (вернее сказать, встроены в саму среду Лиспа).

Синтезируем и выполняем программу в рантайме, господа! Причем, скорее всего, непосредственно у себя в голове.

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

Бедные лисперы, уже не знают как внимание привлечь к своему переязычку.

FRCTLL ()

Не понял, что неясно ТС.

чем родной Бейсик фирмы DEC

Для платформы, на которой рекомендуемым средством разработки является Бейсик это нормально. Можно считать пруфом, что можно написать достаточно быстрый интерпретатор.

зачастую программа синтезируется непосредственно во время выполнения

Что справедливо для любого языка с eval. Например, sh, perl, tcl...

А вот пример, позволивший на лиспе написать программу, работающую быстрее как раз за счёт синтезации во время выполнения http://swizard.livejournal.com/158763.html

monk ★★★★★ ()

Иди уроки делай.

anonymous ()
Ответ на: комментарий от monk

А вот пример, позволивший на лиспе написать программу, работающую быстрее как раз за счёт синтезации во время выполнения

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

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

Реально я что-то не видел, чтобы eval использовался хоть где-то

Это можно сказать почти про любую специфическую оптимизацию.

И не так уж редко используется:

save-object-10.2.lisp
cl-store/clisp/custom.lisp
cl-store/clisp/mop.lisp
cl-markup/src/markup.lisp
elephant-1.0/src/elephant/metaclasses.lisp
elephant-1.0/src/elephant/schema-evolution.lisp
elephant-1.0/src/elephant/slots.lisp
hu.dwim.walker/source/infrastructure.lisp
hu.dwim.walker/source/handler.lisp
weblocks-dev/test/store/store-utils.lisp
parenscript/src/special-forms.lisp
metatilities/dev/contrib/metering.lisp
iterate/iterate.lisp
cl-syntax-sugar/src/feature-cond.lisp
...
monk ★★★★★ ()
Ответ на: комментарий от monk

cl-store/clisp/custom.lisp
cl-store/clisp/mop.lisp

Тут это какие-то грязные хаки, связанные с тем, что иначе сериализовать функцию в clisp они не могут. Для других реализаций, как видишь такого нет.

iterate/iterate.lisp

В частности eval употребляется для свертывания выражений, содержащих только константы. Если я напишу #.(+ 45 7), например, это не значит, что я занимаюсь кодогенерацией. К тому же eval содержится в функции, которая почти наверняка была вызвана при разворачивании макроса, что никак не рантайм.

cl-syntax-sugar/src/feature-cond.lisp

Если это какой-то аналог #+ или #-, то это тоже не рантайм и не считается.

В общем, я считаю, что всё это костыли, которые можно было бы заменить в случае чего. По крайней мере ещё никто в конкретной рабочей задаче, в рантайме код eval'ом не генерировал, тем более, чтобы потом скакать по жежам и кричать PWNED.

Слишком категоричненько вышло, но как-то так.

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

По крайней мере ещё никто в конкретной рабочей задаче, в рантайме код eval'ом не генерировал

Генерирует, но редко. Так как достаточно дорогая операция. Но твоё утверждение, равносильно «в C никогда не используется dlopen» или «в Java никто не использует класслоадер».

К тому же eval содержится в функции, которая почти наверняка была вызвана при разворачивании макроса, что никак не рантайм.

В elephant через eval компилируются аксессоры к полям объекта в БД. В рантайме (при вызове compute-effective-slot-definition-initargs).

чтобы потом скакать по жежам и кричать PWNED

Вот потому, что в лиспе так не принято, лисп в ж... непопулярен. Всё, что сделано красивого либо сам копай в исходниках либо ищи описания в научных статьях. А потом на lisp.ru пытаются развенчать мифы... В то время как по C++ тысячи статей (в том же ЖЖ) на тему «как правильно сделать самый лучший smart pointer», «как сделать самую быструю строку» и т.д. И прграммист-новичок думает «да, С++ это круто, на нём пишутся самые быстрые программы». И начинает бороться с ограничениями семантики С++ при написании своеё прграммы.

Поэтому я скорее поддерживаю swizard'а, так как его статьи в ЖЖ увеличивают популярность лиспа, что в свою очередь, увеличивает количество доступных библиотек.

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

равносильно «в C никогда не используется dlopen»

Вот нифига не равносильно. dlopen можно, скажем, с load сопоставить, вот только load уже готовый fasl может загружать, а не обязательно компилировать код.

Поэтому я скорее поддерживаю swizard'а

А он, кстати, хто? Он на лоре имеется?

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

dlopen можно, скажем, с load сопоставить, вот только load уже готовый fasl может загружать, а не обязательно компилировать код.

С load можно сравнивать обычную линковку (используются одинаково часто). А я имел в виду плагины. Они в Си также редки, как использование eval в лисп.

А он, кстати, хто? Он на лоре имеется?

Видимо www.linux.org.ru/people/swizard/profile

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

Видимо www.linux.org.ru/people/swizard/profile

Как всё просто )

> С load можно сравнивать обычную линковку (используются одинаково часто). А я имел в виду плагины. Они в Си также редки, как использование eval в лисп.

По частоте использования может и можно сравнить линковку и load (и то, load чаще). А по динамичности вполне load походит на плагины. Ничего же не мешает сделать load прямо в рантайме.

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

А по динамичности вполне load походит на плагины

По динамичности с eval можно сравнить только самомодифицирующиеся программы на ассемблере :-)

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1)

DEC
ДВК-3

Мне и самому нравится компьютерная археология, но «набирает обороты» в данном контексте четвертьвековой давности звучит издевательски =)

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

Так lisp.ru и есть сплошная археология. 2008 год....

А автор статьи просто подчёркивает, что лисп никогда тормозным не был (разве что по сравнению с Си).

monk ★★★★★ ()

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

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

печаль в том что для микрокомпов С оказался годен ,а ЛИШПИК нет ибо требовал либо большого рантайма либо over9000 памяти в десигнтайме

qulinxao ★★☆ ()

По данным сайта lisp.ru, утверждение, что лисп является медленным ЯП, относится скорее к мифам.

Рекорд бейсика по производительности побит.

Паскаль для ДВК-3

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

emulek ()
Ответ на: комментарий от qulinxao

ибо требовал либо большого рантайма либо over9000 памяти в десигнтайме

но успешно работал на IBM704 с 18КБ памяти. На микрокомпах в 70-е было сильно меньше?

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

ВНЕЗАПНО: C/C++

Не понял. В них есть eval? Или это про конструкцию

f = fopen("tmp.c");
fprintf(f, ...);
fprintf(f, ...);
fprintf(f, ...);
...
fclose(f);
system("gcc tmp.c");
system("a.out")

?

monk ★★★★★ ()

CL - это же такой язык для вычисления факториалов?

anonymous ()
Ответ на: комментарий от monk

Что справедливо для любого языка с eval. Например, sh, perl, tcl...

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

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

ты ведь в курсе что в бум AI сильной стороной lisp сред было далеко не то что лисп в начале своего существования ещё более переносимый ассемблер(ну например представления о стековой организации ещё не стали настолько обязательны как к моменту создания сей, от того и всякие фунарги полезли уже в конце 60ых ибо контекст исполнения был на идексных регистрах и своёй дисциплине её обслуживание , а не на «теперь общеочевидной» стековой дисциплине выделения памяти для локальных данных - и даже как раз знание о уже обнаруженых проблемах поставили крест на вложености бай десигн процедур в С ( в отличии от остальных языков алгол-семейства)) чем С . не так ли?

дороговизна(т.е память дешевела медлененее чем чем стоимость операции) памяти при резком падении цены «сложения» у микропроцов и похоронило лисп-среды.

qulinxao ★★☆ ()

По данным сайта lisp.ru

Этот сайт держит обычный «доменный спекулянт». Ссылаться на него глупо даже с целью провоцирования лисп-срача.

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

Ты говоришь это как конкурент? )

Хотя на их форуме темы оля «как считать факториал хвостовой рекурсией. Помощь студентам»

lispfuerimmer ()

Так или иначе, но сишники, крестовики и пхпшники создают реальные промышленные системы, которыми пользуются люди. В то время как лисперы / хаскелляторы и прочие функциональщики ассенизируют интернеты многотомными талмудами по написанию HelloWorld-а.

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

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

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

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

Это web, пардон. Я же правильно понял, что это к нему относится, в частности. Потому что под «Airfare Shopping Engine» может и база данных подразумеваться, и веб морда, и много чего ещё

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

база данных подразумеваться, и веб морда, и много чего ещё

Какой у тебя богатый внутренний мир.

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

Кобольщики и фортранщики создавали по-настоящему реальные промышленные системы, пока не пришли крестовики, пхпшники и прочие лоханы

Т.е. Вы глубоко и искренне убеждены, что крестовики и прочая шушера не создали ни одной реальной промышленной системы?

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