Opanowanie
Złożoności
Dziękuję za uwagę :)
Jacek "TeMPOraL" Złydach
http://temporal.pr0.pl/devblog
temporal.pl@gmail.com
(Lisp)
Programowalny Język Programowania
Co dalej?
Lisp w praktyce
Common Lisp
Duże aplikacje
Scheme
Game Object
Asteroid
Starship
Space Station
Skrypty
10 Reguła Programowania Greenspuna
Lazy Evaluation
Każdy wystarczająco zaawansowany program w C lub Fortranie zawiera ad-hoc, nieformalnie zdefiniowaną, pełną błędów, wolną implementację połowy Common Lispu.
Metaobject Protocol
iPhone
Optymalizacja kodu
Memoizacja
CLOS
Clojure
Deklaracje
Java
Funkcje wyższego rzędu
code = data
conditions / restarts
cons
call-with-current-continuation
Bardzo dobra dokumentacja
Dynamiczne typowanie
Obliczenia symboliczne
cond
Pakiety first-class
lambda list
Image-based persistency
Keyword parameters
destructuring-bind
Uogólnione settery
loop macro
Domknięcia leksykalne
format macro
Funkcje wyższego rzędu
Funkcje first-class
Programowalny printer
Minimalna składnia
Programowalny reader
Makra kompilacji
Read - Eval - Print Loop
(http://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/)
Inkrementalna kompilacja
Makra syntaktyczne
Garbage collector
Rozmyte pojęcie runtime / compile time
MAKRA
FUNKCJE
Programy, które piszą programy
Lisp 101
Domknięcia
http://landoflisp.com
http://www.gigamonkeys.com/book/
Cały Lisp jest dostępny dla kodu w trakcie
makroekspansji.
Google: SICP
http://mitpress.mit.edu/sicp/
S-Expressions
wartość +
Prolog w Lispie
eval
wartość bunny
Pattern matcher -> Unifikator
+
Kontynuacje -> Programowanie niedeterministyczne
=
Prolog (full)
wartość +venti-white-mocha+
Pattern matcher -> Unifikator
+
Lazy evaluation -> Strumienie
=
Prolog (część logiczna)
min(1, max(2, 3)) => 1
Eseje Paula Grahama
http://paulgraham.com
operandy
Beating the Averages
Revenge of the Nerds
operator
What Made Lisp Different?
#lisp
#lispgames
Cytowanie
#lisp-pl
Obliczenia symboliczne
http://lispgames.org
irc://chat.freenode.net
http://lisp.pl
Dygresja 1
o składni, kodzie i danych
(http://www.loper-os.org/?p=295)
Kod = Dane
Homoikoniczność
O Lispie
Po co nam tyle języków?
1986 AutoLISP
1984 - Emacs Lisp
1973 - ZetaLisp
Lisp
1984 - Common Lisp
1994 - CLOS
2007 - Clojure
1975 - Scheme
1958 - LISP
1967 - Interlisp
1978 - Franz Lisp
Rodzina języków ogólnego przeznaczenia.
1993 - Ruby
2001 - C#
1972 - Prolog
1980 - C++
JavaScript
1957 - FORTRAN
1964 - BASIC
1991 - Python
1995 - Java
Prolog
1983 - Objective C
1972 - C
Ruby
1983 - Ada
Scheme
Clojure
OCaml
Python
Common Lisp
Haskell
ICON
PHP
ML
Scala
F#
Java
C#
Erlang
Lisp...
(Blub)
Lisp wprowadził
Lisp
C++
NIE jest owsianką z obciętymi paznokciami
NIE jest językiem funkcyjnym
NIE jest interpretowany
NIE wymaga liczenia nawiasów
NIE zapisujemy "LISP"
NIE jest martwy
NIE jest (tylko) do AI
C
- Garbage collecting
- Struktury drzewiaste w języku
- Self-hosting compiler (eval)
- if-then-else (cond)
- Programowanie funkcyjne
- Funkcje first-class
- Referencje
- XML (sort of, czytelniejszy)
- Makra syntaktyczne
- Aspect-Oriented Programming
- Homoikoniczność
- (...)
ASM
Blub Paradox
chromatic Czasem się zastanawia czy Lisp istnieje tylko po to, żeby Lispersi mogli twierdzić, że wymyślili wszystko pierwsi (nie, żeby nie wymyślili)
Chromatic,
http://identi.ca/notice/41830931
Co do kreatywności języka - PHP tak samo jak Ruby ma dynamiczną typizację, closures, funkcje lambda i wszystkie te zabawne rzeczy których brakuje w C/Javie.
I chwała za to C/Javie :!:
Siła wyrazu
Niektóre z rzeczy, o których wspomniałeś A są natomiast w C# :) Osobiście nie wyobrażam sobie znowu przesiadki na Javę bez wyrażeń lambda, składni linq itp.
(AKA. moc języka)
Dlaczego Lisp?
Lisp poszerza horyzonty
Lisp jest potężny
Istnieje mit, że Lisp (i Prolog) są językami 'specjalnego przeznaczenia', a języki takie jak Pascal i C są 'ogólnego przeznaczenia'. W zasadzie jest dokładnie na odwrót. Pascal i C są językami specjalnego przeznaczenia, do manipulowania rejestrami i pamięcią komputera w architekturze von Neumanna.
Peter Norvig,
Paradigms of Artificial Intelligence Programming
LISP, będąc najpotężniejszym i najczystszym z języków, jest językiem, który projekt GNU zawsze preferuje.