En informática, un script es un conjunto de instrucciones relativamente breve y simple que normalmente automatiza un proceso que de otro modo sería manual. El acto de escribir un script se denomina scripting . El lenguaje de scripting o lenguaje de script describe un lenguaje de programación que se utiliza para crear scripts. [1]
Originalmente, la creación de scripts se limitaba a automatizar el shell de un sistema operativo y los lenguajes eran relativamente simples. Hoy en día, la creación de scripts está más extendida y algunos lenguajes incluyen características modernas que permiten utilizarlos para el desarrollo de aplicaciones , además de para la creación de scripts.
Un lenguaje de programación puede ser un lenguaje de uso general o un lenguaje específico para un entorno particular. Cuando está integrado en una aplicación, se lo puede llamar lenguaje de extensión .
A veces se hace referencia a un lenguaje de script como un lenguaje de programación de muy alto nivel si opera en un alto nivel de abstracción, o como un lenguaje de control , particularmente para lenguajes de control de trabajos en mainframes.
El término lenguaje de scripting se utiliza a veces en un sentido más amplio, para referirse a los lenguajes de programación dinámicos de alto nivel en general. Algunos son lenguajes estrictamente interpretados , mientras que otros utilizan una forma de compilación. En este contexto, el término script se refiere a un programa pequeño en un lenguaje de este tipo; normalmente, contenido en un solo archivo, y no más grande que unos pocos miles de líneas de código.
El alcance de los lenguajes de programación varía de pequeño a grande, y de un lenguaje altamente específico de un dominio a lenguajes de programación de propósito general . Un lenguaje puede comenzar siendo pequeño y altamente específico de un dominio y luego evolucionar hasta convertirse en un lenguaje portátil y de propósito general; por el contrario, un lenguaje de propósito general puede desarrollar posteriormente dialectos especiales de dominio específico.
El guión es una caracterización subjetiva que generalmente incluye los siguientes atributos:
Por lo general, los scripts no se compilan , al menos no en su sentido habitual. Generalmente, se interpretan directamente desde el código fuente o desde el bytecode o se ejecutan como nativos después de la compilación just-in-time . [4]
Un script es generalmente relativamente corto y simple. Como no hay límite de tamaño o complejidad, el script es subjetivo. Unas pocas líneas de código sin ramificaciones probablemente se consideran un script. Una base de código de múltiples archivos, que realiza una interfaz de usuario o hardware sofisticada o algoritmos complicados o multiprogramación probablemente no se considere un script.
Un script generalmente automatiza una tarea que de otro modo sería realizada por una persona de forma más manual.
Un lenguaje que está pensado principalmente para la creación de scripts generalmente tiene capacidades limitadas en comparación con un lenguaje de uso general. Un lenguaje de scripts puede carecer de la funcionalidad necesaria para escribir aplicaciones complejas.
Normalmente, un script comienza a ejecutarse en la primera línea de código, mientras que una aplicación normalmente comienza en un punto especial del código llamado punto de entrada .
Por ejemplo, Java no es como un script, ya que una aplicación comienza en la función nombrada main
, que no tiene por qué estar al principio del código. El código siguiente comienza en main
, luego invoca printHelloWorld
, que imprime "Hola mundo".
clase pública HolaMundo { public void printHolaMundo ( ) { System.out.println ( " HolaMundo" ) ; } public static void main ( String [] args ) { printHolaMundo ( ); } }
Por el contrario, el siguiente código Python imprime "Hola mundo" sin la main
función u otra sintaxis, como una definición de clase, requerida por Java.
imprimir ( "Hola mundo" )
Los scripts suelen ser creados o modificados por la persona que los ejecuta, [5] pero también suelen ser distribuidos, como cuando grandes partes de juegos están escritas en un lenguaje de script, en particular el juego T-rex de Google Chrome .
Las primeras computadoras mainframe (en la década de 1950) no eran interactivas y en su lugar utilizaban procesamiento por lotes . El lenguaje de control de trabajos (JCL) de IBM es el arquetipo de los lenguajes utilizados para controlar el procesamiento por lotes. [6]
Los primeros shells interactivos se desarrollaron en la década de 1960 para permitir la operación remota de los primeros sistemas de tiempo compartido , y estos usaban scripts de shell , que controlaban la ejecución de programas de computadora dentro de un programa de computadora, el shell. A Calvin Mooers en su lenguaje TRAC generalmente se le atribuye la invención de la sustitución de comandos , la capacidad de incrustar comandos en scripts que, cuando se interpretan, insertan una cadena de caracteres en el script. [7] Multics llama a estas funciones activas . [8] Louis Pouzin escribió un procesador temprano para scripts de comandos llamado RUNCOM para CTSS alrededor de 1964. Stuart Madnick en el MIT escribió un lenguaje de script para CP/CMS de IBM en 1966. Originalmente llamó a este procesador COMMAND, más tarde llamado EXEC . [9] Multics incluyó una rama de CTSS RUNCOM, también llamada RUNCOM. [10] EXEC finalmente fue reemplazado por EXEC 2 y REXX .
Los lenguajes como Tcl y Lua fueron diseñados específicamente como lenguajes de programación de uso general que se podían integrar en cualquier aplicación. Otros lenguajes como Visual Basic para Aplicaciones (VBA) proporcionaban una sólida integración con las funciones de automatización de un sistema subyacente. La integración de estos lenguajes de programación de uso general en lugar de desarrollar un nuevo lenguaje para cada aplicación también tenía ventajas obvias, ya que liberaba al desarrollador de aplicaciones de la necesidad de codificar un traductor de lenguaje desde cero y permitía al usuario aplicar las habilidades aprendidas en otro lugar.
Algunos programas incorporan varios lenguajes de programación diferentes. Los navegadores web modernos suelen ofrecer un lenguaje para escribir extensiones para el propio navegador y varios lenguajes integrados estándar para controlar el navegador, entre los que se incluyen JavaScript (un dialecto de ECMAScript ) o XUL .
Los lenguajes de script se pueden clasificar en varios tipos diferentes, con un grado considerable de superposición entre ellos.
El scripting se contrasta a menudo con la programación de sistemas , como en la dicotomía de Ousterhout o " programación en lo grande y programación en lo pequeño ". En esta perspectiva, el scripting es código pegamento , que conecta componentes de software , y un lenguaje especializado para este propósito es un lenguaje pegamento . Las tuberías y los scripts de shell son ejemplos arquetípicos de lenguajes pegamento, y Perl fue desarrollado inicialmente para cumplir esta misma función. El desarrollo web puede considerarse un uso de lenguajes pegamento, que interactúan entre una base de datos y un servidor web . Pero si una cantidad sustancial de lógica está escrita en script, es mejor caracterizarlo simplemente como otro componente de software, no como "pegamento".
Los lenguajes de pegamento son especialmente útiles para escribir y mantener:
Ejemplos de lenguaje pegamento:
Los lenguajes de macros expuestos a componentes de sistemas operativos o aplicaciones pueden servir como lenguajes de unión. Entre ellos se encuentran Visual Basic for Applications , WordBasic , LotusScript , CorelScript, Hummingbird Basic, QuickScript, Rexx, SaxBasic y WinWrap Basic. Otras herramientas como AWK también pueden considerarse lenguajes de unión, al igual que cualquier lenguaje implementado por un motor Windows Script Host (VBScript, JScript y VBA de forma predeterminada en Windows y motores de terceros, incluidas las implementaciones de Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi y C). La mayoría de las aplicaciones pueden acceder y utilizar componentes del sistema operativo a través de los modelos de objetos o sus propias funciones.
Otros dispositivos como las calculadoras programables también pueden tener lenguajes de unión; los sistemas operativos de las PDA como Windows CE pueden tener disponibles herramientas de macro nativas o de terceros que unen aplicaciones, además de implementaciones de lenguajes de unión comunes, incluidos Windows NT , DOS y algunos shells de Unix , Rexx, Modern Pascal, PHP y Perl. Según la versión del sistema operativo, están disponibles WSH y los motores de script predeterminados (VBScript y JScript).
Las calculadoras programables se pueden programar en lenguajes de unión de tres maneras. Por ejemplo, la TI-92 de Texas Instruments , por defecto de fábrica, se puede programar con un lenguaje de script de comandos. La inclusión del lenguaje de script y de unión Lua en la serie de calculadoras TI-NSpire podría considerarse como un sucesor de esto. Los lenguajes de programación de alto nivel integrados principales de la mayoría de las calculadoras gráficas (la mayoría de las veces variantes de Basic, a veces derivados de Lisp y, más raramente, derivados de C) en muchos casos pueden unir funciones de calculadora, como gráficos, listas, matrices, etc. Hay implementaciones de terceros de versiones de Basic más completas que pueden estar más cerca de las variantes enumeradas como lenguajes de unión en este artículo, y también se mencionan intentos de implementar Perl, Rexx o varios shells de sistemas operativos en las calculadoras gráficas TI y HP. Los compiladores cruzados de C basados en PC para algunas de las máquinas TI y HP utilizadas con herramientas que convierten entre C y Perl, Rexx, AWK y scripts de shell a Perl, Modern Pascal, VBScript a y desde Perl hacen posible escribir un programa en un lenguaje de unión para su eventual implementación (como un programa compilado) en la calculadora. [ cita requerida ]
Varios editores de texto admiten macros escritas ya sea mediante un lenguaje de macros integrado en el editor, por ejemplo, The SemWare Editor (TSE), vi improved (VIM), o mediante una implementación externa, por ejemplo, XEDIT , o ambos, por ejemplo, KEDIT . A veces, los editores de texto y las macros de edición se utilizan en segundo plano para proporcionar otras aplicaciones, por ejemplo, FILELIST y RDRLIST en CMS .
Una clase importante de lenguajes de scripts ha surgido de la automatización del control de trabajos , que se relaciona con el inicio y control del comportamiento de los programas del sistema [15] (en este sentido, se podría pensar que los shells son descendientes del JCL de IBM, o lenguaje de control de trabajos , que se utilizó exactamente para este propósito). Muchos de los intérpretes de estos lenguajes funcionan también como intérpretes de línea de comandos, como el shell de Unix o MS-DOS COMMAND.COM
. Otros, como AppleScript, ofrecen el uso de comandos similares al inglés para crear scripts.
Con la llegada de las interfaces gráficas de usuario, surgió un tipo especializado de lenguaje de programación para controlar una computadora. Estos lenguajes interactúan con las mismas ventanas gráficas, menús, botones, etc., que un usuario humano. Lo hacen simulando las acciones de un usuario. Estos lenguajes se utilizan normalmente para automatizar las acciones del usuario. Estos lenguajes también se denominan " macros " cuando el control se realiza mediante pulsaciones de teclas o clics del ratón simulados, así como pulsaciones en una pantalla activada por tacto.
Estos lenguajes podrían, en principio, utilizarse para controlar cualquier aplicación GUI; pero, en la práctica, su uso está limitado porque su uso necesita el soporte de la aplicación y del sistema operativo . Hay algunas excepciones a esta limitación. Algunos lenguajes de scripts de GUI se basan en el reconocimiento de objetos gráficos a partir de los píxeles de la pantalla de visualización . Estos lenguajes de scripts de GUI no dependen del soporte del sistema operativo o la aplicación.
Cuando la GUI proporciona las interfaces adecuadas, como en IBM Workplace Shell , se puede utilizar un lenguaje de script genérico, por ejemplo OREXX , para escribir scripts de GUI.
Los lenguajes específicos de la aplicación se pueden dividir en muchas categorías diferentes, es decir, lenguajes de aplicaciones independientes (ejecutables) o lenguajes específicos de la aplicación interna (postscript, xml, gscript como algunos de los scripts ampliamente distribuidos, implementados respectivamente por Adobe, MS y Google) entre otros, que incluyen un lenguaje de scripting idiomático adaptado a las necesidades del usuario de la aplicación. Del mismo modo, muchos sistemas de juegos de computadora usan un lenguaje de scripting personalizado para expresar las acciones programadas de personajes no jugadores y el entorno del juego. Los lenguajes de este tipo están diseñados para una sola aplicación; y, si bien superficialmente pueden parecerse a un lenguaje de propósito general específico (por ejemplo, QuakeC , modelado a partir de C), tienen características personalizadas que los distinguen. Emacs Lisp , aunque es un dialecto completamente formado y capaz de Lisp , contiene muchas características especiales que lo hacen más útil para extender las funciones de edición de Emacs. Un lenguaje de scripting específico de la aplicación puede verse como un lenguaje de programación específico del dominio especializado en una sola aplicación.
Se han diseñado varios lenguajes con el fin de reemplazar los lenguajes de programación específicos de la aplicación al ser integrables en los programas de aplicación. El programador de la aplicación (que trabaja en C u otro lenguaje de sistemas) incluye "ganchos" donde el lenguaje de programación puede controlar la aplicación. Estos lenguajes pueden ser técnicamente equivalentes a un lenguaje de extensión específico de la aplicación, pero cuando una aplicación incorpora un lenguaje "común", el usuario obtiene la ventaja de poder transferir habilidades de una aplicación a otra. Una alternativa más genérica es simplemente proporcionar una biblioteca (a menudo una biblioteca C) que un lenguaje de propósito general pueda usar para controlar la aplicación, sin modificar el lenguaje para el dominio específico.
JavaScript comenzó como un lenguaje para crear scripts dentro de navegadores web y aún lo es ; sin embargo, la estandarización del lenguaje como ECMAScript lo ha hecho popular como lenguaje integrable de propósito general. En particular, la implementación SpiderMonkey de Mozilla está integrada en varios entornos como Yahoo! Widget Engine . Otras aplicaciones que incorporan implementaciones ECMAScript incluyen los productos Adobe Adobe Flash ( ActionScript ) y Adobe Acrobat (para crear scripts de archivos PDF ).
Tcl fue creado como un lenguaje de extensión pero se ha llegado a utilizar con más frecuencia como un lenguaje de propósito general en roles similares a Python , Perl y Ruby . Por otro lado, Rexx fue creado originalmente como un lenguaje de control de trabajos, pero se utiliza ampliamente como lenguaje de extensión y también como lenguaje de propósito general. Perl es un lenguaje de propósito general, pero tenía el dialecto Oraperl (1990), que consiste en un binario de Perl 4 con Oracle Call Interface compilado. Sin embargo, desde entonces ha sido reemplazado por una biblioteca (Módulo Perl), DBD::Oracle. [16] [17]
Otras aplicaciones complejas y orientadas a tareas pueden incorporar y exponer un lenguaje de programación integrado para permitir a sus usuarios un mayor control y brindarles más funcionalidad de la que puede estar disponible a través de una interfaz de usuario, sin importar cuán sofisticada sea. Por ejemplo, las herramientas de creación 3D de Autodesk Maya incorporan el lenguaje integrado Maya , o Blender , que utiliza Python para cumplir esta función.
Otros tipos de aplicaciones que necesitan añadir funciones más rápido o realizar ciclos de ajuste y ejecución (por ejemplo, los motores de juegos ) también utilizan un lenguaje integrado. Durante el desarrollo, esto les permite crear prototipos de funciones más rápido y realizar ajustes con mayor libertad, sin necesidad de que el usuario tenga un conocimiento profundo del funcionamiento interno de la aplicación o de reconstruirla después de cada ajuste (lo que puede llevar una cantidad significativa de tiempo). Los lenguajes de programación utilizados para este propósito van desde los más comunes y famosos Lua y Python hasta otros menos conocidos como AngelScript y Squirrel .