Lenguaje de programación vs lenguaje de programación

347

¿Alguien puede explicar la diferencia entre lenguaje de programación y lenguaje de programación por favor?
Además, ¿puede indicar algunos ejemplos para cada uno? He buscado mucho en Google pero siempre encuentro las mejores respuestas de Stack Overflow.

Rahul Reddy
fuente

Respuestas:

466

Los lenguajes de secuencias de comandos son lenguajes de programación que no requieren un paso de compilación explícito.

Por ejemplo, en el caso normal, debe compilar un programa en C antes de poder ejecutarlo. Pero en el caso normal, no tiene que compilar un programa JavaScript antes de ejecutarlo. Por lo tanto, JavaScript a veces se denomina lenguaje de "secuencias de comandos".

Esta línea se está volviendo cada vez más borrosa, ya que la compilación puede ser muy rápida con hardware moderno y técnicas modernas de compilación. Por ejemplo, V8, el motor de JavaScript en Google Chrome y que también se usa mucho fuera del navegador, en realidad compila el código de JavaScript sobre la marcha en código de máquina, en lugar de interpretarlo. (De hecho, V8 es un compilador optimizador de dos fases).

También tenga en cuenta que si un lenguaje es un lenguaje de "script" o no puede ser más sobre el medio ambiente que el lenguaje. No hay ninguna razón por la que no pueda escribir un intérprete de C y usarlo como un lenguaje de script (y la gente lo ha hecho). Tampoco hay ninguna razón por la que no pueda compilar JavaScript en el código de máquina y almacenarlo en un archivo ejecutable (y la gente lo ha hecho). El lenguaje Ruby es un buen ejemplo de esto: la implementación original fue completamente interpretada (un lenguaje de "scripting"), pero ahora hay múltiples compiladores para ello.

Algunos ejemplos de lenguajes de "secuencias de comandos" (por ejemplo, lenguajes que se usan tradicionalmente sin un paso de compilación explícito):

  • Lua
  • JavaScript
  • VBScript y VBA
  • Perl

Y una pequeña cantidad de los que se usan tradicionalmente con un paso de compilación explícito:

  • C
  • C ++
  • re
  • Java (pero tenga en cuenta que Java se compila en bytecode, que luego se interpreta y / o se vuelve a compilar en tiempo de ejecución)
  • Pascal

... y luego tienes cosas como Python que se encuentran en ambos campos: Python se usa ampliamente sin un paso de compilación, pero la implementación principal (CPython) lo hace compilando bytecode sobre la marcha y luego ejecutando el bytecode en un VM, y puede escribir ese bytecode en los archivos ( .pyc, .pyo) para su uso sin recompilar.

Eso es sólo un muy pocos, si lo hace un poco de investigación se pueden encontrar mucho más.

TJ Crowder
fuente
1
Excelente explicación!
Gladiador
48
@ mg30rg: Heh - las secuencias de comandos pueden ser totalmente una programación "real". (No creerías algunos de los scripts de bash que he visto ...) Creo que la forma más simple de definirlo (y de nuevo, esto no es una cuestión de lenguaje, es una cuestión de entorno) es: ¿El entorno de tiempo de ejecución ver el código fuente? Si es así, lo llamaría "scripting"; si no, no lo haría. Entonces, en ese sentido, JavaScript basado en navegador es "scripting" porque incluso si los motores como V8 lo compilan sobre la marcha, la fuente aún se entrega al entorno de tiempo de ejecución. Del mismo modo shells scripts. La fuente de un programa C tradicional no se entrega al tiempo de ejecución.
TJ Crowder
2
@ mg30rg: Pero nuevamente, estas líneas se vuelven más borrosas todo el tiempo. :-) Considere el bytecode de Java. No puede ejecutarlo sin una JVM, pero no es el código fuente. (Por lo general, un descompilador puede volver a convertirlo en código fuente de aspecto razonable, pero ...) No (remotamente) pienso en Java en un entorno tradicional como un lenguaje de secuencias de comandos. Pero entonces, tampoco paso mucho tiempo pensando en las categorías. :-)
TJ Crowder
2
@ CME64: No, la implementación principal (CPython) se compila en bytecode sobre la marcha y ejecuta el bytecode en una VM. Si bien hay herramientas de Python a C (Cython y Pyrex), no es así como se ejecuta Python.
TJ Crowder
2
En defensa de @ Vityata, VBScript se escribe en el Bloc de notas y se interpreta como entrada de texto, mientras que el código VBA se compila en P-Code a medida que lo escribe en el editor , es decir, el código fuente que ve en el editor después de modificar una línea de código, no es el código que escribió, sino la versión de VBE del código P subyacente: la mecánica de VBA vs VBScript es completa y completamente diferente, y agruparlos en esa lista simplemente no se siente del todo bien. VBA está mucho más cerca de VB6 que de VBScript; Es solo una restricción explícita que le impide construir un ejecutable independiente.
Mathieu Guindon
103

