Me han dicho que HTML es un lenguaje de marcado, C ++ es un lenguaje de programación, ¿qué podría hacer esa diferencia?

22

Mis amigos de programación siempre me dicen que HTML es un lenguaje de marcado y C ++ es un lenguaje de programación. Cuando les pregunto cuál es la diferencia, nunca me dan una respuesta razonable.

¿Qué podría hacer que una llamada C ++ sea un lenguaje de programación y HTML no?

Lucas - Mejor Academia de codificación
fuente
55
¿Te refieres a que no sea Turing completo?
Manoj R
1
@ManojR No todos los lenguajes completos de Turing se consideran lenguajes de programación, por ejemplo XSLT.
yannis
Vuelva a cerrar, vea el Q / A en meta en meta.programmers.stackexchange.com/q/5397/70298
miraculixx
1
Gran edición @gnat, gracias. Pregunta reabierta, comentarios obsoletos eliminados.
yannis
1
@ YannisRizos Acabo de copiar la aclaración dada por OP en los comentarios . Me pregunto por qué tantos usuarios ponen comentarios importantes sobre sus publicaciones en los comentarios, en lugar de editarlos; yo mismo casi siempre edito mis publicaciones en casos como ese
gnat

Respuestas:

45

Un lenguaje de programación es una notación diseñada para pasar instrucciones a una máquina. Según esa definición, tanto C ++ como HTML son lenguajes de programación, como fue la notación que Joseph Marie Jacquard usó en 1801 para programar sus telares .

Sin embargo, con la proliferación de lenguajes que se utilizan para estructurar y / o describir datos, la definición de un lenguaje de programación cambió para incluir solo lenguajes que son capaces de expresar algoritmos. Esta es la definición más común hoy en día y excluye lenguajes como HTML o XML.

En el corazón de la definición actual está el concepto de integridad de Turing . La mayoría de los lenguajes de programación son Turing completos, y la integridad de Turing a menudo se cita como el único rasgo crítico que separa un lenguaje de programación de cualquier otro lenguaje de computadora. Esto es lo suficientemente bueno como regla general, pero no del todo exacto:

  1. Algunos lenguajes completos que no son de Turing se consideran lenguajes de programación, por ejemplo Charity .
  2. Algunos lenguajes que generalmente no se consideran lenguajes de programación son Turing completos, por ejemplo XSLT .
  3. La integridad de Turing por sola no dice mucho acerca de la utilidad de un idioma .

Dependiendo del contexto, puede elegir cualquier definición que desee.

Editar:

Que se sepa aún más, una implementación de un lenguaje no confiere características al lenguaje en sí mismo, por ejemplo: la especificación de un lenguaje puede definir un lenguaje completo durante un tiempo, alguien podría implementarlo al azar dejando de lado su integridad. Sin embargo, el hecho de que esta implementación no esté completa no significa que el lenguaje en sí no esté completo (sino que probablemente significa que la implementación no es conforme). Los detalles de un idioma y los detalles de una implementación particular de un idioma deben reconocerse como cosas separadas, por eso es incorrecto llamar a un idioma interpretado o compilado, etc.

Yannis
fuente
66
¿Podría elaborar sobre el "XSLT no considerado un lenguaje de programación". Nunca he visto esto y, en mi opinión, incluso cuestionaría el conocimiento o la competencia de alguien con los PL al pronunciar esto. Ni siquiera se me ocurre ninguna razón por la que XSLT no deba considerarse un PL (XSLT podría ser un caso leve de tarpit turing, pero ese es otro problema).
bhaak
@bhaak No digo que no deba considerarse un lenguaje de programación. Los lenguajes de transformación de datos generalmente no se consideran lenguajes de programación, lo que no dice absolutamente nada si son o no son lenguajes de programación. He visto lógica de negocios en XSLT y personalmente lo considero un lenguaje de programación. Pero probablemente no lo haría si no lo hubiera visto por primera vez en el trabajo. En cualquier caso, a quién le importa?
Yannis
Podrías agregar una o dos oraciones sobre lo que significa estar completo.
phant0m
@ think123 No creo que pueda dar una definición más simple que la de Wikipedia, y ya he vinculado al artículo relevante en la respuesta.
yannis
5

