Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

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

Hardcore OOP

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

42

eval

bunny

wartość bunny

Pattern matcher -> Unifikator

+

Kontynuacje -> Programowanie niedeterministyczne

=

Prolog (full)

+venti-white-mocha+

wartość +venti-white-mocha+

Pattern matcher -> Unifikator

+

Lazy evaluation -> Strumienie

=

Prolog (część logiczna)

"hello world"

(min 1 (max 2 3))

min(1, max(2, 3)) => 1

Eseje Paula Grahama

(lerp 0 100 time)

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.

- A

I chwała za to C/Javie :!:

- B

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)

- C

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.

Richard M. Stallman

Learn more about creating dynamic, engaging presentations with Prezi