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

  • 148 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
148
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Common Lisp как второйязык программированияВалерий Замараев@valeryz
  • 2. Направления● Моделирование● Прототипирование● КодогенерацияА также источник идей и вдохновения!
  • 3. Пример: Модель распределеннойсистемы ● Имитационное моделирование BitTorrent-подобного протокола ● Экспериментирование с протоколом без создания системы и развертывания десятков тысяч клиентов
  • 4. Пример: реализация PGPверификатора● Gnu PG - лицензия GPL, нет библиотеки, libgpg работает путем вызова внешнего бинарика● Нет возможности втягивать "тяжелые" библиотеки типа OpenSSL● Найденные альтернативные opensource реализации очень сложны и недоделаны
  • 5. Пример: реализация PGPверификатора● Решение: свой велосипед на C● А перед этим - разведка боем с помощью CL
  • 6. Пример: генерация PHP кода● PHP – идеальный язык для программирования в «макаронном» стиле● Код в таком «макаронном» стиле лучше не писать, а генерировать● Какой язык должен быть на верхнем уровне?● GitHub: https://github.com/valeryz/MacroPHP
  • 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. Какие свойства языка полезны длятаких применений? ● Интерактивность и инкрементность ● Легкая работа со списками ● Замыкания ● Макросы ● CFFI
  • 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. Немного CL vs. Python флейма ● context-менеджеры и with слизаны с Лиспа, но в Лиспе все намного проще ● MRO, метаклассы - все из CLOS ● Но очень не хватает генераторов! Решения есть, но все не очень простые
  • 11. Что почитать для начала?● Эссе Пола Грэма http://paulgraham.com/lispart.html● Practical Common Lisp http://www. gigamonkeys.com/book/
  • 12. СпасибоКонтакты:twitter: @valeryzgithub: valeryz