La frase "Lo sé cuando lo veo" es una expresión coloquial por la cual un hablante intenta categorizar un hecho o evento observable, aunque la categoría es subjetiva o carece de parámetros claramente definidos. La frase fue utilizada por el juez de la Corte Suprema de los Estados Unidos Potter Stewart para describir su prueba de umbral de obscenidad en Jacobellis v. Ohio (1964).

- Artículo de Wikipedia "Lo sé cuando lo veo"

Como la obscenidad, creo que todos conocemos un lenguaje de programación cuando lo vemos. Claramente, el OP lo hace, ya que ya has considerado que C ++ es un lenguaje de programación, y HTML no lo es.

Entonces, ¿cuál es exactamente el objetivo de buscar una definición formal? Yannis ya ha dado un gran resumen de por qué la definición más popular, la integridad de Turing, es defectuosa: conduce a una categorización que desafía la prueba "Lo sé cuando lo veo".

Les digo que cualquier definición que se les ocurra conducirá a algunos lenguajes que todos creemos que no son lenguajes de "programación" se clasificarán como tales; o para algunos lenguajes que todos creemos que son lenguajes de "programación" se clasificarán como no .

¿Por qué no simplemente ir con las tripas? Utilizo una heurística simple: un lenguaje de programación es un lenguaje cuyo propósito principal, en mi opinión y según mis observaciones, es escribir programas. No para marcar el contenido. No para transformar XML. Para escribir programas de propósito general. Prefiero saberlo cuando lo veo que tratar de definir una definición formal, y no veo ningún valor genuino que pueda surgir al intentar tal definición.

Carson63000
fuente
Pero ahora está limitando los "lenguajes de programación" a los "lenguajes de programación de propósito general". Esto último es lo que la gente suele decir cuando dice "lenguaje de programación", pero perseguir exactamente cuáles son las características definitorias de un "lenguaje de programación" también tiene su punto en comprender qué son los lenguajes de programación, cómo funcionan y cuáles son sus limitaciones. Por ejemplo, cualquier programador experto debe reconocer el problema de detención cuando lo encuentre, lo cual sería difícil sin estudiar los límites teóricos de los lenguajes de programación.
JesperE
@JesperE: Estoy feliz de limitar mi juicio "Lo sé cuando lo veo" a los lenguajes de programación que son al menos bastante generales en su propósito. Además, no estoy de acuerdo con que "cualquier programador experto" necesite algún conocimiento sobre el problema de detención: sé que mi conocimiento de él por mi educación formal en ciencias de la computación nunca ha sido relevante para mí en casi dos décadas de desarrollo profesional.
Carson63000
1
Si no ha tenido que mencionarlo, probablemente sea bueno. Eso no significa que no sea importante saberlo. No juzgas la calidad de tu cinturón de seguridad por la frecuencia con la que se usa, ¿verdad?
JesperE
Por tu heurística, ¿es elisp un lenguaje de programación?
Brian
@Brian: ¡interesante! Supongo que siempre he pensado en elisp como una implementación de Lisp, que claramente es un lenguaje de programación, a pesar de que esta implementación en particular es mucho más específica en su alcance de propósito.
Carson63000
2

Los lenguajes de marcado tratan principalmente de cómo se muestra la información y, en general, carecen de la infraestructura de programación de variables, matemáticas, comparación, toma de decisiones (si ... entonces), bucles (por, mientras), etc.

HTML en sí mismo es estático; es decir, al igual que un procesador de texto, está destinado a presentar la información tal como es. Solo con la adición de algún tipo de lenguajes de programación (generalmente lenguajes de script como JavaScript, PHP, etc.) las páginas web HTML pueden tener un contenido "cambiante". Los lenguajes de secuencias de comandos proporcionan las posibilidades de "programación" con variables, matemáticas, comparaciones, toma de decisiones, bucles, etc.

hekimgil
fuente
0

HTML es un lenguaje declarativo. No hace mucho por sí solo, solo describe un documento y su contenido (usando etiquetas que tienen un significado semántico).

C ++ por otro lado hace algo. Sí define funciones y clases, pero también describe cómo estas funciones deberían funcionar juntas, cómo sus entradas y salidas están vinculadas de manera significativa y cómo la aplicación debería ejecutarse como un todo.

Radu Potop
fuente