LINUX.ORG.RU

А как у common lisp дела с производительностью?

 


4

10

Решил покурить cl ,не ну реально красивый язык. Учить решил по книге Practical Common Lisp (может посоветуете что ещё?), а запускать код на clisp. Ну так вот какие реализации языка предпочесть? Касаемо книг хотелось бы что то типа k&r, в такой же манере, но для common lisp, ну вы поняли.

Ну и вообще что посоветуете начинающему лисперу?

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

Громко сказано, скорее в «образ», все-таки там не машинные команды, или я ошибаюсь?

Ошибаешься.

Там было сложное предложние, или образ можно выпилить? Посмотрел dissasemble, норм, где-то листинг (с другим выводом) ввел в заблуждение.

А динамически слинковать в sbcl как-то можно? Интересен пример, скажем, «paktahn»-а: вроде интересно, но объем и время запуска..

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

я говорю, что супербыстрым он быть не можнт

Ваш подход напоминает царс^Wпрокодер99ский, может предварительно стоит проверить удасться ли выжать несколько % или sbcl под рукой нет?

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

чё надо

Всего ничего: чуть меньшей голословности).

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

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

deterok ★★★★★
()

В нормальном лиспе скорость работы упирается в задержки переключения гейтов в FPGA. Вот частичную переконфигурацию в широкую практику как введут, да тайлов побольше сделают, вот будет а-та-та, апофеоз динамичности!

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

он на лиспе валит лучше архимага однозначно :), ну да ладно --- не он так не он. :)

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

Это все попс, vhdl-код из узкоспециализированного dsl любое школоло генерить может, независимо от языка реализации. Ты показывай транслятор из самого лишпега в vhdl/verilog. Чтоб с region analysis, чтоб gc в block ram умел, и все такое.

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

То есть, произвольный common lishp код в vhdl не транслируется? Жаль. Хотел бы я посмотреть на cons и mapcar в vhdl. Кароче, слив засчитан.

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

Смотреть он может на что угодно, но пока на всех тестах V8 уступает SBCL (местами на порядок) только это ноде и остаётся делать.

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

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

Это какието фантазии. Для большинства задач FPGA сильно медленней чем GPU или CPU, не говоря уже про цену. Единственная область где применение FPGA оправданно, это когда прет очень большой поток данных, которые надо обработать не отходя от кассы, поскольку этот поток никуда не лезет.

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

В топике речь шла о производительности, нет?

именно о ней, и сейчас покажу чем плоха «лапша» в плане производительности, вот такой код:

local write, char, unpack = io.write, string.char, unpack
local N = tonumber(arg and arg[1]) or 100
local M, ba, bb, buf = 2/N, 2^(N%8+1)-1, 2^(8-N%8), {}
write("P4\n", N, " ", N, "\n")
for y=0,N-1 do
  local Ci, b, p = y*M-1, 1, 0
  for x=0,N-1 do
    local Cr = x*M-1.5
    local Zr, Zi, Zrq, Ziq = Cr, Ci, Cr*Cr, Ci*Ci
    b = b + b
    for i=1,49 do
      Zi = Zr*Zi*2 + Ci
      Zr = Zrq-Ziq + Cr
      Ziq = Zi*Zi
      Zrq = Zr*Zr
      if Zrq+Ziq > 4.0 then b = b + 1; break; end
    end
    if b >= 256 then p = p + 1; buf[p] = 511 - b; b = 1; end
  end
  if b ~= 1 then p = p + 1; buf[p] = (ba-b)*bb; end
  write(char(unpack(buf, 1, p)))
end

с luajit отработал за 20.4сек, простой код на С++ - за 13сек, а лютый п%ц на CL:

http://benchmarksgame.alioth.debian.org/u32/program.php?test=mandelbrot&l...

у меня висел 5 минут и так и не отработал (не все хаки видимо одинаково полезны), т.е. очевидно, что «лапша» не только удел мазохистов, но еще и вылазит боком для той самой производительности

П.С. кстати, если кому не лень - прогоните этот пример на CL у себя, я пробовал с sbcl 1.1.1.0 и sbcl 1.1.6

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

как будто бы отсутсвие этой реализации опровергает справедливость фразы, на которую ты отвечаешь :)

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

не на всех заборах ещё написано, что CL - не лучший выбор для числодробилок?

а для чего он лучший выбор? не для ООП точно, там его все порвут по скорости, для работы со строками - тоже не катит (выше был пример), для быстрого и простого накидывания кода тоже плох - примеры на ruby и lua в разы меньше, так зачем он вообще нужен?

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

а для чего он лучший выбор?

пля, от этого баяна уже даже кнопок не осталось... Впоискзабаненныйвгуглесуконах!...

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

пля, от этого баяна уже даже кнопок не осталось

т.е. ни для чего, ок

Впоискзабаненныйвгуглесуконах!...

идинайухчмо

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

примеры на ruby и lua в разы меньше,

Считаешь правильным сравнивать выразительность неидеоматичного кода?

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

Где ты достал такую девушку? ;_;

Лол, паренек подрастет и из «крутого» wannabe лиспера превратится в унылого формошлепщика, а девушка найдет парня по-успешнее. Печальная история, короче.

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

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

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

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

Не смог распарсить. ООП используют для скорости?

для работы со строками

Тут как-то был топик, где мы рвали (по выразительности и количеству строк) код на перл.

для быстрого и простого накидывания кода тоже плох
- примеры на ruby и lua в разы меньше

Не там ты на код смотришь.

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

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

окей, можно пример хорошей библиотеки?

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

Правильный код на Лиспе должен генерить оптимизированный императивный код из высокоуровневого декларативного DSL. Все функциональные фичи лиспа нужны только для написания макросов, а в рантайм-коде от них пользы никакой.

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

Не смог распарсить. ООП используют для скорости?

нет, если писать в ОО-стиле, то CL будет пасти задних по скорости

Тут как-то был топик, где мы рвали (по выразительности и количеству строк) код на перл.

хотелось бы посмотреть

Не там ты на код смотришь.

а где надо?

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

Кода на Лиспе, C++, TH, Nemerle, MetaLua, Converge и прочих метаязыках при правильном подходе в разы меньше, чем на неполноценных языках.

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

Правильный код на Лиспе должен генерить оптимизированный императивный код из высокоуровневого декларативного DSL

да, это я слышал, но на практике почему-то вижу только «лапшу», и да - я смотрел различные библиотеки, а не только бенчи

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

на других ЯП либо кода меньше, либо работает быстрее

fxd

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

нет, если писать в ОО-стиле, то CL будет пасти задних по скорости

Ну, что за очередной бред! LispWorks IDE написано с использованием CAPI (это такая библиотека для создания GUI), а почти все CAPI вкупе с Graphics Ports (это такой аналог GDI+ и Cairo) основано на ООП. Там сплошные классы. Работает нормально.

Да, я и сам в одном своем (пока домашнем) проекте испытываю это CAPI. Все прекрасно. На восемьсот килобайт кода был только один косяк с интероперабельностью, когда поведение текстового контрола отличалось в одной маленькой детали на Windows и Linux, но это такая фигня. Все остальное работает просто замечательно!

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