Para entender la diferencia entre un lenguaje de programación y un lenguaje de programación, uno tiene que entender por qué nacieron los lenguajes de programación.

Inicialmente, había lenguajes de programación que se escribieron para crear programas como Excel, Word, navegadores, juegos, etc. Estos programas se crearon con lenguajes como C y Java. En el tiempo extra, estos programas necesitaban una forma para que los usuarios crearan una nueva funcionalidad, por lo que tenían que proporcionar una interfaz para su código de bytes y, por lo tanto, nacieron los lenguajes de script.

Un lenguaje de secuencias de comandos generalmente no se compila, por lo que puede ejecutarse tan pronto como escriba algo significativo. Por lo tanto, Excel se puede construir usando C ++, pero expone un lenguaje de secuencias de comandos llamado VBA para que los usuarios definan la funcionalidad. Del mismo modo, los navegadores pueden construirse con C ++ / Java, pero exponen un lenguaje de scripting llamado javascript (no relacionado con java de ninguna manera). Los juegos, por lo general, se crean con C ++ pero exponen un lenguaje llamado Lua para que los usuarios definan una funcionalidad personalizada.

Un lenguaje de script generalmente se encuentra detrás de un lenguaje de programación. Los lenguajes de secuencias de comandos generalmente tienen menos acceso a las habilidades nativas de las computadoras, ya que se ejecutan en un subconjunto del lenguaje de programación original. Un ejemplo aquí es que Javascript no podrá acceder a su sistema de archivos. Los lenguajes de secuencias de comandos suelen ser más lentos que los lenguajes de programación.

Aunque los lenguajes de secuencias de comandos pueden tener menos acceso y son más lentos, pueden ser herramientas muy poderosas. Un factor que se atribuye al éxito de los lenguajes de scripting es la facilidad de actualización. ¿Recuerdas los días de los applets de java en la web? Este es un ejemplo de cómo ejecutar un lenguaje de programación (java) frente a un lenguaje de secuencias de comandos (javascript). En ese momento, las computadoras no eran tan potentes y javascript no era tan maduro, por lo que los applets de Java dominaron las escenas. Pero los applets de Java eran molestos, requerían que el usuario cargara y compilara el lenguaje. Un avance rápido hasta hoy, los applets de Java están casi extintos y Javascript domina la escena. Javascript es extremadamente rápido de cargar ya que la mayoría de los componentes del navegador ya se han instalado.

Por último, los lenguajes de secuencias de comandos también se consideran lenguajes de programación (aunque algunas personas se niegan a aceptar esto): el término que deberíamos usar aquí es lenguajes de secuencias de comandos frente a lenguajes compilados.

Yang Li
fuente
44
¿No crees que quisiste decir: "lenguajes interpretados vs lenguajes compilados" en lugar de "lenguajes de script vs lenguajes compilados"?
bitsapien
66
"Un ejemplo aquí es que Javascript no podrá acceder a su sistema de archivos", dice Nodejs hola
Mohammad el
@Mohammad NodeJS es un tiempo de ejecución que permite a los codificadores usar Javascript como "lenguaje" para la codificación. NodeJS no es 100% Javascript.
JeffNhan
65

Todos los lenguajes de script son lenguajes de programación.

Los idiomas no se clasifican como script o no; depende completamente del entorno de ejecución.

Si el entorno es uno que se interpreta, esto se conoce comúnmente como un entorno de secuencias de comandos.

Oded
fuente
18

Las diferencias son cada vez menos importantes. Tradicionalmente, los lenguajes de secuencias de comandos amplían los programas existentes ... Creo que esa es la definición principal de "secuencias de comandos" es que se refiere a escribir un conjunto de instrucciones para que una entidad existente las realice. Sin embargo, donde los lenguajes de scripting comenzaron con sintaxis propietaria y coloquial, la mayoría de los que prevalecen en estos días deben alguna relación con C.

Creo que la distinción "interpretado versus compilado" es realmente un síntoma de extender un programa existente (con un intérprete incorporado), en lugar de una diferencia intrínseca. Lo que más preocupa a los programadores y laicos es "¿qué está haciendo el programador?" El hecho de que un programa sea interpretado y otro compilado significa muy poco para determinar la diferencia en la actividad del creador. No juzgas a un dramaturgo si sus obras se leen más en voz alta o se interpretan en el escenario, ¿verdad?

