Форуму пора добавить свободную ветку. Потому чито я собираюсь пофлудить :))
Кто-нибудь пробовал писать интерпретатор Лиспа?
Я начал это дело уже в третий раз - набрал пока 1000-кода, и вроде ничего. Код простой, но поддерживает рекурсию, дин.типизацию с иерархичной системой типов, определения функций и т.д. Хотя работает и под nix-ами, я решил попробывать сделать встроенное в интерпретатор функции для работы с виндоузными длл. Вот как выглядит гуёвый Hello-World:
(with-dll (user-dll "user32.dll")
((get-dll-function user-dll "MessageBoxA") 0 "That is Lisp" "Hello World!" 0))
А если писать такую WinNT библиотеку:
(defconst MB_OK 0)
(defconst MB_OKCANCEL 1)
(defconst MB_ABORTRETRYIGNORE 2)
(defconst MB_YESNOCANCEL 3)
(defconst MB_YESNO 4)
(defconst MB_RETRYCANCEL 5)
; etc
(defun Initialise-User-API() (load-dll user-dll "user32.dll" gui-dll "gui32.dll")
; Процесс становится клиентом библиотек
(= MessageBox (get-dll-function user-dll "MessageBoxA"))
; Возвращаемая из dll функция ведет себя как полноценная lambda
(defun Message-Box-OK (caption text) (MessageBox 0 text caption MB_OK))
; etc
то можно сделать програмку так:
(load "winnt.lisp")
(Initialise-User-API)
(Message-Box-Ok "Lisp" "Hello World!")
Пойду теперь запарюсь с so))