6

Parece que hay un fuerte movimiento para la convergencia de las matemáticas y los lenguajes de programación de computadoras, esto se evidencia notablemente por la influencia del cálculo lambda en las lenguas modernas. La mayoría de las veces no pienso en matemáticas, creo que con lógica. Me parece que muchos de los fenómenos que se pueden modelar matemáticamente también se pueden modelar lógicamente.Convergencia de Matemáticas y Lenguajes de Programación

No creo que alguna vez veamos un lenguaje puramente lógico o una ganancia de lenguaje puramente matemático para la programación de propósito general, pero me gustaría hacer un inventario de los beneficios de cada paradigma. Me gustaría saber:

  • ¿Cuáles son los beneficios de modelar lenguajes de programación o funciones de lenguaje en matemáticas?
  • ¿Cuáles son los beneficios de modelar un lenguaje sobre los principios de la lógica formal?
  • ¿Puede un lenguaje de propósito general renunciar a la lógica o las matemáticas?
  • ¿Cuáles son algunos de los idiomas que realmente muestran los beneficios de ambos enfoques?
  • ¿Qué características de hardware hacen que un enfoque sea más atractivo que el otro?
+14

La lógica es matemática. De hecho, es un componente clave de las matemáticas discretas. Y si usted es un científico de la computación o un ingeniero de software, al menos debería sentirse cómodo trabajando con matemáticas discretas. –

+0

Entiendo la relación en el nivel más básico, realmente siento más curiosidad por la expresión a nivel de usuario. – jessecurry

+3

No veo la clara distinción entre lógica y matemática que ve claramente. Obviamente, lo banal que implica cálculos numéricos es más matemático que lógico, pero para temas más avanzados, donde los elementos de estudio son abstracciones complejas, ponerlos en las cestas de "lógica" o "matemáticas" parece una elección arbitraria. – harms

Respuesta

8

En primer lugar, no veo mucha distinción entre la lógica y las matemáticas; el último es simplemente el primero aplicado sistemáticamente a construcciones específicas.

Además, no estoy convencido de que la belleza teórica de los lenguajes de programación basados ​​en la matemática/lógica realmente valga mucho cuando se trata de hacer cosas escribiendo código eficiente y fácil de mantener.

En cuanto a sus preguntas específicas.

¿Cuáles son los beneficios del modelado lenguajes de programación o lenguaje funciones en las matemáticas? ¿Cuáles son los beneficios de modelar un lenguaje sobre los principios de la lógica formal?

Las pruebas de corrección se vuelven mucho más fáciles, aunque es cuestionable si alguna vez llegaremos al punto en que sean prácticas para los sistemas de la vida real.

Puede un lenguaje de propósito general o bien renunciar a la lógica o las matemáticas?

Depende de lo que quiere decir con "forgo".Puedes tener un lenguaje sin operaciones matemáticas (aunque tienes que ser bastante esotérico, las máquinas de Turing son las únicas que puedo pensar que ni siquiera tienen incremento o disminución), y puedes tener una que no se preocupa por los formalismos (Ensamblador, C). Pero yo no creo que sea posible tener un lenguaje de programación sin lógica (aunque puede ser una lógica perversa, cf. Malbolge)

¿Cuáles son algunas de las lenguas que realmente mostrar las ventajas de uno u otro enfoque?

Pues bien, si se tiene en cuenta cálculo lambda una forma de lógica, entonces Lisp ha estado mostrando sus beneficios bastante bien por ser desde 1958 el lenguaje expresivo cuyo poder aspirar otra lengua (pero no logran) para llegar.

Luego está Prolog, el único otro lenguaje "serio" que conozco que intenta fundamentarse explícitamente en la lógica formal. Y, qué sorpresa, es bueno para cosas lógicas y poco más.

¿Qué características de hardware hacen que un enfoque sea más atractivo que el otro?

Ninguno. La falla de Lisp Machines prueba IMO bastante concluyentemente que los compiladores + hardware general son más poderosos que el hardware especializado. Sin embargo, se podría decir que el poder bruto simpe del sistema actual está haciendo que los lenguajes que ignoran completamente las restricciones de hardware sean prácticos donde antes no lo eran.

+1

Diría que Haskell es igual de serio acerca de estar explícitamente cimentado en la lógica, como ML (estándar). De lo contrario, muy buen comentario. – harms

2

ya que la ciencia de la computación es una rama especial de las matemáticas: no hay convergencia de las matemáticas y el lenguaje de programación. Un lenguaje de programación es matemática aplicada. Es una herramienta creada por personas con un profundo conocimiento de las matemáticas para ser utilizado por otros (la mayoría de las veces con un conocimiento menos profundo). Puedes compararlo con un interruptor de luz: puedes usarlo sin haber estudiado física pero aún así se aplica la física. A veces (especialmente si tienes un problema) es necesario tener el "conocimiento". Entonces necesitas el fondo especial.

+0

pero aquellos que encienden luces (escribir PHP) tampoco serán contratados para trabajar como científicos de cohetes (escriba Haskell), y creo que esta división aumentará en la forma en que afecta a la industria en el futuro, al igual que los hombres de las cavernas tenían doctores pero ahora necesitan grados y más de 9 años, así que supongo que la convergencia significa la convergencia de la * profesión * con las matemáticas no tanto CS (porque CS ya * es * matemáticas). –

1

Bueno, para ser honesto, muchos de estos llamados "lenguajes de programación modernos" simplemente están imbricando cosas que han estado en varios lenguajes de programación durante más de 50 años.

+0

De hecho. Lisp fue originalmente especificado en 1958, basado en cálculo lambda. APL, que está muy orientado hacia las operaciones matriciales, estuvo disponible para IBM 1130 en 1967. –

+0

¿Qué partes de Haskell, OCaml y otros sistemas de tipo estaban disponibles hace 50 años o en algún lugar, incluso cerca? –

1

¿Cuáles son los beneficios de modelar lenguajes de programación o funciones de lenguaje en matemáticas? ¿Cuáles son los beneficios de modelar un lenguaje sobre los principios de la lógica formal?

Estas son la misma cosa: la lógica formal es solo una rama de las matemáticas. Dos ventajas principales del uso de las matemáticas formales son la optimización y la seguridad. Cuando un algoritmo no tiene efectos secundarios (es decir, es referencialmente transparente) y se expresa únicamente mediante el uso de compiladores matemáticos puros, puede reestructurar el algoritmo de acuerdo con las reglas de las matemáticas. Esto facilita a los compiladores la optimización del código y la explotación de arquitecturas paralelas. Otro beneficio importante es la capacidad de probar ciertas propiedades del código.

Puede un lenguaje de propósito general o bien renunciar a la lógica o las matemáticas?

No. ¿Cómo harías operaciones booleanas o aritméticas sin lógica o matemáticas? Puede que signifique algo aquí que no entiendo.

¿Cuáles son algunos de los idiomas que realmente muestran los beneficios de ambos enfoques?

Haskell, ML, OCaML, Miranda, Alice, Oz, Erlang, Twelf, Coq, Prolog, todos demuestran aplicaciones más rigurosas de las matemáticas para la programación.

¿Qué características de hardware hacen que un enfoque sea más atractivo que el otro?

No creo que el hardware cambie mucho las cosas en cuanto a los beneficios de los rigurosos enfoques matemáticos de programación.Los beneficios del código referencialmente transparente se encuentran principalmente en el nivel del compilador.

Cuestiones relacionadas