Eric Barker
fuente
12

Lenguaje de programación: se compila en código máquina y se ejecuta en el hardware del sistema operativo subyacente.

Lenguaje de secuencias de comandos: es un subconjunto no estructurado del lenguaje de programación. En general se interpreta. Básicamente, "escribe" otras cosas para hacer cosas. El objetivo principal no es principalmente crear sus propias aplicaciones, sino hacer que una aplicación existente actúe de la manera que desee, por ejemplo, JavaScript para navegadores, TCL, etc.

*** Pero hay una situación en la que un lenguaje de programación se convierte en intérprete y el uso de viceversa tiene un intérprete en C donde puede 'C' Script. Los scripts generalmente se escriben para controlar el comportamiento de una aplicación cuando se utiliza el lenguaje de programación para crear aplicaciones. Pero tenga en cuenta que la demarcación se está difuminando día a día como un ejemplo de Python, depende de cómo se use el lenguaje.

saikumarm
fuente
10

Los lenguajes de script son un subconjunto de lenguajes de programación.

  1. El usuario no compila los lenguajes de secuencias de comandos en código máquina (python, perl, shell, etc.). Más bien, otro programa (llamado intérprete, ejecuta el programa y simula su comportamiento)
  2. Algunos lenguajes de programación que no son scripts (C, C ++, Haskell y otros lenguajes 'compilados'), se compilan en código máquina y se ejecutan posteriormente.
jh314
fuente
5

Creo que lo que estás diciendo como la "diferencia" es en realidad una consecuencia de la diferencia real.

La diferencia real es el objetivo del código escrito. ¿Quién va a ejecutar este código?

Se utiliza un lenguaje de secuencias de comandos para escribir código que se dirigirá a un sistema de software. Automatizará las operaciones en ese sistema de software. El script será una secuencia de instrucciones para el sistema de software de destino.

Un lenguaje de programación se dirige al sistema informático, que puede ser una máquina real o virtual. Las instrucciones son ejecutadas por la máquina.

Por supuesto, una máquina real solo entiende el código binario, por lo que debe compilar el código de un lenguaje de programación. Pero esto es una consecuencia de apuntar a una máquina en lugar de un programa.

Por otro lado, el sistema de software de destino de un script puede compilar el código o interpretarlo. Depende del sistema de software.

Si decimos que la verdadera diferencia es si se compila o no, entonces tenemos un problema porque cuando se ejecuta Javascript en V8 se compila y cuando se ejecuta en Rhino no.

Se vuelve más confuso ya que los lenguajes de secuencias de comandos han evolucionado para volverse muy poderosos. Por lo tanto, no se limitan a crear pequeños scripts para automatizar las operaciones en otro sistema de software, puede crear cualquier aplicación enriquecida con ellos.

El código Python está dirigido a un intérprete, por lo que podemos decir que "ejecuta" operaciones en ese intérprete. Pero cuando escribe código Python no lo ve como un script de intérprete, lo ve como la creación de una aplicación. El intérprete solo está allí para codificar en un nivel superior, entre otras cosas. Entonces, para mí, Python es más un lenguaje de programación que un lenguaje de script.

Damian Jose
fuente
5

Cuando el mundo era joven y en el mundo de las PC que elegías entre .exe o .bat, la delineación era simple. Los sistemas Unix siempre han tenido scripts de shell (/ bin / sh, / bin / csh, / bin / ksh, etc.) e idiomas compilados (C / C ++ / Fortran).

Para diferenciar los roles y las responsabilidades, los lenguajes compilados (a menudo denominados lenguajes de tercera generación) se vieron como lenguajes de 'programación' y los lenguajes de 'scripting' como aquellos que invocaban a un intérprete (a menudo referidos como lenguajes de cuarta generación). Los lenguajes de script a menudo se usaban como 'pegamento' para conectarse entre múltiples comandos / programas compilados para que el usuario no tuviera que preocuparse por un conjunto de pasos para llevar a cabo su tarea: desarrollaron un solo archivo, que delineó qué pasos querían lograrlo, y esto se convirtió en un 'guión' para que cualquiera lo siguiera.

