Common Lisp как второй язык

369 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
369
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Common Lisp как второй язык

  1. 1. Common Lisp как второйязык программированияВалерий Замараев@valeryz
  2. 2. Направления● Моделирование● Прототипирование● КодогенерацияА также источник идей и вдохновения!
  3. 3. Пример: Модель распределеннойсистемы ● Имитационное моделирование BitTorrent-подобного протокола ● Экспериментирование с протоколом без создания системы и развертывания десятков тысяч клиентов
  4. 4. Пример: реализация PGPверификатора● Gnu PG - лицензия GPL, нет библиотеки, libgpg работает путем вызова внешнего бинарика● Нет возможности втягивать "тяжелые" библиотеки типа OpenSSL● Найденные альтернативные opensource реализации очень сложны и недоделаны
  5. 5. Пример: реализация PGPверификатора● Решение: свой велосипед на C● А перед этим - разведка боем с помощью CL
  6. 6. Пример: генерация PHP кода● PHP – идеальный язык для программирования в «макаронном» стиле● Код в таком «макаронном» стиле лучше не писать, а генерировать● Какой язык должен быть на верхнем уровне?● GitHub: https://github.com/valeryz/MacroPHP
  7. 7. Более рабочий пример:ParenScript function (x) { (lambda (x) switch (x) { (case x case 1: for (var _js1 = 0; _js1 < 3; _js1 += 1) { (1 (loop repeat 3 do (alert alert(foo); "foo"))) }; (:bar (alert "bar")) return null; (otherwise 4))) case bar: return alert(bar); default: return 4; }; };
  8. 8. Какие свойства языка полезны длятаких применений? ● Интерактивность и инкрементность ● Легкая работа со списками ● Замыкания ● Макросы ● CFFI
  9. 9. CFFI – как ctypes, только лучше(defcstruct timeval (tv_sec :long) (tv_usec :long))(with-foreign-object (tv timeval) (foreign-funcall "gettimeofday" :pointer tv :pointer (null-pointer)) (with-foreign-slots ((tv_sec tv_usec) tv timeval) (format t "Seconds: ~A~%Microseconds ~A~%" tv_sec tv_usec)))
  10. 10. Немного CL vs. Python флейма ● context-менеджеры и with слизаны с Лиспа, но в Лиспе все намного проще ● MRO, метаклассы - все из CLOS ● Но очень не хватает генераторов! Решения есть, но все не очень простые
  11. 11. Что почитать для начала?● Эссе Пола Грэма http://paulgraham.com/lispart.html● Practical Common Lisp http://www. gigamonkeys.com/book/
  12. 12. СпасибоКонтакты:twitter: @valeryzgithub: valeryz

×