LINUX.ORG.RU

Вышел Clasp 0.4

 , , , ,


4

8

20 ноября вышел в свет Clasp 0.4 — новый релиз, включающий в себя совершенно новый компилятор, способный генерировать до 200 раз более быстрый код, чем его предшественник, так же улучшено взаимодействие с C++ и теперь реализация полнее соответствует стандарту ANSI Common Lisp.

Clasp — новая реализация Common Lisp с упором на легкое взаимодействие с библиотеками C++, используя LLVM для компиляции в нативный код, с целью использования большого количества существующих библиотек и программ. Встраивание их в среду Common Lisp'а позволяет воспользоваться быстрым прототипированием, инкрементальной разработкой и другими возможностями, делающими Common Lisp столь мощным языком.

Основные изменения:

  • Совершенно новый, оптимизирующий/встраивающий (inlining) компилятор — cclasp! (небольшое сравнение с C++ / SBCL / Python)
  • Значения типов fixnum, character и single-float теперь представлены напрямую.
  • Указатели на объекты и cons-ячейки теперь тегируются для скорости.
  • Библиотека Clbind позволяет программистам выставлять наружу внешние C++-библиотеки.
  • Множество исправлений ошибок и улучшений.

>>> Подробности

★★★★★

Проверено: maxcom ()

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

DSL для создания DSL

для повышения ЧСВ у маминых погромистов.

Извини, нет права :-)

На нет и суда нет.

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

для повышения ЧСВ у маминых погромистов.

Ну, это может быть в окружении анона(-ов) так :-) А в научных кругах, ЛИСП является очень важным материалом :-)

На нет и суда нет.

Поэтому, юзай дальше свой пайфон во имя красной икорки с маслом :-)

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

А в научных кругах, ЛИСП является очень важным материалом

Это пока на нём там преподавали. Уже на питон переходят, если что.

Поэтому, юзай дальше свой пайфон во имя красной икорки с маслом

А ты юзай дальше свой лисп во имя маминого борща и завышенного ЧСВ.

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

Уже на питон переходят, если что.

Это потому, чтобы воспитывать таких, как анон :-)

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

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

А я на работе склеиваю списки, фильтрую, сворачиваю, иногда сериализую в базу или пускаю в сокет. И получаю за это деньги.

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

Это потому, чтобы воспитывать таких, как анон

Опять ты сливаешься к несению бессмысленной херни.

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

А я на работе склеиваю списки, фильтрую, сворачиваю

Круто! На лиспе? А для чего это нужно, если не секрет?

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

Круто! На лиспе? А для чего это нужно, если не секрет?

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

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

Покажи! Я имею в виду, покажи, как ты их склеиваешь, сворачиваешь и отправляешь в сокет. Потом будем про лаконичность рассуждать. Сферическая склейка в вакууме даже на бейсике, наверное, лаконично может выглядеть.

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

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

(prin1 (filter #'have-rights (concatenate 'list invoices pays))
       *client-socket*)
monk ★★★★★ ()
Ответ на: комментарий от cdshines

Сегодня мержил, например

merge(_, [], Pl2) -> Pl2;
merge(_, Pl1, []) -> Pl1;
merge(F, [{K, V}|T], Pl2) ->
    V3 = case lists:keyfind(K, 1, Pl2) of
             {_, V2} -> F(K, V, V2);
             false -> V
         end,
    Pl3 = lists:keystore(K, 1, Pl2, {K, V3}),
    merge(F, T, Pl3).

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

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

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

Так мало того, что стандарт протух, так даже и статьи, восхваляющие лисп, протухли уже несколько лет как.
(всё это - к сожалению. На CL в свое время много писал в академических целях)

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

Опять ты сливаешься к несению бессмысленной херни.

Ты не отвлекайся, зарабатывай на то, что тебе дают, тем, чем тебе позволено :-)

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

А, кстати, какие новые фичи появляются в CL, от которых у меня должна «взорваться голова»?
Только не те, которые есть, например, только в sbcl (в свое время радовался sb-sys:with-pinned-objects, но в ccl этого, например, нет)
upd. и не mop, которого, кстати напомню, в стандарте нет

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

Смешно. Миллион первая реализация паттерн-матчинга. Помню, что использовал bpm для этого в свое время. И это ничего нового в стандарт не привносит

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

Мне, например, нравится стандарт islisp.
А вообще, однозначно протух весь ввод/вывод, не стандартизован (но повсеместно используется) mop, не стандартизован ffi (я, например, застал переходный период с cffi и uffi), не стандартизованы потоки

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

Так лаконичность здесь из-за языка или ты пописал функций, а потом в одном месте все слепил? Я так и на йаве могу написать:

sendVia(socket, filter(this::hasRights, concat(invoices, pays)))
cdshines ★★★★ ()
Ответ на: комментарий от loz

Pl3 = lists:keystore(K, 1, Pl2, {K, V3}),

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

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

