LINUX.ORG.RU

Новая стандартная библиотека для CL - CLR

 ,


1

11

Привет.

Как известно, текущая стандартная библиотека Common Lisp устарела, много необходимого в ней просто нет, реализации предоставляют разрозненные наборы фич, а в репозиториях куча полуподдерживаемых библиотек.

Поэтому я тут решил потихоньку пилить новую стандартную библиотеку для CL. По образу и подобию недавно заопенсорсенного .NET Base Class Library.

https://github.com/Lovesan/CLR

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

Важный момент - это не синтаксический сахар и не простое распихивание символов по модулям, как в том же cl21, это именно стандартная библиотека.

Сейчас у меня там совсем небольшое количество кода, и в качестве бэкенда пока только SBCL и винда, но вот неполный список планирующихся фич:

  • Унифицированные *features*
  • Разнообразные распространенные утилиты, вроде with-gensyms итд
  • Унифицированный интерфейс MOP
  • Треды, примитивы синхронизации, атомарные операции, тред пулы, таски/фьючи
  • Асинхронное высокопроизводительное IO, включая работу с сетью
  • Легковесный FFI
  • Различные коллекции, в том числе lock-free. Унифицированный интерфейс коллекций.
  • Кодировки, регулярные выражения, i18n, L10n
  • Работа с датой и временем
  • Унифицированные механизмы сериализации
  • Работа с XML и JSON
  • Работа со сжатием данных
  • Стандартная система логирования
  • Для винды - интеграция с COM по подобию .NET, работа с виндовыми сервисами

Также, в качестве отдельных модулей/asdf-систем:

  • Унифицированная работа с базами данных по примеру JDBC и сотоварищей
  • Работа с безопасностью и криптографией
  • Фреймворк для тестирования кода
  • итд

Пилю пока один, но community effort был бы очень к месту. Желающие - присоединяйтесь.

★★★

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

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

Manhunt ★★★★★
()

Сдристни, мудофель.

anonymous
()

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

anonymous
()

Ты ж вроде для дотнета пилил реализацию какого-то лиспа. Как оно там?

staseg ★★★★★
()

Лучше бы пилил что-нибудь прикладное по-модульнее, а там и библиотечку отколол. Как у gimp.

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

Медленная

Это кстати вопрос интересный кто из них медленней - SBCL или Clojure на JVM. Тесты на шутауте полная дрянь, хотелось бы сравнение чего-то более практичного.

На JVM, в которой нет даже поддержки tailcall

Есть такое. Как платформа CLR (который .NET) действительно лучше, но почему-то на ней ничего не взлетает кроме одобренных MS решений. Есть костыль в виде recur.

Для нее нет ни нормального REPL, ни IDE - ничего сравнимого со SLIME, в силу особенностей ее архитектуры, и в частности, из-за JVM

Тут вообще ничего не понял, есть nREPL, для емакса есть CIDER, из IDE есть Cursive, всё что мне нужно от репла там есть и работает.

Остальное претензии в стиле - кложура не коммон лисп.

Да, объектная система «слабее» чем CLOS, но так ли нужна вся эта гибкость ? В принципе хватает протоколов и мультиметодов. Если не затруднит, то хотелось бы пример того что можно сделать в CL и нельзя в кложуре.

Ну и может кто-то развёрнуто объяснит почему кложура не лисп ? Помню какая-то паста пробегала про Рича Хикки, можно даже её.

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

проще написать что лиспы, а что не лиспы:

из живых:

Common Lisp, Emacs Lisp, PicoLisp — настоящие лиспы.

Scheme, Racket — недолиспы.

NewLisp, Clojure — нелиспы (только скобчатый синтаксис).

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

Emacs Lisp — настоящие лиспы

Racket — недолиспы.

Тогда можно критерий «лиспа»? Racket намного мощнее, чем Emacs Lisp. Или критерий — Lisp-2? Хотя, тогда почему Picolisp — «настоящий лисп»?

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

Вчера я сказал, что CL это хороший язык, а завтра сказал, что стандартная библиотека устарела.

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

Мне просто жутко любопытно, что есть общего у Common Lisp, Emacs Lisp, PicoLisp такого, что этого нет у Scheme. А то ведь есть ещё AutoLisp, ilisp, ... Их куда?

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

Их куда?

Просто не читай неадекватов, нервы целее будут

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

А он получется совсем не знает Clojure.

Да паста вообще какой-то бред наркомана, который увидел [] и #{} и у него порвало шаблон. Не нравится краткая запись через ридер - юзай функции, никто не мешает. Пиши (vec (list 1 2 3)) (hash-map :asd 123 :foo :bar)

Сахар для деструктуризации вопрос конечно спорный, но частенько удобный.

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

Придирки lambda vs fn это вообще ерунда полная.

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

Медленная

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

Для нее нет ни нормального REPL, ни IDE - ничего сравнимого со SLIME.

Абсолютное фуфло. Вполне пристойный repl идёт искаропки с leiningen, а SLIME для кложуры называется CIDER. Вот уж где можно развернуться как душа пожелает.
По остальным пунктам - либо да, по существу, либо всякая у тебя вкусовщина, например, синтаксис.

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

