Hasta ahora no sé las diferencias CLAVE entre estos tres. Cuando alguien me pregunta sobre esto, solo les digo que C # es un lenguaje de programación, HTML y XML son lenguajes de marcado, y JavaScript y VBScript son lenguajes de secuencias de comandos. ¿Pero cuáles son las diferencias clave que los distinguen entre sí?
38
Respuestas:
Permítanme intentar encontrar una línea divisoria entre estos tres tipos de lenguaje. Por supuesto, habrá numerosas excepciones y contraejemplos, ya que esta es solo mi opinión.
Se utiliza un lenguaje de marcado para controlar la presentación de datos, como "representar estos nombres de usuario como una lista de viñetas o como una tabla".
Se utiliza un lenguaje de secuencias de comandos para mediar entre programas y generar datos. Esto es especialmente cierto para los lenguajes de scripting de shell como bash, pero si reflexiona al respecto, también Python o Perl surgieron de la necesidad de realizar tareas en UNIX sin escribir un programa en C. El programa que controla la mayor parte del tiempo en esos idiomas es el intérprete del lenguaje en sí , que realiza tareas generales para usted. Otros programas típicos con los que interactúa son servidores de bases de datos o servidores web.
Volviendo a la metáfora de la lista de usuarios, en un lenguaje de script le pide a la base de datos "darme todos los nombres de usuario", luego le pregunta al servidor web "envíe esta lista de usuarios a este solicitante".
Un lenguaje de programación se utiliza para transformar datos . Lo hace creando instrucciones de CPU que reescriben los datos de entrada en la salida; con suerte, la salida deseada . Ejemplos de transformación de datos es calcular una suma de una cantidad de sumandos, o resolver un sistema de ecuaciones diferenciales a partir de un conjunto de condiciones, o escribir y leer desde una estructura similar a un árbol de manera consistente dada una secuencia de consultas posiblemente simultáneas .
Volviendo a la metáfora de la lista de usuarios, en un lenguaje de programación, usted escribe cómo recorrer una tabla de registros, extraer de cada registro el campo "nombre" y devolverlos al solicitante.
Tenga en cuenta que los lenguajes de secuencias de comandos son un subconjunto de lenguajes de programación, es decir, un lenguaje puede ser tanto "secuencias de comandos" como "programación": Python se usa regularmente para "mediar entre programas" y también para "transformar datos". Hay otros lenguajes como Java que rara vez se usan para "mediar entre programas", no porque esto sea imposible sino porque no están diseñados para facilitarlo. La característica clave de un lenguaje de script es que puede orquestar otros programas, al igual que un script le da la señal a un actor para comenzar su parte.
fuente
Un lenguaje de marcado es un lenguaje que se utiliza para representar datos estructurados. Por ejemplo, HTML permite especificar que una parte del documento es un título o alguna otra parte es una lista, en comparación con un documento de texto plano.
Los lenguajes de marcado no se consideran lenguajes de programación¹.
La diferencia con los lenguajes de programación no siempre es obvia. Por ejemplo, XSLT es un lenguaje completo de Turing², pero se basa en XML, que es un lenguaje de marcado.
Wikipedia misma hace esfuerzos importantes para evitar calificar XSLT como lenguaje de programación o lenguaje de marcado. Solo dice que es un lenguaje declarativo y que utiliza "técnicas de optimización que se encuentran en lenguajes de programación funcionales y lenguajes de consulta de bases de datos".
Un lenguaje de script es un lenguaje de programación que se interpreta, en lugar de compilarse, lo que significa que los lenguajes de script representan un subconjunto de todos los lenguajes de programación.
No siempre es obvio si un lenguaje de programación es un lenguaje de secuencias de comandos, como tampoco es obvio si un lenguaje se compila o interpreta. Por ejemplo, PHP puede compilarse a bytecode intermedio³ y luego convertirse en código de máquina por el compilador JIT, mientras se sigue considerando como lenguaje de script⁴.
Ver también: Splitting Meta-Hairs por Steven Lott.
¹ "XML no es un lenguaje de programación". Ver XML en 10 puntos .
² “XSLT es un lenguaje completo de Turing” Ver XSLT en Wikipedia
³ “HHVM compila Hack y PHP en un bytecode intermedio. Este código de bytes se traduce dinámicamente en código de máquina x64 en tiempo de ejecución mediante un compilador JIT (Just-In-Time) ”. Ver HHVM .
⁴ lenguajes de script en la lista de los lenguajes de programación por tipo en la Wikipedia.
fuente
TypeError
! Cada lenguaje puede ser implementado por un intérprete, cada lenguaje puede ser implementado por un compilador.Para producir cualquier tipo de taxonomía, primero debe hacerse algunas preguntas:
Típicamente, cuando uno escucha una pregunta como la que usted hizo, la respuesta esperada hace varias suposiciones. Por ejemplo, es natural suponer que, dado que todos estos son idiomas, deben formar una jerarquía bajo un concepto más general del lenguaje, o que dividen el espacio de todos los idiomas, o que son subconjuntos entre sí.
Lenguajes de programación
Desafortunadamente, nada de lo anterior parece ser cierto. Quizás solo los lenguajes de programación tienen una definición con la que la mayoría está de acuerdo. Los lenguajes de programación son lenguajes que codifican programas. Codificar significa que una palabra en el lenguaje puede interpretarse como un programa (una secuencia de acciones). Los lenguajes de programación de computadoras son un subconjunto de estos. Ejemplos de lenguajes de programación que no son de computadora: una lista de compras, interpretada como instrucciones para un comprador en un supermercado, ADN interpretado mediante la transcripción de péptidos, un registro musical analógico que sirve como programa para una grabadora.
Por lo tanto, los lenguajes de programación de computadoras son los que programan las computadoras.
Lenguajes de script
No están bien definidos. Está abierto a la interpretación de lo que significa este término. Históricamente, parecería que los lenguajes de programación que no tenían un compilador para producir código de máquina se habían llamado de esta manera. Según los estándares actuales, esto colocaría a todos los lenguajes de programación populares sin ensambladores en esta categoría. Incluso los llamados lenguajes de bajo nivel como C requieren un tiempo de ejecución con procedimientos preexistentes, por lo tanto, los archivos binarios obtenidos al compilar un programa en C no son completamente códigos de máquina, sino que también llaman al tiempo de ejecución de vez en cuando.
Lenguajes de marcado
No están bien definidos. Cada vez que se usa el término, la intención parece ser describir un lenguaje de programación con un léxico muy limitado, utilizado principalmente para generar imágenes visuales o de audio. Puede ser difícil ver XML como algo programado, pero si observa el marcado Man o TexInfo, verá que los caracteres "especiales" son en realidad instrucciones del intérprete.
También es posible dar una interpretación de "programación" para lenguaje XML, algo que podría ser así:
En pocas palabras: esta división a partir de hoy no parece muy significativa, solo puede darle una cierta intuición sobre el tipo de lenguaje al que se enfrenta, pero no le proporcionará una definición rigurosa.
fuente
Los tres conceptos se superponen un poco, por lo que puede obtener argumentos interminables si XSLT es un lenguaje de programación o si Python es un lenguaje de secuencias de comandos o no.
Un lenguaje de marcado es un lenguaje que representa datos estructurados en un formato de texto , HTML es el más conocido, pero existen numerosos formatos para diversos fines, como SVG para gráficos, WSDL para describir interfaces de servicios web, resx para archivos de recursos. neto y así sucesivamente. Una regla general es que un lenguaje de marcado no describe un proceso o algoritmo (como lo hace un lenguaje de programación) sino que son datos puros. Pero también es una visión CS fundamental que no esNo hay diferencia fundamental entre el código y los datos. Algunos lenguajes de marcado como XSLT tienen bucles y condicionales como un lenguaje de programación "real", y algunos lenguajes de programación como Prolog son datos casi puros sin ningún proceso especificado en el código. Y Lisp difumina la línea tanto que trata su propio código como un formato de datos estructurado.
En cuanto a la distinción entre lenguaje de programación y lenguaje de script , esta es una distinción histórica que es casi obsoleta hoy en día. En los viejos tiempos habíamos compilado programas independientes escritos en say C, y luego teníamos lenguajes de scripting como say shell scripts o Word Basic, que fueron interpretados y diseñados para manipular otros programas y herramientas. Hoy en día, la línea está bastante borrosa con mucho terreno intermedio, ya que tenemos varios niveles de compilación e interpretación (compilación de código de bytes, compilación JIT, etc.) y varias API independientes del lenguaje. Entonces la distinción no es tan útil.
fuente
Se utiliza un lenguaje de marcado para describir datos en lugar de lógica. Un uso típico de ellos es describir el formato del documento, HTML está diseñado para esto, por ejemplo. Pero a veces también se usan como formatos de datos generales, XML es un lenguaje de marcado que a menudo se usa solo para describir datos.
La diferencia entre los lenguajes de programación y scripting es muy difusa, ambos tienden a ser completos, ya que puede resolver cualquier problema computable con ellos. Hay algunos 'consejos' generales que puede buscar para ver si un lenguaje es un lenguaje de programación o no.
Pero al final, si un lenguaje es lenguaje de programación o lenguaje de programación, es más una cuestión de convención que un criterio estricto. Incluso las sugerencias anteriores son solo tendencias, encontrará lenguajes de programación que cumplen con todos los criterios para un lenguaje de secuencias de comandos y aún se consideran lenguajes de programación.
fuente
TypeError
! Cada lenguaje puede ser implementado por un intérprete, cada lenguaje puede ser implementado por un compilador. Incluso es posible generar automáticamente un compilador a partir de un intérprete y viceversa.