Varias personas / grupos escribieron nuevos intérpretes para resolver un problema de dominio específico. awk es uno de los más conocidos, y se utilizó principalmente para la coincidencia de patrones y la aplicación de una serie de transformaciones de datos en la entrada. Funcionó bien, pero tenía un problema de dominio limitado. La expansión de ese dominio fue casi imposible porque el código fuente no estaba disponible. La herramienta de Perl (Larry Wall, autor principal / arquitecto) crea secuencias de comandos para el siguiente nivel, y desarrolló un intérprete que no solo permitió al usuario ejecutar comandos del sistema, manipular datos de entrada y salida, variables sin tipo compatibles, sino también acceder a las API de nivel de sistema Unix como funciones desde dentro de los propios scripts. Probablemente fue uno de los primeros lenguajes de scripting de alto nivel ampliamente utilizados.

Su pregunta fue específicamente sobre Python. Debido a que el intérprete de Python se ejecuta contra un archivo de texto que contiene el código de Python, y que el código de Python puede ejecutarse en cualquier lugar donde haya un intérprete de Python, diría que es un lenguaje de script (en la misma línea que Perl). No es necesario que vuelva a compilar el archivo de comando python del usuario para cada arquitectura de sistema operativo / CPU diferente (como lo haría con C / C ++ / Fortran), lo que lo hace significativamente más portátil y fácil de usar.

El crédito por esta respuesta es para Jerrold (Jerry) Heyman. Hilo original: https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

Kartik Chauhan
fuente
4

Estoy en desacuerdo con el hecho de que los idiomas que usan intérpretes son lenguajes de secuencias de comandos y el que se compila son lenguajes de programación. Podemos desarrollar un intérprete o compilador para cualquier idioma. El entorno interpretado se adapta mejor a los scripts web y lo hace más fácil, por eso lo tenemos.

Bueno, siento que no hay ninguna diferencia entre el lenguaje de programación y el lenguaje de programación. Se trata de hacer el trabajo. Cuando se trata de tareas relacionadas con la web, las llamamos scripts web considerando una tarea pequeña y de esa manera también podemos llamar a las tareas relacionadas con el sistema como scripts de nivel del sistema operativo o del sistema operativo y el lenguaje de programación que usamos para realizar esas tareas como lenguajes de scripts del sistema.

Tampoco es para que uno no pueda escribir código de nivel de sistema en Python y scripts web en lenguaje C (definitivamente uno puede hacerlo si podemos establecer la plataforma y el entorno requeridos). Pero todo lo que se necesita es demasiado esfuerzo, lo que puede afectar la limitación de tiempo para el rápido desarrollo y la pequeña reducción de la latencia no nos beneficiará mucho en los scripts web. Pero lo contrario no es cierto si realizamos tareas a nivel de sistema en Python.

En pocas palabras: la selección del idioma depende de la naturaleza de la tarea a realizar y discriminar un idioma ya que el lenguaje de secuencias de comandos es un mito.

paritosh mishra
fuente
4

Lenguajes con guiones

Los lenguajes de script se interpretan dentro de otro programa. JavaScript está incrustado en un navegador e interpretado por ese navegador.

Ejemplos de lenguajes de script

  1. JavaScript
  2. Perl
  3. Pitón

Ventajas de los lenguajes de scripting:

  1. Simple: los lenguajes de script son más fáciles de escribir que el lenguaje de programación.

  2. Menos líneas de código (LOC)

Lenguajes programados

Los lenguajes de programación como Java son compilados y no son interpretados por otra aplicación de la misma manera.

Ejemplos de lenguajes de programación

  1. C
  2. C ++ y
  3. Java

Más detalles

manisha mulchandani
fuente
Los lenguajes con guiones son lenguajes de programación. Además, Java es interpretado por otra aplicación llamada JVM.
bfontaine
4

En lenguajes de secuencias de comandos como (JavaScript y versiones anteriores de PHP) utilizamos las funciones y métodos fundamentales existentes para realizar nuestro trabajo. Tomemos un ejemplo en el JavaScriptque podemos usar ajaxo web-socketssolo si son compatibles con el navegador o si existen métodos o ellos en el navegador. Pero en lenguajes como C o C ++, Java podemos escribir esa característica desde cero incluso si alguna biblioteca para esa característica no está disponible, pero no podemos hacerlo en JavaScript.

¿Puede admitir sockets web en Internet Explorer 8 o anterior con la ayuda de JavaScript? Pero puede escribir un complemento en C o C ++ o Java que puede agregar una característica de sockets web a Internet Explorer 8.

Básicamente, en los lenguajes de secuencias de comandos, escribimos un código en una secuencia que ejecuta los métodos existentes en una secuencia para completar nuestro trabajo. Ingresar números y fórmulas en una calculadora digital para realizar una operación también es un ejemplo de lenguaje de scripts. Debemos tener en cuenta que el compilador / entorno de tiempo de ejecución de cada lenguaje de scripts siempre se escribe en lenguaje de programación en el que podemos agregar más funciones y métodos y puede escribir nuevas bibliotecas.

