Hay muchas respuestas posibles a esto.
Primero: no se trata realmente de la diferencia entre un lenguaje de programación y un lenguaje de programación, porque un lenguaje de programación es un lenguaje de programación. Es más una cuestión de qué rasgos hacen de un lenguaje de programación un lenguaje de scripting mientras que otro lenguaje de programación no es un lenguaje de scripting.
Segundo: es realmente difícil decir qué es un lenguaje XYZ, ya sea que XYZ sea "scripting", "programación funcional", "programación orientada a objetos" o lo que sea. La definición de "programación funcional" es bastante clara, pero nadie sabe qué es un "lenguaje de programación funcional".
La programación funcional o la programación orientada a objetos son estilos de programación ; puede escribir en un estilo funcional o en un estilo orientado a objetos en prácticamente cualquier idioma. Por ejemplo, el conmutador del sistema de archivos virtual de Linux y el modelo de controlador de Linux están muy orientados a objetos a pesar de estar escritos en C, mientras que gran parte del código Java o C # que ve en la web es muy procedimental y no está orientado a objetos en absoluto . OTOH, he visto código Java muy funcional.
Entonces, si la programación funcional y la programación orientada a objetos son simplemente estilos que se pueden hacer en cualquier lenguaje, ¿cómo se define un "lenguaje de programación orientado a objetos"? Se podría decir que un lenguaje de programación orientado a objetos es un lenguaje que permite la programación orientada a objetos. Pero esa no es una gran definición: todos los lenguajes permiten la programación orientada a objetos, por lo tanto, ¿ todos los lenguajes están orientados a objetos? Entonces, dices, bueno, un lenguaje está orientado a objetos, si te obliga a programar en un estilo orientado a objetos. Pero esa tampoco es una gran definición: todos los lenguajes permiten la programación funcional, por lo tanto, ¿ ningún lenguaje está orientado a objetos?
Entonces, para mí, he encontrado la siguiente definición:
Un lenguaje es un lenguaje de programación (lenguaje orientado a objetos / lenguaje funcional) si ambos
- Facilita la creación de scripts (programación orientada a objetos / programación funcional), es decir, no solo lo permite , sino que lo hace fácil y natural y contiene características que lo ayudan , Y
- lo alienta y lo guía hacia la creación de scripts (programación orientada a objetos / programación funcional).
Entonces, después de cinco párrafos, llegué a: "un lenguaje de scripting es un lenguaje para scripting". Qué gran definición. NO.
Obviamente, ahora necesitamos mirar la definición de "scripting".
Aquí es donde entra el tercer problema: mientras que el término "programación funcional" está bien definido y sólo el término "lenguaje de programación funcional" es problemático, desafortunadamente con el scripting, tanto el término "scripting" como el término "lenguaje de scripting "están mal definidos.
Bueno, en primer lugar, escribir es programar. Es solo un tipo especial de programación. IOW: cada script es un programa, pero no todos los programas son un script; el conjunto de todos los scripts es un subconjunto adecuado del conjunto de todos los programas.
En mi opinión personal, lo que hace que las secuencias de comandos sean secuencias de comandos y las distingue de otros tipos de programación es que ...
Los scripts manipulan en gran medida objetos que
- no fueron creados por el script,
- tener una vida independiente del guión y
- vivir fuera del dominio del guión.
Además, los tipos de datos y los algoritmos utilizados generalmente no están definidos por el script sino por el entorno externo.
Piense en un script de shell: los scripts de shell suelen manipular archivos, directorios y procesos. La mayoría de los archivos, directorios y procesos de su sistema probablemente no fueron creados por el script que se está ejecutando actualmente. Y no desaparecen cuando sale el guión: su duración es completamente independiente del guión. Y tampoco son parte del guión, son parte del sistema. No comenzó su script escribiendo File
y Directory
clases, esos tipos de datos no son de su incumbencia: simplemente asume que están allí, y ni siquiera sabe (ni necesita saber) cómo funcionan. Y tampoco implementa sus propios algoritmos, por ejemplo, para el recorrido de directorio que simplemente usa en find
lugar de implementar su propia búsqueda de amplitud primero.
En resumen: un script se adhiere a un sistema más grande que existe independientemente del script, manipula una pequeña parte del sistema y luego sale.
Ese sistema más grande puede ser el sistema operativo en el caso de un script de shell, el DOM del navegador en el caso de un script de navegador, un juego (por ejemplo, World of Warcraft con Lua o Second Life con Linden Scripting Language), una aplicación (por ejemplo, AutoLisp idioma para AutoCAD o macros de Excel / Word / Office), un servidor web, un paquete de robots o algo completamente diferente.
Tenga en cuenta que el aspecto de las secuencias de comandos es completamente ortogonal a todos los demás aspectos de los lenguajes de programación: un lenguaje de secuencias de comandos puede tener una tipificación fuerte o débil, una tipificación estricta o flexible, una tipificación estática o dinámica, una tipificación nominal, estructural o de pato, diablos, incluso puede estar sin tipificación . Puede ser imperativo o funcional, orientado a objetos, procedimental o funcional, estricto o vago. Sus implementaciones se pueden interpretar, compilar o mezclar.
Por ejemplo, Mondrian es un lenguaje de scripting funcional perezoso estrictamente tipado estáticamente con una implementación compilada.
Sin embargo, todo esto es discutible, porque la forma en que el término lenguaje de secuencias de comandos se usa realmente en el mundo real no tiene nada que ver con nada de lo anterior. Se usa con mayor frecuencia simplemente como un insulto, y la definición es bastante simple, incluso simplista:
- lenguaje de programación real : mi lenguaje de programación
- lenguaje de scripting: su lenguaje de programación
Esta parece ser la forma en que el término se usa con mayor frecuencia.