Я видел и SLIME, и CIDER, если что. И CIDER и близко по фичастости со SLIME не валялся, особенно в области горячей замены кода и файлов-как-repl. Он по фичам недалеко от какого-нибудь scala repl или там haskell repl, ушел, которые предназначены разве что для поиграться с хелловорлдами, а не для разработки.

Про «упор на многопоточку» итд - вот, смешное: http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=binarytrees...

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

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

Причем, на SBCL программа там еще и крайне недооптимизированная - обобщенная арифметика используется, full-call'ы вместо убирания кода в labels и local-call conventions, итд.

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

особенно в области горячей замены кода и файлов-как-repl

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

haskell repl

Скала не заинтересовала, а с гхцшным реплом сравнить можно только тот, что идёт в комплекте с лейном. Он и есть, но довольно скучный, да.

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

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

Видел буквально месяц назад. Посмотри SLIME еще раз. Может позже напишу чего в CIDER нет, если не лень будет.

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

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

Сколько миллионов горутин сможет запустить твой тред-пул?

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

Сколько миллионов горутин сможет запустить твой тред-пул?

Ты думаешь что наводящие вопросы заставят его задуматься в чём отличие горутин от тредов в тредпуле ?

Для сравнения core.async - это 4398 строчек на кложуре, 2244 на кложескрипте и там ещё по мелочи на яве, так что в 100 строчек видимо никак не уложиться.

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

Посмотри SLIME еще раз.

Ок. Всё руки не доходили взяться за CL всерьёз. Не так давно (с месяц назад) игрался с cl-vecto, остался доволен, после Сидра в Слайме как дома.

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

ой блеать, да там основное это дрочево с переподвыврачиванием синтаксиса. «чтобы писать как бы синхронно», лол. что там по себе нахер не надо, в принципе.

(это причем кстати в лиспе тоже делается нехер делать с нормальным кодволкером, которых навалом - в cps трансформируешь всю говнятину и потом переделываешь - даже круче чем в C# выйдет, итд - те вон в finally не могут, а в CL спокойно unwind-protect можно раскрутить в await)

Сколько миллионов горутин сможет запустить твой тред-пул?

Горутина это сраный таск в тредпуле, и ничего больше. Лол блеать, это не эрланг тебе, где VM специальная и счетчики редукций. Неосилили ведь(а если б осилили, хер бы там было сишечку так просто вызывать, чтд).

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

мне платят за решенные задачи с помощью удобного инструмента — CL

А какие вы задачи решаете на CL? Интересуюсь чисто из любопытства.

alienclaster ★★★
()

Пока что мне CL21 больше нравится. У тебя какая-то неразбериха.

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

Хотя, тогда почему Picolisp — «настоящий лисп»?

Не знаю, как насчет лисп-2, но picolisp считается настоящим, потому, что в нем есть fexpr'ы и динамическое связывание. Соответственно, в нем нет синтаксиса, Ъ code-as-data, *настоящая рефлексия*, весь код — *runtime inspectable/modifiable tree*. Легенды гласят, что именно такими были лиспы, до той поры, когда были запилены алголоподобные языки в лисповской скобочной шкуре которые стали называть тоже лиспами:)

sadlinuxoid
()

Поэтому я тут решил потихоньку пилить новую стандартную библиотеку для CL.

стандартную
Пилю пока один

okay.jpg

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

Я не особо в теме, просто ковырял когда то. Спорить я не буду, знаю только, что picolisp по перформансу лучше вроде. А так, хз. Newlisp мне показался «посахарней». Документирован вроде лучше.

newLisp круче чем PicoLisp

А чем конкретно?

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

Чем picolisp

не, это я понял:). Я имею в виду, по каким критериям он лучше.

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

Я бы на твоём месте надавил на документирование и написание примеров для того, что есть. Ибо слишком большая задача. Прежде всего, социальная. Тебе либо придётся переманить на свою сторону тех, кто поддерживает существующие библиотеки, либо всю вечность вперёд выполнять их работу (либо надеяться, что кто-то «подтянется»). Сие не есть экономное расходование сил, которых не в избытке (по моему скромному мнению).

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

Например, у меня была задумка сделать интерфейс из clcon к quickdoc, чтобы нажатием на кнопку получать доку по любой функции, а не только из стандарта. А также чтобы можно было сделать какой-то mega-apropos или tag-apropos, для нахождения подходящих под задачу функций/классов/библиотек.

Но пока далеко до того, чтобы на это нашлись силы.

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

какой вообще может быть функциональный язык без TCO?

Common Lisp, да?

anonymous
()

я тут решил потихоньку пилить новую стандартную библиотеку для CL

и чтобы было свежо и ни с каким другим проектом имена не путались назвал ее CLR - молодец, ждем от тебя новых ярких и неожиданных решений

PS стесняюсь спросить, что значит R в CLR?

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

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

shty ★★★★★
()

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

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

спасибо тебе, о мудрейший, преклоняюсь перед гуру именования библиотек!

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