LINUX.ORG.RU

80
Всего сообщений: 302

Выкатили пятую демку лисп ОС Mezzano

https://github.com/froggey/Mezzano/releases/tag/demo5

Можно потыкать палочкой в VirtualBox, QEMU или даже на реальном железе (привет ReactOS!).

Последние изменения:

  • USB stack by fittestbits
  • Improved overall file system support by fittestbits
  • EXT2/3/4 support has been implemented by Bruno Cichon (ebrasca)
  • GMA950 modesetting display driver
  • Hardware accelerated 3D support via qemu’s Virgl device
  • Multicore/SMP support
  • Improved atomic operations
  • Async APIs: wait-for-objects, dispatch, and thread pools
  • Networking improvements: Server support, DHCP, TCP retransmit
  • Source locations are tracked for many kinds of definitions
  • Weak hash tables and other weak objects
  • Cleanup of object representation and unifcation of standard-object/structure-object
  • Unboxed structure slots
  • Short floats implemented using IEEE half floats
  • Unboxed (unsigned-byte 64) arithmetic
  • Stack overflows and memory faults are trapped and can be recovered from
  • Support for building on Windows
  • Major improvements to CLOS and MOP conformance
  • Keymap picker
  • More bug fixes, performance improvements and features

Еще в поставке есть из приложений:

  • IRC
  • Text Editor (Emacs-like)
  • Telnet
  • File manager
  • DOOM
  • Quake I
  • REPL (с доступом ко всем кишкам ОС)
  • Swank

 , , ,

kookoo ()

Вызывать и не ждать функцию библиотеки

Добрый день, комрады!

