LINUX.ORG.RU

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

 , ,


1

3

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

Ответ на: комментарий от Deleted
ln -s bike.asd ~/.local/share/quicklisp/local-projects/

Можно не bike.asd, а целую директорию. Можно не ln, а mv. Может, правда, понадобится пинок зазевавшемуся рантайму в виде (ql:register-local-projects). Трудно сделать?

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

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

проблема с библиотеками у Common Lisp решена.

Так уж кроссплатформенны библиотеки .Net, в большинстве своём написанные для оффтопика?

ados ★★★★★ ()

Ненужно.

Шарперам не нужны ваши скобочки, у них F# есть.

А скобочникам не нужен стек C#.

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

Вместо того, чтобы писать библиотеки под Common Lisp и поддерживать их, делается этот костыль.

anonymous ()
Ответ на: комментарий от ados
Evaluation took:
  0.001 seconds of real time
  0.000000 seconds of total run time (0.000000 user, 0.000000 system)
  0.00% CPU
  2,224,258 processor cycles
  0 bytes consed

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

Так уж кроссплатформенны библиотеки .Net, в большинстве своём написанные для оффтопика?

В принципе да. Щас все пишут под .Net Standard, а он везде одинаковый. Подавляющее большинство библиотек давно на него перевели. Всякие виндоспецифичные вещи, которых не так много, они вынесены в отдельные пакеты на nuget - кому надо, тот качает их.

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

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

Эксперты подъехали. Реальные проекты, как известно, делаются только на Perl 6.

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

А как CLR «видит» lisp-структуры? Объектами какого класса оно там видится? Если вопрос некорректен куда смотреть в исходниках чтоб наступило просветление?

anonymous ()

А в Net есть возможность создание кроссплатформенного приложения с GUI для виндовс и линукс? Например я разрабатываю на С++ и Net под вижуал студией, а компилю для линукс?

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

Насколько трудоёмко реализовать общелисп в .нет? Ну чтоб без интеропов и с места и сразу в карьер. На манер Рича Хикки. Тогда точно взлетит(С)

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

Когда использую powershell и среду ISE часто пишу что-то типа (Some-ShitCmdLet (UnSome-Function arg1 arg2)). А ISE и вовсе repl... Рефлексия есть, интероп с нативом есть, куча всего из дот-нета. Была мысль запилить ридер и интерпретатор списков но лень.

anonymous ()