А что непонятного то тут? Если ты со списками частенько работаешь, то очевидно, что Pl = proplist, K = key, V - value =)

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

когда уже там продолжения (continuations) не тормозные появятся?

Интересненько, и что же с ними будет делать адепт цепепе? :-)

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

Так лаконичность здесь из-за языка

(defun (filter cond list)
  (iter (for i in list)
        (when (funcall cond i))
        (collect i)))

Всё остальное, кроме has-rights — встроенное. invoices и pays — списки описаний документов (накладные и платежи), но так как реально описания — тоже списки, то работаем как со списками (и хватает обычного prin1 для сериализации куда угодно).

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

то, что тебе дают, тем, чем тебе позволено

О, эти мамины борцуны с системой.

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

<\tread>

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

В любом случае, ты мне надоел.

А утроба алчет икорки красненькой, да комфортика :-)

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

Всмотрись в этот смайлик :-) Улыбка та обманчива :-)

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

(prin1 (filter #'have-rights (concatenate 'list invoices pays))
         *client-socket*)

????? а почему не:

(prin1 (remove-if-not #'have-rights (concatenate 'list invoices pays))
       *client-socket*)
только стандартные функции

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

????? а почему не:

Видимо, потому что я невнимательно читал CLHS. Пропустил, каюсь.

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

Видимо, потому что я невнимательно читал CLHS. Пропустил, каюсь.

Не расстраивайся. Я тоже невнимательно посмотрел на твой пост. Здесь уместнее delete-if-not. Конечно, если ты не собираешься хранить только что созданный список.

А вопрос был потому, что бывают случаи когда нестандартная реализация эффективнее. Впрочем, ответ понял.

anonymous ()

Все бы ничего, но со скобками перебор

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

однозначно протух весь ввод/вывод

Можно подробнее? Протухли разве что пазы. Но это никого не расстраивает. Все используют uiop, ну или на крайняк cl-fad.

не стандартизован (но повсеместно используется) mop, не стандартизован ffi (я, например, застал переходный период с cffi и uffi), не стандартизованы потоки

Есть широко используемые переносимые реализации. Нет никаких проблем с тем фактом, что всего этого нет в стандарте. А вообще, всё это мелочёвка. Common Lisp в основе своей хорош относительно практические всех языков с динамической типизацией.

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

Смешно. Миллион первая реализация паттерн-матчинга.

Не вижу ничего смешного. По-моему это круто. Сейчас самая качественная реализация optima. Пройдёт время и, возможно, её вытеснит более развитая реализация. Всё прекрасно.

И это ничего нового в стандарт не привносит

Никакая сторонняя библиотека не привносит в стандарт ничего. В стандарте только то, что в стандарте :)

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

И это ничего нового в стандарт не привносит

Никакая сторонняя библиотека не привносит в стандарт ничего. В стандарте только то, что в стандарте :)

Дело в том, что эта мелкая либа была ответом на вопрос

А, кстати, какие новые фичи появляются в CL, от которых у меня должна «взорваться голова»?

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

Если это еще один ничем не выделяющийся язык из общей массы «языков общего назначения», то нахер он вообще такой нужен?

Как раз таки Lisp-ы качественно выделяются из общей массы.

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

Дело в том, что эта мелкая либа была ответом на вопрос

Ну не такая уж и мелкая. И реализация не тривиальная. Но в использовании проста конечно-же.

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

Хороший пример. Как и всё в Python, list имеет неудобный интерфейс. Да ещё и называется не правильно. Вместо того, чтобы написать:

map(list, [1,2,3], ["a","b","c"], ["x","y","z"])
Нужно костылять что-то вроде:
map(lambda *args: list(args), [1,2,3], ["a","b","c"], ["x","y","z"])
Ну или как у тебя, использовать лишний, в данном случае, для динамического языка zip.

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

Да ещё и в Python 2 получать крайне интересные результаты из-за кривого map-а:

map(lambda *args: list(args), [1,2,3], [1,2,3,4])
: [[1, 1], [2, 2], [3, 3], [None, 4]]
В этом весь Python.

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

Дело в том, что эта мелкая либа была ответом на вопрос

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

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

CL - скриптовый язык? Где у него такое применение, подскажите? И, кстати, для javascript можно найти и то и другое

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

Конечно скриптовый, то, что некоторые реализации могут компилировать функции в натив - лишь их особенности. Что значит где у него такое применение? Скриптовость это свойство языка, а не его применения.

И, кстати, для javascript можно найти и то и другое

Либу для паттерн-матчинга покажи. Чтобы с гвардами и конструктор-паттернами хотябы.

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

Скриптовость это свойство языка, а не его применения.

Месье - теоретик? Инструмент надо сравнивать с другими инструментами из той же области применения. А не формально.

Либу для паттерн-матчинга покажи.

http://lmgtfy.com/?q=javascript pattern matching github

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

Скриптовость это свойство языка

Нет такого свойства.

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

Я и сравниваю. С другими языками общего назначения.

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