Download Paradigmas en lenguajes de programación

Document related concepts

Philip Wadler wikipedia , lookup

Transcript
Paradigmas en lenguajes de programación h4p://en.wikipedia.org/wiki/
Programming_paradigm qué es un paradigma? •  un paquete de decisiones que suelen venir juntas •  un es@lo de programación •  una forma de entender los problemas, de aplicar las capacidades de los lenguajes de programación qué es un paradigma •  los paradigmas emergen como resultado de
los procesos sociales en los que la gente
desarrolla ideas y crea principios y prácticas
que instancian esas ideas
Thomas Kuhn. La estructura de las revoluciones científicas
•  los paradigmas de programación son la
consecuencia de las ideas de la gente sobre
cómo hacer programas
paradigmas •  lenguajes de marcado (no turing completos) •  precursores: lenguajes máquina •  declara@vos (sin efectos secundarios) –  funcionales: lisp, haskell, scheme, ML –  lógicos: prolog –  constraint sa@sfac@on •  impera@vos (con estado) y luego... •  orientados a objetos •  scrip@ng •  concurrentes •  para aplicaciones específicas record
Descriptive
declarative
programming
XML,
S−expression
Data structures only
Turing equivalent
Observable
nondeterminism? Yes No
The principal programming paradigms
"More is not better (or worse) than less, just different."
v1.08 © 2008 by Peter Van Roy
+ procedure
First−order
functional
programming
+ cell (state)
Imperative
programming
Pascal, C
+ closure
Imperative
search
programming
Functional
programming
+ unification
(equality)
+ continuation
Continuation
programming
Deterministic
logic programming
+ search
Relational & logic
programming
Scheme, ML
+ by−need
synchron.
Prolog, SQL
Lazy
embeddings
functional
+ solver
programming
Constraint (logic)
Haskell
SNOBOL, Icon, Prolog
+ name
(unforgeable constant)
ADT
functional
programming
+ cell
ADT
imperative
programming
Scheme, ML
Haskell, ML, E
CLU, OCaml, Oz
+ thread
+ single assign.
+ nondeterministic
+ port
choice
(channel)
Monotonic
dataflow
Nonmonotonic
Multi−agent
programming
dataflow
dataflow
programming
programming
Declarative
programming
concurrent
Concurrent logic
Oz, Alice, AKL
programming
programming
CLP, ILOG Solver
Pipes, MapReduce
Oz, Alice, Curry, Excel,
+ thread
+ thread
+ by−need
AKL, FGHC, FCP
Concurrent
+ single assignment
synchronization
+ synch. on partial termination
constraint
Lazy
programming
Functional reactive
dataflow
programming (FRP)
LIFE, AKL
programming
Weak synchronous
+ by−need synchronization
Lazy
programming
Lazy concurrent
declarative
FrTime, SL
constraint
concurrent
programming
programming
+ instantaneous computation
Oz, Alice, Curry
Oz, Alice, Curry
Strong synchronous
programming
Logic and
Esterel, Lustre, Signal
Dataflow and
Functional
constraints
message passing
Unnamed state (seq. or conc.)
More declarative
+ search
Nondet. state
+ port
(channel)
+ cell
(state)
Event−loop
programming
E in one vat
+ thread
Multi−agent
programming
Message−passing
concurrent
programming
Erlang, AKL
+ local cell
Active object
programming
Object−capability
programming
+ closure
Sequential
object−oriented
programming
Stateful
functional
programming
Java, OCaml
+ thread
Concurrent
object−oriented
programming
Shared−state
concurrent
programming
Smalltalk, Oz,
Java, Alice
+ log
CSP, Occam,
E, Oz, Alice,
publish/subscribe,
tuple space (Linda)
SQL embeddings
Message passing
Shared state
Software
transactional
memory (STM)
Named state
Less declarative
comparación •  h4p://en.wikipedia.org/wiki/
Comparison_of_programming_paradigms los lenguajes más usados •  h4p://redmonk.com/sogrady/2015/01/14/
language-­‐rankings-­‐1-­‐15/