Использую woo (https://github.com/fukamachi/woo). Хочется реализовать start/stop функции в модуле. Для этого надо код:

  (lambda (env)
    (declare (ignore env))
    '(200 (:content-type "text/plain") ("Hello, World"))))```


вызывать и не блокировать (не ждать) дальнейшее выполнение. Вопрос - как это сделать на CL?

 

silver-bullet-bfg ()

Встроенная DB на Common Lisp

Комрады, всех приветствую. Есть ли встраиваемая БД для Common Lisp? Делаем небольшой pet-проект, часть кода уже на Racket, часть будет на СL. Для сервисов, где нужна не большая БД не хочется тащить ещё и PicoLisp. Посему вопрос.

 , , ,

silver-bullet-bfg ()

Emacs -> sbcl, wishfull thinking

Никто не пробовал соединить emacs widget с sbcl, я вот к чему, пишем интерфейс на emаcs а обработчик вызывает код на sbcl и уже там происходит вычисление кода, common lisp кода.

 ,

saufesma ()

Макросы + история успеха

Комрады. Сабж собственно - чем макросы racket лучше/хуже макросов cl и наоборот?

Второе - где, какой диалект и для чего (лиспа) вы применяете?

Всем спасибо.

З.Ы.: интерес к этому так как начали писать с коллегами большую система на racket. Стало интересно. Делаем just for fun

 , , ,

silver-bullet-bfg ()

Навелосипедил квадратные скобки в лиспе

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

Тащемто теперь есть. Вот так можно вызывать методы:

(use-namespace 'System)

[:Console WriteLine "Hello, World!"]

Вот так можно получить текущее время в стринге: (ни одной круглой скобки! может это tcl/tk?)

[[:DateTime %Now] ToString]

А вот так получить значение максимального int32, из специального статического поля соответствующего класса:

[:int $MaxValue]

Более того, можно стучаться в индексеры дикшнрей и прочих объектов, даже круче чем в Clojure:

(let ((dict (new '(Dictionary :string :string))))
  (setf #[dict "Hello"] "World!")
  dict)

И создавать Enum-ы не обременяя себя расставлением запятых:

(use-namespace 'System.Reflection)

#e(BindingFlags Public Static)

На закуску, для любителей ковыряться в байтах, добавил и такую возможность, прямо как в C# только лучше:

(use-namespace 'System.Text)

(let ((dotnet-array [[:Encoding %UTF8] GetBytes "Hello, World!"]))
  (with-fixed (raw-pointer dotnet-array)
   (cffi:mem-ref raw-pointer :uint8)))
;; ==> 72

Не хватает батареек? Тогда мы идем к вам!

 , , ,

lovesan ()

Common Lisp VS Racket

Комрады. Очень давно тыкал в Cl/SBCL, не так давно написал пару сервисов для этого вашего web’a на Racket.

Вопрос - Common Lisp VS Racket, что более живо для написания web’a, что имеет больше батареек, какая IDE лучше (кроме Emacs), etc.

 , , ,

silver-bullet-bfg ()

Какой сейчас самый актуальный / фичастый парсер xml на CL?

Всем привет. Нужно парсить xml от поставщиков и загонять в базу инет-магазина. Какой у нас щас самый нормальный парсер, который умеет лениво обрабатывать xml на условный миллиард* итемов и не падать? Для CL это plump или на что еще стоит обратить внимание? На racket / clojure тоже подойдет, если кто в курсе и имел опыт практического применения. Интересует в первую очередь практичность, незабагованность и фичастость.

 , , , ,

alienclaster ()

Коммон лисп. Multiple dispatch как в Julia

Привет. В Julia при определении функции наподобие такой

f(x :: T) where T <: Number = 2x

Я могу вызвать f() с любым числом и компилятор сам подставит код, наиболее специфичный для данного типа.

А в common lisp

(defun f (x) (declare (type number x)) (* 2 x))

Компилятор создаст 1 функцию с наименее специфичным кодом, которая будет работать с любым числом

Как можно эмулировать поведение джулии с заранее известным множеством типов?

UPD: название треда вышло дурацким

 

deadplace ()

Вышел Steel Bank Common Lisp 1.5.9

 ,

saahriktu ()

Python VS Common Lisp, workflow and ecosystem

https://lisp-journey.gitlab.io/pythonvslisp/

In short, compared to Lisp development workflow, Python workflow is appaling, horrible, a torture. I can’t really express myself with words. Perhaps the image of a giraffe with whipped cream would be more eloquent.

This is a super high quality comparison. thanks so much. i program in python, clojure, and i’ve been doing some common lisp. python - hard to match my productivity in python right now – some of the libraries are super weird though. i had huge issues with in consistent behavior in some of the data libraries – basically some aspects of python encourage bad library design which you pay for in hours of your life. clojure - consistency/guarantees are nice though the rigid functional style feels somewhat alien/limited to my thinking, anywhere it touches java sucks, anytime lein breaks and you cant repl it really sucks, error messages are kind of awful in clj. common lisp - a lot of fun to program in, programming feels very natural, but i struggled to work with some tools and struggle to identify what libraries are still good/maintained. In general: I struggled to get emacs working on linux.

 ,

Uncle_Bobby ()

Почему CL, а не Logo?

Недавно узнал, что в роботах-пылесосах Roomba используется урезанный Common Lisp:

iRobot

a company that designs and builds consumer robots for inside and outside of the home, including a range of autonomous home vacuum cleaners (like the Roomba, whose native code is written in a compatible subset of Common Lisp).

https://github.com/azzamsa/awesome-lisp-companies

Почему не стали использовать специализированный диалект Lisp для черепахоидов - Logo?

 , , , ,

Bagrov ()

Вопрос про историю лиспа

Мне понравилось замечание в SICP что у лиспа довольно специфичный взгляд на синтаксический сахар. Но вот я не могу понять почему в таких формах из CL как cl:defun или cl:destructuring-bind у ключевых симоволов &key, &optional приставка & вместо использования более адекватных для CL кейвордов?

 , ,

ados ()

Велосипед на Asp.Net Core MVC

(барабанная дробь)

Теперь у моего велосипеда есть пример встраивания лиспа в пайплайн Asp.Net Core MVC.

В лисповом процессе поднимается Kestrel, поднимается сам фреймворк и его расширения (и скачиваются по ходу дела, если вдруг отсутствуют), и в этот пайплайн вклиниваются коллбеки на лиспе, которыми же мы производим даже всю конфигурацию.

Все на лиспе, и сервер, и модель, и вью, и контроллер, и даже небо и даже Аллах.

https://github.com/Lovesan/bike/blob/master/examples/aspnet-mvc.lisp

Вот конкретно код хендлера:

(defun process-request (request response route-data)
  (declare (type dotnet-object request response route-data)
           (ignore request))
  "Processes a single HTTP request.
 REQUEST parameter represents an instance of HttpRequest.
 RESPONSE parameter is an instance of HttpResponse, which we would modify.
 ROUTE-DATA represent a collection of route data parameters(a RouteData instance)."
  (handler-case
      ;; First, retrieve the 'name' route parameter, which we have configured
      ;;  in our CONFIGURE-ROUTES handler
      ;; In case of it represents a string which equals to 'None',
      ;;  we instead utilize current user name.
      (let* ((route-arg (ref (property route-data 'Values) "name"))
             (who (if (string-equal route-arg "None")
                    (property 'Environment 'UserName)
                    route-arg)))
        ;; Set response content type
        (setf (property response 'ContentType) "text/plain; encoding=utf-8")
        ;; Write a string to response stream. Note that the extension method
        ;;   which we are making use of, returns a Task instance
        (invoke 'HttpResponseWritingExtensions 'WriteAsync response
                (format nil "Hello from AspNet.Mvc, ~a!~%Now is ~a~%"
                        who
                        (invoke (property 'DateTime 'Now) 'ToString))
                (property 'CancellationToken 'None)))
    (error (e)
      ;; Handle error in case of one occurs and return completed task
      (format *error-output* "~a~%" e)
      (property 'Task 'CompletedTask))))

 , , , ,

lovesan ()

Велосипед починили. Теперь линуксоиды тоже могут в .Net Core через SBCL

Значит так, сегодня починили баг который не давал SBCL работать с подгруженным в него .Net Core на Линуксе.

(напоминаю, что я делаю библиотеку которая позволяет дергать дотнет-кор из лиспа, и наоборот https://github.com/Lovesan/bike)

Но кроме того, я уже некоторое время собираю докер имаджи, которые содержат в себе реализацию лиспа и .Net Core SDK:

https://cloud.docker.com/u/love5an/repository/docker/love5an/dotnet-core-sdk-...

Пока поддерживаются реализации SBCL и Clozure CL(не путать с Clojure).

В основном для линукса, но также есть SBCL в контейнере Windows nanoserver.

Собираю сам, под AMD64, но исходники докерфайлов открыты, можете брать и модифицировать если надо:

https://github.com/Lovesan/dotnet-core-sdk-common-lisp-docker

Даешь лисп! Херак херак и в продакшн!

 , , , ,

lovesan ()

$1000 за починку SBCL

Вобщем такое дело - SBCL криво работает с Unix сигналами когда в процесс подгружается к-либо еще рантайм. Крешится, в итоге. На линуксе. Надо починить. Вот я на боунтисорс отдал 1000 баксов на починку.

https://www.bountysource.com/issues/75904410-sbcl-crashes-while-net-is-here

 , ,

lovesan ()

sbcl: что-то не так с символом '[' в именовании файлов

Это баг такой?

CL-USER> (format nil "~A ~A"
                 (lisp-implementation-type)
                 (lisp-implementation-version))
"SBCL 1.4.10"
CL-USER> (directory "*.*")
NIL
CL-USER> (uiop/run-program:run-program '("touch" "q[r].file"))
NIL
NIL
0
CL-USER> (uiop/run-program:run-program '("ls")
                                       :output :string)
"q[r].file
"
NIL
0
CL-USER> (uiop/run-program:run-program '("ls" "q[r].file")
                                       :output :string)
"q[r].file
"
NIL
0
CL-USER> (probe-file #P"q[r].file")
; Evaluation aborted on #<SB-INT:SIMPLE-FILE-ERROR "~@<~?~@[: ~2I~_~A~]~:>" {1003C5C4C3}>.
CL-USER> (directory "*.*")
(#P"/home/redarch13/Desktop/bug03/q\\[r].file")
CL-USER> (defparameter *p* (first *))
*P*
CL-USER> *p*
#P"/home/redarch13/Desktop/bug03/q\\[r].file"
CL-USER> (probe-file *p*)
#P"/home/redarch13/Desktop/bug03/q\\[r].file"
CL-USER> (uiop/run-program:run-program (list "ls" (namestring *p*))
                                       :output :string)
; Evaluation aborted on #<UIOP/RUN-PROGRAM:SUBPROCESS-ERROR {1004640263}>.
CL-USER> (delete-file *p*)
T
CL-USER> (probe-file *p*)
NIL
CL-USER> 

 ,

ados ()

Написал велосипед

https://github.com/Lovesan/bike

Велосипед представляет из себя интерфейс Common Lisp к .Net Core.

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

Абсолютно кроссплатформенно.

Вобщем, ящитаю, проблема с библиотеками у Common Lisp решена.

(use-package :bike)

(import-assembly 'System.Runtime.InteropServices.RuntimeInformation)

(use-namespace 'System.Runtime.InteropServices)

(defun hello ()
  (let* ((os (property 'RuntimeInformation 'OSDescription))
         (delegate (new '(System.Action :string)
                        (lambda (who)
                          (format t "Hello ~a!~%You are running .Net Core~% inside ~a ~a~% on ~a"
                                  who
                                  (lisp-implementation-type)
                                  (lisp-implementation-version)                                  
                                  os))))
         (user (property 'System.Environment 'UserName)))
    (invoke delegate 'invoke user)))

(hello)

;; ==>

;; Hello lovesan!
;; You are running .Net Core
;;  inside SBCL 1.5.3
;;  on Linux 4.15.0-1041-aws #43-Ubuntu SMP Thu Jun 6 13:39:11 UTC 2019

 , ,

lovesan ()

Хочу тоже поделиться своим поделием: аудио компрессор!

На волне метапрога, уверен, эта тема останется почти незамеченной, но! Представляю вашему вниманию лосслесс компрессор аудио, работающий на технологии вейвлет-сжатия, лол. Написан на необычном, так любимом всеми common lisp.

Вот ссылка:

https://github.com/shamazmazum/wavelet-audio

Там ещё можно сгенерировать документацию через codex, но codex, похоже, теперь сломан. Для работы нужна моя версия trivial-bit-streams (просто положите её в local-projects), всё лень послать ловсану патчи.

https://github.com/shamazmazum/trivial-bit-streams

Ещё нужен easy-audio, но эту штуку я вроде добавлял в quicklisp

Можно сжимать и расжимать несжатые wav файлы так:

(wavelet-audio:encode-wavelet-audio "~/file.wav" "~/file.wa")
(wavelet-audio:decode-wavelet-audio "~/file.wa" "~/file.wav")

Самое интересное, на мой взгляд, Принцип работы кодирования:

  1. Делим входные данные на блоки по wavelet-audio:*block-size* семплов (4096 по умолчанию).
  2. Проводим декорреляцию каналов (пока тестил только с 2 каналами), используя вейвлет Хаара.
  3. Для каждого канала проводим полное DWT с биортогональным (4,2) вейвлетом (использую тот, который при нужной нормализации дает целочисленные коэффициенты). ЕМНИП, это CDF-вейвлет.
  4. Каждый получившийся subband кодирую адаптивным кодом Райса, в котором параметр кода выбирается на основе бегущего среднего.
  5. Пишу на диск первое значение параметра кода, и получившиеся коды Райса.

Декодирование происходит в обратном порядке примерно за то же время (по факту чуть быстрее из-за реализации, видимо).

Жмёт примерно на 2-4% хуже flac (итого типично сжатие на 25-40%).

Вопрос для тех, кто шарит в вейвлетах

Я использую отражение сигнала от краёв, чтобы преобразовать сэмплы, лежащие на краях блока. Это дает непрерывный сигнал, но с разрывной первой производной. Соответственно, у краевых вейвлетов 1 исчезающий момент. Можно ли как-то сделать 4 исчезающих момента, как и у основных, «внутренних» вейвлетов? Смотрел абсолютно везде, но не нашел ответа. Читал статью про CDV вейвлеты, но это не из той оперы, оказалось

 , , ,

deadplace ()

Вышел Steel Bank Common Lisp 1.5.2

Сабж. Замечания к выпуску: http://sbcl.org/news.html#1.5.2
Скачать: https://sourceforge.net/projects/sbcl/files/sbcl/1.5.2/sbcl-1.5.2-source.tar....
.src.rpm пакет для Магейи: https://yadi.sk/d/0NH0bgTMfp75rw

 ,

saahriktu ()