2010-11-02 10 views
5

No soy un experto en idiomas, pero recientemente estoy en idiomas y tratando de obtener una visión general de los principales conceptos y "sus" idiomas. Esto es similar a another question about books. Entonces, primero, ¿cuáles son los principales conceptos del lenguaje de programación, p.¿Cuáles son los diferentes conceptos de lenguaje de programación y qué idiomas los muestran de forma pura?

  • estructurada
  • procedimiento
  • objeto orientado
  • orientado a objetos - prototipo basado (por ejemplo Java Script)
  • funcional (por ejemplo Haskell)
  • lógica orientada (por ejemplo Prolog)
  • meta (si es un concepto puro de su propiedad?)
  • basado en pila (por ej., Forth)
  • basado en matriz/orientado a matriz (p. APL)
  • declarativa
  • por concatenación (por ejemplo, PostScript)
  • (definitivamente lista incompleta ...)

y en segundo lugar para conseguir una buena CRASP de estos conceptos, lo que sería el lenguaje de programación que se basa ¿Está implementando su concepto central de la manera más natural y pura?

  • Por ejemplo, Java es OO, pero no es un buen ejemplo porque no es puro OO debido a los átomos.
  • Lisp es conocido por ser un lenguaje funcional, pero es multi-paradigma, por lo que no es puro. Pero Lisp puede ser una implementación pura de "basado en listas" (si cuenta como concepto).
  • ¿Hay un lenguaje estructurado (no GOTO) pero no de procedimiento? (Tal vez XSLT v1.x)
+1

Smalltalk no es prototípico. SELF es. Además, varios de los "conceptos" anteriores no son ortogonales. Debería hablarse de * aspectos específicos * de cada idioma en comparación unos con otros (incluso los términos anteriores pueden cambiar el significado en función del contexto/idioma). SQL también está "orientado a conjuntos" (pero un "lenguaje de consulta declarativa"), no está orientado a la tabla :-) –

+0

@pst gracias, eliminé los ejemplos incorrectos. –

+2

Por cierto, gracias por no elegir Java como primer ejemplo OO. – delnan

Respuesta

0

Gracias a sólo mi opinión correcta' s respuesta que estaba apuntado en la derecha dirección. Voy a dar la lista de los paradigmas junto con sus lenguas puras en lo descubrí hasta ahora:

  • imperativo
    • no estructurada --- principios de BASIC, Asamblea
    • estructurado ---?
    • procedural ---?
    • modular --- Modula-2, tal vez Pascal
    • orientado a objetos
      • basado en clases --- Smalltalk
      • basado en prototipos --- Ser, quizá Java Script, Lua
  • declarativa --- SQL, expresiones regulares, CSS
    • lógica --- Mercurio, tal vez Prolog
    • funcional --- Esquema, Haskell
        • por concatenación --- alegría, tácito/libre de punto-Cat

En un "eje" diferente tenemos

  • --- escalar la mayoría de ellos
  • gama --- APL

No sabe dónde ponerlo:

  • pila basada --- Forth, Postscript
8

El término que está buscando aquí es "paradigma de programación" y hay a whole lot of them por ahí. Puede obtener una lista de idiomas compatibles con cada uno de esa página de Wikipedia y sus enlaces de seguimiento.

Para las interpretaciones "puras" de cualquiera de estos, es más difícil porque depende del nivel de pureza que esté buscando.

  • Para la estructura pura (bajo cualquier definición de "pureza" suficientemente amplia aquí) puede buscar, por ejemplo, en Modula-2.
  • Para la orientación a objetos puros, usted está buscando principalmente en Smalltalk y su tipo si desea que todo se trate uniformemente (¡no es realmente necesario bajo las definiciones más comunes!) O está buscando en idiomas como Java y Eiffel si aceptarás tipos primitivos bajo ese encabezado.
  • Para funcional, lo más probable es que esté en Haskell.
  • Para la programación lógica, el lenguaje arquetípico es Prolog, pero no es realmente puro. El único (lógico) puro lenguaje lógico que conozco es Mercury, y eso solo si ve sus fragmentos funcionales como esencialmente compatibles con sus fragmentos lógicos.

... y así sucesivamente. Entiendes la idea.

+0

+1 esp. para el enlace de Wikipedia, no lo había visto antes. Pero los paradigmas me parecen un poco bajos, ya que generalmente hay varios agrupados. Todavía es un buen comienzo con procedimientos, OO, FP, Lógica. Gracias. –

+0

De hecho, nominaría a Ruby sobre Smalltalk para la orientación a objetos puros. De acuerdo, Smalltalk estuvo primero aquí, pero Ruby siguió sus pasos: todo es un objeto también en Ruby (incluidos los literales y las definiciones de clase), y Ruby es más moderno, más popular y podría decirse que es más fácil de usar. –

+0

@Ben Lee Acepta que Ruby es OO más puro pero también tiene algunos aspectos funcionales, cierres, mapas, continuaciones, etc. ¿Propagablemente cada lenguaje moderno es multi-paradigma? –

2

Creo que Pascal es el lenguaje de procedimiento canónico.

También creo que Lisp (irónicamente no es ML) es el lenguaje canónico "meta".

Por un lado, una macro es un fragmento de programa que modifica una estructura de datos que representa un fragmento de programa --- por lo que utiliza el lenguaje para modificar el idioma. En segundo lugar, se considera una práctica común escribir intérpretes autohospedadores, tradicionalmente llamados evaluadores metacirculares: son programas que los programan y ejecutan.

Por supuesto, cualquier otro idioma puede hacer eso. En Python tiene acceso al compilador de python, y PyPy es una implementación de python en python. Pero Lisp tiene, creo, la tradición más fuerte de hacer esto.

pero yo soy un extraño Lisp, por lo que se yo ... 'esperanza-este-ayuda ;-)

+0

+1 para captar el significado de mi pregunta –

Cuestiones relacionadas