PHP Este es un lenguaje que es algo de programación en blanco y negro y scripting. Podemos agregar nuevos métodos agregando extensiones compiladas escritas en otro lenguaje de alto nivel. No podemos agregar características de alto nivel de redes o crear bibliotecas de procesamiento de imágenes directamente en PHP.

PD : Realmente lamento haber girado mi respuesta solo sobre PHP JavaScript, pero uso estos dos porque tengo una experiencia considerable en estos dos.

Ravinder Payal
fuente
3

Además de la diferencia de que el lenguaje de secuencias de comandos se interpreta y el lenguaje de programación se compila, hay otra diferencia como a continuación, que supongo que se ha perdido.

Un lenguaje de script es un lenguaje de programación que se utiliza para manipular, personalizar y automatizar las instalaciones de un sistema existente. En tales sistemas, la funcionalidad útil ya está disponible a través de una interfaz de usuario, y el lenguaje de script es un mecanismo para exponer esa funcionalidad al control del programa.

Mientras que un lenguaje de programación generalmente se usa para codificar el sistema desde cero.

src ECMA

Sukrit Gupta
fuente
2

Si vemos lógicamente el lenguaje de programación y el lenguaje de secuencias de comandos, entonces esto es 99.09% igual. porque usamos el mismo concepto como bucle, condición de control, variable y todo, por lo que podemos decir que sí, ambos son iguales, pero solo hay una cosa diferente entre ellos que está en C / C ++ y otro lenguaje de programación, compilamos el código antes de la ejecución. pero en PHP, JavaScript y otros lenguajes de secuencias de comandos no necesitamos compilar, los ejecutamos directamente en el navegador.

Gracias Nitish K. Jha

NITISH KUMAR Jha
fuente
2

Los lenguajes de secuencias de comandos son lenguajes de programación que las personas consideran lenguajes de secuencias de comandos. Es una categoría artificial sin límites claros, y donde cada regla propuesta tiene una excepción.

Las reglas clásicas que se usan para decir que un lenguaje es un lenguaje de secuencias de comandos se caracterizan, no se definen. Si un lenguaje satisface una serie de reglas, existe una buena probabilidad de que se considere un lenguaje de secuencias de comandos. Si no, hay una buena posibilidad de que no lo sea. Las reglas generalmente incluyen:

  • Está destinado a pequeños "scripts", no a grandes programas.
  • Está incrustado en otra aplicación, utilizada para pequeñas modificaciones de esa aplicación.
  • Se interpreta en lugar de compilarse.
  • Está destinado a programadores novatos, no profesionales.
  • Su nombre termina en "script".

Yo podria agregar:

  • Un lenguaje de script es un lenguaje de programación donde casi todos los errores se detectan en tiempo de ejecución.

Es decir, podría ser un lenguaje interpretado.

Si un lenguaje de programación tiene un comportamiento significativo de "tiempo de compilación" en el que analiza el código e informa de errores sin ejecutar el programa, como errores de tipo de C, Java o C #, lo más probable es que no se considere un lenguaje de secuencias de comandos.

Tradicionalmente, muchos lenguajes de scripting se han interpretado directamente desde la fuente, pero los más populares tienen implementaciones más eficaces que precompilan el código, como los .pycarchivos de Python , u optimizan los motores JavaScript que se compilan en código nativo antes de ejecutarse.

Si el lenguaje puede ser implementado por un intérprete, que solo mira el código fuente mientras lo está ejecutando, entonces es probable que se considere un lenguaje de script. Si realmente se implementa de esa manera no es importante, pero si puede serlo, tampoco puede requerir una verificación exhaustiva del código en tiempo de compilación.

Si el lenguaje proporciona una semántica estática útil que ayuda a detectar errores (que no sean errores de sintaxis) sin necesidad de ejecutar el programa, probablemente no sea un lenguaje de secuencias de comandos.

Siempre hay excepciones, generalmente basadas en la tradición en torno a un idioma más que cualquier regla real. BASIC generalmente no se considera un "lenguaje de secuencias de comandos", a pesar de que satisface prácticamente todos los criterios que alguien ha utilizado para ser uno. Es por eso que Visual Basic Script tuvo que agregar el "script" al nombre, para distinguirse de Visual Basic, un lenguaje de programación "real" destinado a programas más grandes.

BASIC también es un lenguaje de programación antiguo, como COBOL y Fortran, antes de que la gente esperara el análisis estático de un lenguaje, y básicamente antes de que los "lenguajes de secuencias de comandos" fueran algo.

lrn
fuente