SlideShare a Scribd company logo
1 of 21
Всеволод Дёмкин Чему мы можем научиться у Lisp'а?
Кратко о Lisp - 50 лет - “Программируемый язык программирования” - Динамический, мультипарадигменный
Lisp MacLisp InterLisp ZetaLisp Scheme NewLisp Common Lisp Clojure Arc NuLisp Emacs Lisp Dylan
Peter Norvig , PAIP, 1992 http://norvig.com/paip.html  What makes Lisp different? - Built-in support for lists - Automatic storage management - Dynamic typing - First-class functions - Interactive environment - Uniform syntax - Extensibility - History
Phillip Greenspun's 10 th  rule of programming  Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.
Guy Steele, автор спецификации Common Lisp, со-автор спецификации Java C++ Java Python Ruby Lisp We were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp.
(cl-who:with-html-output-to-string (s nil :prologue &quot;<?xml version=amp;quot;1.0amp;quot; encoding=amp;quot;UTF-8amp;quot; ?>&quot;) (:rss :version &quot;2.0&quot; :|xmlns:atom| &quot;http://www.w3.org/2005/Atom&quot; (:channel (:title &quot;Новые переводы&quot;) (:link &quot;http://tedxkyiv.com&quot;) (:|atom:link| :href &quot;http://tedxkyiv.com/feed&quot; :rel &quot;self&quot; :type &quot;application/rss+xml&quot;) (:description &quot;Список новых переводов.&quot;) (iter (:for item :in (mapcar #'cdar (cdadar (with-input-from-string (in (drakma:http-request *url*)) (json:decode-json in))))) (:for link := (strcat &quot;http://ted.com/&quot; (cl-ppcre:scan-to-strings &quot;href=amp;quot;.*amp;quot;&quot; item))) (htm (:item (:title (str (cl-ppcre:scan-to-strings &quot;<dt class=amp;quot;thumbnailamp;quot;>(.*)</dt>&quot; item))) (:link (str link)) (:guid  (str link)) (:description (str (cl-ppcre:scan-to-strings &quot;<dd>(.*)</dd>&quot; item))))))))) Форма —  это черный ящик, клетка, живой организм
Kent Pitman http://www.nhplace.com/kent/Papers/  Condition-Handling-2001.html The establishment of protocols is a sort of before-the-fact hedge against the &quot;prisoner's dilemma&quot;; that is, it creates an obvious way for two people who are not directly communicating to structure independently developed code so that it works in a manner that remains coherent when such code is later combined.
Протоколы Common Lisp - Метаобъектный - Сигнальный - Множественных возвращаемых значений - …
Функциональная парадигма - краткий и ясный код протокол функций высших порядков (map, reduce, find, remove, funcall/apply,…) функция-объект + коллекция - но практично!
Действительно большие системы - ОО - скрипты не масштабируется! Fractal programming http://olabini.com/blog/2008/06/  fractal-programming/ Ola Bini , JRuby Team
Case study: fin-ack.com
Для скептиков — нет единственно-правилного пути Андрей Москвитин http://archimag-dev.blogspot.com/2009/11/closure-template-5.html 5 дней — парсер и Common Lisp backend, компилирующий шаблоны в машинный код (на платформах, умеющих это, например на SBCL). Поддерживаются все управляющие конструкции, все указанные в спецификации операторы и функции. Система уже достаточно неплохо отлажена и готова к использованию. Размер исходного код — менее 800 строк кода на Common Lisp (оригинальный Java backend — 15 000). Какие-либо &quot;навороченные&quot; библиотеки не используются, только регулярные выражения, да штатные средства символьных вычислений, плюс есть зависимость от моей же библиотеки wiki-parser, но в ней менее 200 строк значимого для данной задачи кода...
Language-oriented programming - code is data - data is code (data-driven design) Rainer Joswig http://bc.tech.coop/ blog/050711.html Writing DSL's in Lisp = putting parentheses around the specification and make it run
Case study: CL-REDIS
http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/b25de73bbe5eb9ba/de4230026ed741c6 Pascal Costanza The only easy way to do metaprogramming in Java is by writing  interpreters — which is quite widely used — or by hiring lots of programmers and give them a catalogue of patterns to instantiate. The easiest way to do metaprogramming in Lisp is by using macros, which can be easily compiled away, so you don't have the same overhead as that of an interpreter at runtime.  So my guess is that there is some form of interpreter running in the Java program that slows everything down.
Exploratory programming - Понастоящему интерактивная среда - Динамические пакеты и системы TDD REPL
Что нам стоит сделать язык расширяемым? 1. Гомоиконность 2. Ортогональность в основе 3. Отдать контроль программисту - Read time - Eval time - Run time
Зачем? Joel Moses APL is like a diamond. It has a beautiful crystal structure; all of its parts are related in a uniform and elegant way. But if you try to extend this structure in any way — even by adding another diamond — you get an ugly kludge. LISP, on the other hand, is like a  ball of mud . You can add any amount of mud to it and it still looks like a ball of mud.
Итак, чему мы можем научиться у Lisp'а?
Всеволод Дёмкин [email_address] http://twitter.com/vseloved http://github.com/vseloved

More Related Content

What's hot

Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Vsevolod Solovyov
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScriptТрансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScriptMax Klymyshyn
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vwИлья Трофимов
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условияхOpenVZ
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Darya Zubova
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsSergey Schetinin
 

What's hot (13)

Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScriptТрансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw2012.11.06 машинное обучение с помощью vw
2012.11.06 машинное обучение с помощью vw
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Переход на Php 7 и итоги
Переход на Php 7 и итогиПереход на Php 7 и итоги
Переход на Php 7 и итоги
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
 
jPoint2014
jPoint2014jPoint2014
jPoint2014
 
Rails for dummies
Rails for dummiesRails for dummies
Rails for dummies
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 

Viewers also liked

Новые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхНовые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхVsevolod Dyomkin
 
Tedxkyiv communication guidelines
Tedxkyiv communication guidelinesTedxkyiv communication guidelines
Tedxkyiv communication guidelinesVsevolod Dyomkin
 
Lisp как универсальная обертка
Lisp как универсальная оберткаLisp как универсальная обертка
Lisp как универсальная оберткаVsevolod Dyomkin
 
Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Vsevolod Dyomkin
 
NLP in the WILD or Building a System for Text Language Identification
NLP in the WILD or Building a System for Text Language IdentificationNLP in the WILD or Building a System for Text Language Identification
NLP in the WILD or Building a System for Text Language IdentificationVsevolod Dyomkin
 
Lisp for Python Programmers
Lisp for Python ProgrammersLisp for Python Programmers
Lisp for Python ProgrammersVsevolod Dyomkin
 
Sugaring Lisp for the 21st Century
Sugaring Lisp for the 21st CenturySugaring Lisp for the 21st Century
Sugaring Lisp for the 21st CenturyVsevolod Dyomkin
 
Crash-course in Natural Language Processing
Crash-course in Natural Language ProcessingCrash-course in Natural Language Processing
Crash-course in Natural Language ProcessingVsevolod Dyomkin
 
Crash Course in Natural Language Processing (2016)
Crash Course in Natural Language Processing (2016)Crash Course in Natural Language Processing (2016)
Crash Course in Natural Language Processing (2016)Vsevolod Dyomkin
 
Natural Language Processing in Practice
Natural Language Processing in PracticeNatural Language Processing in Practice
Natural Language Processing in PracticeVsevolod Dyomkin
 

Viewers also liked (15)

Lisp Machine Prunciples
Lisp Machine PrunciplesLisp Machine Prunciples
Lisp Machine Prunciples
 
Новые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхНовые нереляционные системы хранения данных
Новые нереляционные системы хранения данных
 
Tedxkyiv communication guidelines
Tedxkyiv communication guidelinesTedxkyiv communication guidelines
Tedxkyiv communication guidelines
 
Lisp как универсальная обертка
Lisp как универсальная оберткаLisp как универсальная обертка
Lisp как универсальная обертка
 
Aspects of NLP Practice
Aspects of NLP PracticeAspects of NLP Practice
Aspects of NLP Practice
 
Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?Can functional programming be liberated from static typing?
Can functional programming be liberated from static typing?
 
CL-NLP
CL-NLPCL-NLP
CL-NLP
 
NLP in the WILD or Building a System for Text Language Identification
NLP in the WILD or Building a System for Text Language IdentificationNLP in the WILD or Building a System for Text Language Identification
NLP in the WILD or Building a System for Text Language Identification
 
Practical NLP with Lisp
Practical NLP with LispPractical NLP with Lisp
Practical NLP with Lisp
 
Lisp for Python Programmers
Lisp for Python ProgrammersLisp for Python Programmers
Lisp for Python Programmers
 
NLP Project Full Cycle
NLP Project Full CycleNLP Project Full Cycle
NLP Project Full Cycle
 
Sugaring Lisp for the 21st Century
Sugaring Lisp for the 21st CenturySugaring Lisp for the 21st Century
Sugaring Lisp for the 21st Century
 
Crash-course in Natural Language Processing
Crash-course in Natural Language ProcessingCrash-course in Natural Language Processing
Crash-course in Natural Language Processing
 
Crash Course in Natural Language Processing (2016)
Crash Course in Natural Language Processing (2016)Crash Course in Natural Language Processing (2016)
Crash Course in Natural Language Processing (2016)
 
Natural Language Processing in Practice
Natural Language Processing in PracticeNatural Language Processing in Practice
Natural Language Processing in Practice
 

Similar to Чему мы можем научиться у Lisp'а?

Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoLev Walkin
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
как учить программировать[1]
как учить программировать[1]как учить программировать[1]
как учить программировать[1]Pavel Penkov
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Технология OpenMP
Технология OpenMPТехнология OpenMP
Технология OpenMPTatyanazaxarova
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentIntersog
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волныArtem Prysyazhnuk
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волныKiev ALT.NET
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Ontico
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Yury Bushmelev
 

Similar to Чему мы можем научиться у Lisp'а? (20)

Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at Echo
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
как учить программировать[1]
как учить программировать[1]как учить программировать[1]
как учить программировать[1]
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
DLR Hosting
DLR HostingDLR Hosting
DLR Hosting
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Технология OpenMP
Технология OpenMPТехнология OpenMP
Технология OpenMP
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волны
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
 

Чему мы можем научиться у Lisp'а?

  • 1. Всеволод Дёмкин Чему мы можем научиться у Lisp'а?
  • 2. Кратко о Lisp - 50 лет - “Программируемый язык программирования” - Динамический, мультипарадигменный
  • 3. Lisp MacLisp InterLisp ZetaLisp Scheme NewLisp Common Lisp Clojure Arc NuLisp Emacs Lisp Dylan
  • 4. Peter Norvig , PAIP, 1992 http://norvig.com/paip.html What makes Lisp different? - Built-in support for lists - Automatic storage management - Dynamic typing - First-class functions - Interactive environment - Uniform syntax - Extensibility - History
  • 5. Phillip Greenspun's 10 th rule of programming Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.
  • 6. Guy Steele, автор спецификации Common Lisp, со-автор спецификации Java C++ Java Python Ruby Lisp We were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp.
  • 7. (cl-who:with-html-output-to-string (s nil :prologue &quot;<?xml version=amp;quot;1.0amp;quot; encoding=amp;quot;UTF-8amp;quot; ?>&quot;) (:rss :version &quot;2.0&quot; :|xmlns:atom| &quot;http://www.w3.org/2005/Atom&quot; (:channel (:title &quot;Новые переводы&quot;) (:link &quot;http://tedxkyiv.com&quot;) (:|atom:link| :href &quot;http://tedxkyiv.com/feed&quot; :rel &quot;self&quot; :type &quot;application/rss+xml&quot;) (:description &quot;Список новых переводов.&quot;) (iter (:for item :in (mapcar #'cdar (cdadar (with-input-from-string (in (drakma:http-request *url*)) (json:decode-json in))))) (:for link := (strcat &quot;http://ted.com/&quot; (cl-ppcre:scan-to-strings &quot;href=amp;quot;.*amp;quot;&quot; item))) (htm (:item (:title (str (cl-ppcre:scan-to-strings &quot;<dt class=amp;quot;thumbnailamp;quot;>(.*)</dt>&quot; item))) (:link (str link)) (:guid (str link)) (:description (str (cl-ppcre:scan-to-strings &quot;<dd>(.*)</dd>&quot; item))))))))) Форма — это черный ящик, клетка, живой организм
  • 8. Kent Pitman http://www.nhplace.com/kent/Papers/ Condition-Handling-2001.html The establishment of protocols is a sort of before-the-fact hedge against the &quot;prisoner's dilemma&quot;; that is, it creates an obvious way for two people who are not directly communicating to structure independently developed code so that it works in a manner that remains coherent when such code is later combined.
  • 9. Протоколы Common Lisp - Метаобъектный - Сигнальный - Множественных возвращаемых значений - …
  • 10. Функциональная парадигма - краткий и ясный код протокол функций высших порядков (map, reduce, find, remove, funcall/apply,…) функция-объект + коллекция - но практично!
  • 11. Действительно большие системы - ОО - скрипты не масштабируется! Fractal programming http://olabini.com/blog/2008/06/ fractal-programming/ Ola Bini , JRuby Team
  • 13. Для скептиков — нет единственно-правилного пути Андрей Москвитин http://archimag-dev.blogspot.com/2009/11/closure-template-5.html 5 дней — парсер и Common Lisp backend, компилирующий шаблоны в машинный код (на платформах, умеющих это, например на SBCL). Поддерживаются все управляющие конструкции, все указанные в спецификации операторы и функции. Система уже достаточно неплохо отлажена и готова к использованию. Размер исходного код — менее 800 строк кода на Common Lisp (оригинальный Java backend — 15 000). Какие-либо &quot;навороченные&quot; библиотеки не используются, только регулярные выражения, да штатные средства символьных вычислений, плюс есть зависимость от моей же библиотеки wiki-parser, но в ней менее 200 строк значимого для данной задачи кода...
  • 14. Language-oriented programming - code is data - data is code (data-driven design) Rainer Joswig http://bc.tech.coop/ blog/050711.html Writing DSL's in Lisp = putting parentheses around the specification and make it run
  • 16. http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/b25de73bbe5eb9ba/de4230026ed741c6 Pascal Costanza The only easy way to do metaprogramming in Java is by writing interpreters — which is quite widely used — or by hiring lots of programmers and give them a catalogue of patterns to instantiate. The easiest way to do metaprogramming in Lisp is by using macros, which can be easily compiled away, so you don't have the same overhead as that of an interpreter at runtime. So my guess is that there is some form of interpreter running in the Java program that slows everything down.
  • 17. Exploratory programming - Понастоящему интерактивная среда - Динамические пакеты и системы TDD REPL
  • 18. Что нам стоит сделать язык расширяемым? 1. Гомоиконность 2. Ортогональность в основе 3. Отдать контроль программисту - Read time - Eval time - Run time
  • 19. Зачем? Joel Moses APL is like a diamond. It has a beautiful crystal structure; all of its parts are related in a uniform and elegant way. But if you try to extend this structure in any way — even by adding another diamond — you get an ugly kludge. LISP, on the other hand, is like a ball of mud . You can add any amount of mud to it and it still looks like a ball of mud.
  • 20. Итак, чему мы можем научиться у Lisp'а?
  • 21. Всеволод Дёмкин [email_address] http://twitter.com/vseloved http://github.com/vseloved