
En informática, un script es un conjunto de instrucciones relativamente corto y sencillo que normalmente automatiza un proceso que de otro modo sería manual. El acto de escribir un script se denomina scripting . Un lenguaje de scripting o lenguaje de scripting es un lenguaje de programación que se utiliza para scripting. [ 1 ]
Originalmente, la programación de scripts se limitaba a automatizar shells en sistemas operativos , y los lenguajes eran relativamente sencillos. Hoy en día, la programación de scripts está más extendida y algunos lenguajes de scripting incluyen características modernas que permiten utilizarlos también para desarrollar software de aplicación .
Descripción general
Un lenguaje de scripting puede ser un lenguaje de programación de propósito general o un lenguaje específico para un entorno determinado. Cuando se integra en una aplicación, puede denominarse lenguaje de extensión .
Un lenguaje de scripting a veces se denomina lenguaje de programación de muy alto nivel si opera con un alto nivel de abstracción, o lenguaje de control , especialmente para lenguajes de control de trabajos en computadoras centrales .
El término lenguaje de scripting se usa a veces en un sentido más amplio, para referirse a lenguajes de programación dinámicos de alto nivel en general. Algunos son lenguajes estrictamente interpretados , mientras que otros utilizan algún tipo de compilación. En este contexto, el término script se refiere a un pequeño programa escrito en uno de estos lenguajes. Normalmente, un script se encuentra en un solo archivo y no supera los pocos miles de líneas de código.
El alcance de los lenguajes de scripting varía desde pequeños hasta grandes, y desde lenguajes altamente especializados hasta lenguajes de programación de propósito general . Un lenguaje puede comenzar siendo pequeño y altamente especializado y luego convertirse en un lenguaje portátil y de propósito general; a la inversa, un lenguaje de propósito general puede desarrollar posteriormente dialectos especiales específicos de un dominio .
Idiomas destacados
- AWK , para el procesamiento de texto, generalmente disponible en sistemas operativos tipo Unix.
- Lenguaje de archivos por lotes (BAT), para la creación de scripts en Microsoft Windows.
- Bourne shell , lenguaje interpretado para la programación de scripts en sistemas operativos Unix y similares.
- C , a través del compilador Tiny C
- Groovy , lenguaje de scripting orientado a objetos similar a Java
- Java , usando JBang [ 2 ]
- JavaScript (más tarde: ECMAScript ), originalmente limitado a ejecutarse en un navegador web para modificar dinámicamente una página web; posteriormente mejorado hasta convertirse en un lenguaje de programación de propósito general y ampliamente portable.
- Lenguaje de scripting Linden , lenguaje de extensión personalizado para la programación del mundo virtual Second Life .
- Lisp , familia de lenguajes de propósito general y de extensión para aplicaciones, incluyendo Emacs Lisp para Emacs.
- Lua , lenguaje de extensión utilizado por muchas aplicaciones
- Perl , [ 3 ] lenguaje de procesamiento de texto que posteriormente se convirtió en un lenguaje de propósito general; también se utiliza como lenguaje de extensión para diversas aplicaciones.
- PowerShell , para la creación de scripts en Microsoft Windows , macOS y Linux.
- Python , lenguaje de propósito general y de extensión.
- Rexx , lenguaje de propósito general que se ejecuta en muchas plataformas; también se utiliza como lenguaje de extensión.
- Ruby , lenguaje de propósito general y multiparadigma
- sed , para el procesamiento de texto; disponible en la mayoría de los sistemas operativos tipo Unix y adaptado a otros sistemas operativos.
- Tcl , [ 4 ] para entornos tipo Unix, popular en la década de 1990; puede usarse junto con Tk para desarrollar aplicaciones GUI.
- TrainzScript, lenguaje de extensión personalizado para simuladores ferroviarios Trainz.
- VBScript , para la creación de scripts en Microsoft Windows.
- Visual Basic para Aplicaciones (VBA), un lenguaje de extensión disponible en las aplicaciones de Microsoft Office .
Características
El guion es una caracterización subjetiva que generalmente incluye los siguientes atributos.
Interpretado
Un script normalmente no se compila , al menos no en su sentido habitual. Generalmente, se interpretan directamente desde el código fuente , o desde el código de bytes , o se ejecutan como nativos después de la compilación justo a tiempo . [ 5 ]
Corto y sencillo
Un script suele ser relativamente corto y sencillo. Dado que no hay límite de tamaño ni de complejidad, la definición de script es subjetiva. Unas pocas líneas de código sin ramificaciones probablemente se consideren un script. Un código fuente compuesto por varios archivos que implementa interfaces de usuario o hardware sofisticadas , algoritmos complejos o multiprogramación probablemente no se considere un script.
Automatiza
Un script suele automatizar una tarea que, de otro modo, sería realizada por una persona de forma más manual.
Idioma limitado
Un lenguaje diseñado principalmente para scripting suele tener capacidades limitadas en comparación con un lenguaje de propósito general. Un lenguaje de scripting puede carecer de la funcionalidad necesaria para escribir aplicaciones complejas.
Comienza desde arriba
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 llamada mainque no tiene por qué estar al principio del código. El siguiente código comienza en main, luego llama printHelloWorlda que imprime "Hola Mundo".
public class HelloWorld { public static void printHelloWorld () { System . out . println ( "Hola Mundo" ); } public static void main ( String [] args ) { printHelloWorld (); } }En cambio, el siguiente código Python imprime "Hola Mundo" sin la mainfunción ni otra sintaxis, como la definición de una clase, que requiere Java.
imprimir ( "Hola Mundo" )Usuario único
Los scripts suelen ser creados o modificados por la persona que los ejecuta, [ 6 ] pero también suelen ser distribuidos, como cuando grandes partes de los juegos están escritas en un lenguaje de scripting, en particular el juego T-rex de Google Chrome .
Historia
Las primeras computadoras centrales (en la década de 1950) no eran interactivas, sino que 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. [ 7 ]
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 se le atribuye generalmente 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. [ 8 ] Multics llama a estas funciones activas . [ 9 ] 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 scripting para CP/CMS de IBM en 1966. Originalmente llamó a este procesador COMMAND, más tarde llamado EXEC . [ 10 ] Multics incluyó una derivación de CTSS RUNCOM, también llamada RUNCOM. [ 11 ] EXEC fue finalmente reemplazado por EXEC 2 y Rexx .
Lenguajes como Tcl y Lua fueron diseñados específicamente como lenguajes de scripting de propósito general que podían integrarse en cualquier aplicación. Otros lenguajes, como Visual Basic para Aplicaciones (VBA), ofrecían una sólida integración con las funciones de automatización del sistema subyacente. La integración de estos lenguajes de scripting de propósito general, en lugar de desarrollar un nuevo lenguaje para cada aplicación, también presentaba ventajas evidentes: liberaba al desarrollador de la necesidad de programar un traductor de lenguajes desde cero y permitía al usuario aplicar las habilidades adquiridas en otros entornos.
Algunos programas incorporan varios lenguajes de scripting diferentes. Los navegadores web modernos suelen proporcionar un lenguaje para escribir extensiones para el propio navegador y varios lenguajes integrados estándar para controlar el navegador, incluidos JavaScript (un dialecto de ECMAScript ) o XUL .
Tipos
Los lenguajes de scripting se pueden clasificar en varios tipos diferentes, con un grado considerable de solapamiento entre ellos.
Lenguas de pegamento
A menudo se contrapone la programación de scripts a la programación de sistemas , como en la dicotomía de Ousterhout o " programación a gran escala y programación a pequeña escala ". Desde esta perspectiva, la programación de scripts es código de conexión que une componentes de software , y un lenguaje especializado para este propósito se denomina lenguaje de conexión . Las tuberías y los scripts de shell son ejemplos arquetípicos de lenguajes de conexión, y Perl se desarrolló inicialmente para cumplir esta misma función. El desarrollo web puede considerarse un uso de lenguajes de conexión, que sirven de interfaz entre una base de datos y un servidor web . Sin embargo, si una cantidad sustancial de lógica se escribe en scripts, es mejor caracterizarla simplemente como otro componente de software, no como "conector".
Los lenguajes de enlace son especialmente útiles para escribir y mantener:
- comandos personalizados para un intérprete de comandos; [ 12 ]
- programas más pequeños que aquellos que se implementan mejor en un lenguaje compilado; [ 13 ]
- programas "envoltorio" para ejecutables, como un archivo por lotes que mueve o manipula archivos y hace otras cosas con el sistema operativo antes o después de ejecutar una aplicación como un procesador de textos, una hoja de cálculo, una base de datos, un ensamblador, un compilador, etc.; [ 14 ]
- guiones que pueden cambiar; [ 15 ]
- Desarrollo rápido de una aplicación que posteriormente se implementa en otro lenguaje, generalmente compilado.
Ejemplos de lenguaje de pegamento:
- AppleScript
- CoffeeScript
- Fusión fría
- DCL
- ECL
- Common Lisp integrable
- Erlang
- EXEC , EXEC2
- JavaScript , JScript
- Lenguaje de control de trabajos (JCL)
- Julia
- Lua
- m4
- Perl (5 y Raku )
- PHP
- PowerShell
- Puro
- Pitón
- Rebol
- Rojo
- Rexx
- NetRexx
- Rubí
- Esquema
- Tcl
- Scripts de shell de Unix ( ksh , csh , bash , sh y otros)
- VBScript
- Lenguaje de flujo de trabajo
- XSLT
Los lenguajes de macros expuestos a componentes del sistema operativo o de las aplicaciones pueden funcionar como lenguajes de enlace. Entre ellos se incluyen Visual Basic para Aplicaciones , WordBasic , LotusScript , CorelScript , Hummingbird Basic, QuickScript, Rexx, SaxBasic y WinWrap Basic. Otras herramientas como AWK también pueden considerarse lenguajes de enlace, al igual que cualquier lenguaje implementado por un motor de Windows Script Host (VBScript, JScript y VBA por defecto en Windows y motores de terceros, incluidas 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 interconexión; los sistemas operativos de las PDA, como Windows CE, pueden tener herramientas de macros nativas o de terceros disponibles para interconectar aplicaciones, además de implementaciones de lenguajes de interconexión comunes, como Windows NT , DOS y algunos shells de Unix , Rexx, Modern Pascal, PHP y Perl. Dependiendo de la versión del sistema operativo, están disponibles WSH y los motores de scripts predeterminados (VBScript y JScript).
Las calculadoras programables pueden programarse en lenguajes de enlace de tres maneras. Por ejemplo, la Texas Instruments TI-92 , de fábrica, puede programarse con un lenguaje de script de comandos. La inclusión del lenguaje de scripting y enlace Lua en la serie de calculadoras TI-NSpire podría considerarse una continuación de esto. Los lenguajes de programación de alto nivel integrados en la mayoría de las calculadoras gráficas (generalmente variantes de Basic, a veces derivados de Lisp y, con menos frecuencia, derivados de C) en muchos casos pueden integrar funciones de la calculadora, como gráficos, listas, matrices, etc. Existen implementaciones de terceros de una versión más completa de Basic que pueden estar más cerca de las variantes enumeradas como lenguajes de enlace en este artículo, y también se mencionan intentos de implementar Perl, Rexx o varios intérpretes de comandos de sistemas operativos en las calculadoras gráficas TI y HP. Los compiladores cruzados de C para PC , compatibles con algunas máquinas TI y HP que utilizan herramientas para la conversión entre C y Perl, Rexx, AWK y scripts de shell a Perl, Modern Pascal y VBScript a y desde Perl, permiten escribir un programa en un lenguaje de enlace para su eventual implementación (como programa compilado) en la calculadora.
Lenguajes del editor
Varios editores de texto admiten macros escritas mediante un lenguaje de macros integrado en el editor, como The SemWare Editor (TSE) o vi improved (VIM), o mediante una implementación externa, como XEDIT , o ambas, como KEDIT . En ocasiones, los editores de texto y las macros de edición se utilizan internamente para proporcionar otras aplicaciones, como FILELIST y RDRLIST en CMS .
Lenguajes de control de trabajos y shells
Una clase importante de lenguajes de scripting surgió de la automatización del control de trabajos , que se relaciona con el inicio y el control del comportamiento de los programas del sistema [ 16 ] (en este sentido, se podría pensar que los shells son descendientes del JCL de IBM, o Job Control Language , que se usaba precisamente para este propósito). Muchos de los intérpretes de estos lenguajes también funcionan como intérpretes de línea de comandos, como el shell de Unix o el de MS-DOS COMMAND.COM. Otros, como AppleScript, ofrecen el uso de comandos similares al inglés para construir scripts.
Programación de interfaces gráficas de usuario
Con la llegada de las interfaces gráficas de usuario , surgió un lenguaje de programación especializado para controlar un ordenador. Estos lenguajes interactúan con las mismas ventanas gráficas, menús, botones, etc., que un usuario humano. Lo hacen simulando las acciones del usuario. Estos lenguajes se utilizan normalmente para automatizar acciones del usuario. También se les denomina macros cuando el control se realiza mediante la simulación de pulsaciones de teclas o clics del ratón, o pulsaciones en una pantalla táctil.
En principio, estos lenguajes podrían utilizarse para controlar cualquier aplicación con interfaz gráfica de usuario (GUI), pero en la práctica su uso es limitado, ya que requieren soporte tanto de la aplicación como del sistema operativo . Existen algunas excepciones a esta limitación. Algunos lenguajes de scripting para GUI se basan en el reconocimiento de objetos gráficos a partir de los píxeles de la pantalla . Estos lenguajes no dependen del soporte del sistema operativo ni de la aplicación.
Cuando la interfaz gráfica de usuario (GUI) proporciona las interfaces adecuadas, como en el caso de IBM Workplace Shell , se puede utilizar un lenguaje de scripting genérico, por ejemplo, Object REXX , para escribir scripts de la GUI.
Lenguajes específicos de la aplicación
Los lenguajes específicos de aplicaciones se pueden dividir en muchas categorías diferentes, por ejemplo, lenguajes de aplicaciones independientes (ejecutables) o lenguajes internos específicos de aplicaciones ( PostScript , XML , gscript como algunos de los scripts ampliamente distribuidos, implementados respectivamente por Adobe , Microsoft y Google ), entre otros, incluyen un lenguaje de scripting idiomático adaptado a las necesidades del usuario de la aplicación. Del mismo modo, muchos sistemas de videojuegos utilizan un lenguaje de scripting personalizado para expresar las acciones programadas de los personajes no jugadores y el entorno del juego. Los lenguajes de este tipo están diseñados para una sola aplicación; si bien pueden parecerse superficialmente 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 , si bien es un dialecto completo 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 aplicación puede considerarse como un lenguaje de programación específico de dominio especializado para una sola aplicación.
Lenguajes de extensión/integrables
Se han diseñado varios lenguajes para reemplazar los lenguajes de scripting específicos de cada aplicación, al poder integrarse en los programas de aplicación. El programador de la aplicación (que trabaja en C u otro lenguaje de sistema) incluye "ganchos" que permiten al lenguaje de scripting controlar la aplicación. Si bien estos lenguajes pueden ser técnicamente equivalentes a un lenguaje de extensión específico de la aplicación, cuando una aplicación integra un lenguaje común, el usuario se beneficia de la posibilidad de transferir sus conocimientos entre aplicaciones. Una alternativa más genérica consiste simplemente en proporcionar una biblioteca (a menudo una biblioteca de C) que un lenguaje de propósito general pueda usar para controlar la aplicación, sin necesidad de modificar el lenguaje para el dominio específico.
JavaScript comenzó siendo, y sigue siendo principalmente, un lenguaje para la creación de scripts dentro de los navegadores web . Sin embargo, la estandarización del lenguaje como ECMAScript lo ha popularizado como un lenguaje integrable de propósito general. La implementación de Mozilla, SpiderMonkey, está integrada en varios entornos, como el motor de widgets de Yahoo , y en aplicaciones como los productos de Adobe Flash ( ActionScript ) y Acrobat (para la creación de scripts en archivos PDF ).
Tcl se creó como un lenguaje de extensión, pero se ha llegado a utilizar con mayor frecuencia como un lenguaje de propósito general en funciones similares a las de Python , Perl y Ruby . Por el contrario, Rexx se creó como un lenguaje de control de trabajos, pero se utiliza ampliamente como lenguaje de extensión y de propósito general. Perl es un lenguaje de propósito general, pero tenía el dialecto Oraperl (1990), que consistía en un binario de Perl 4 con la interfaz de llamadas de Oracle compilada. Sin embargo, este ha sido reemplazado posteriormente por una biblioteca (módulo Perl), DBD::Oracle . [ 17 ] [ 18 ]
Otras aplicaciones complejas y orientadas a tareas específicas pueden incorporar y exponer un lenguaje de programación integrado para brindar a sus usuarios mayor control y funcionalidades superiores a las que ofrece una interfaz de usuario convencional, por muy sofisticada que sea. Por ejemplo, las herramientas de creación 3D Autodesk Maya integran el lenguaje integrado de Maya , al igual que Blender , que utiliza Python para este fin.
Algunos otros tipos de aplicaciones que requieren ciclos de adición de funcionalidades o de ajuste y ejecución más rápidos (por ejemplo, motores de juegos ) también utilizan un lenguaje integrado. Durante el desarrollo, esto les permite prototipar funcionalidades con mayor rapidez y realizar ajustes con más libertad, sin que el usuario tenga que conocer a fondo el funcionamiento interno de la aplicación ni reconstruirla después de cada ajuste (lo que puede llevar bastante tiempo). Los lenguajes de scripting utilizados para este fin van desde los más comunes y conocidos Lua y Python hasta otros menos conocidos como AngelScript y Squirrel .
Véase también
Referencias
- ↑ "Especificación del lenguaje ECMAScript 2019" . Ecma International . Consultado el 2 de abril de 2018 .
- ↑ "JBang" . jbang.dev . Consultado el 11 de septiembre de 2025 .
- ↑ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes" . Perl.com . Consultado el 8 de enero de 2011 .
- ↑ Wall, Larry (12 de diciembre de 2007). "Programar es difícil, ¡vamos a usar scripts!" . Perl.com . Archivado del original el 8 de diciembre de 2023.
- ↑ Brown, Vicki; Morin, Rich (1999). "Lenguajes de scripting" . MacTech . Recuperado el 22 de julio de 2009 .
- ↑ Loui, Ronald. "Elogio del scripting: pragmatismo real en la programación" . IEEE Computer. Archivado del original el 23 de septiembre de 2015. Consultado el 27 de agosto de 2013 .
- ↑ IBM Corporation (marzo de 1967). Lenguaje de control de trabajos del sistema operativo IBM System/360 (C28-6529-4) (PDF) . Archivado (PDF) del original el 25 de mayo de 2023 , vía bitsavers.
- ↑ Mooers, Calvin (1965). "TRAC, un lenguaje de descripción de procedimientos para la máquina de escribir reactiva" . Fundación TRAC . Archivado del original el 25 de abril de 2001. Consultado el 9 de marzo de 2012 .
- ↑ Van Vleck, Thomas (ed.). "Glosario de Multics – A — (función activa)" . Multics . Consultado el 9 de marzo de 2012 .
- ↑ Varian, Melinda (abril de 1991). "VM y la comunidad VM: pasado, presente y futuro" (PDF) . Archivado del original (PDF) el 6 de octubre de 2011. Recuperado el 9 de marzo de 2012 .
- ↑ Van Vleck, Thomas (ed.). "Glosario Multics – R — (RUNCOM)" . Consultado el 9 de marzo de 2012 .
- ↑ "¿Qué es el código de pegamento (lenguaje de código de pegamento)? - Definición de WhatIs.com" . WhatIs.com . Consultado el 31 de enero de 2022 .
- ↑ Larson, Quincy (10 de enero de 2020). "Lenguajes de programación interpretados frente a compilados" . Free Code Camp . Consultado el 23 de febrero de 2022 .
- ^ Balkis, Antón. "Guión Adalah" . Consejos de Raja . Consultado el 23 de febrero de 2022 .
- ↑ Axelsson, Mats. "Scripts de shell: ¿Qué puedes cambiar?" . Linux Hint . Consultado el 23 de febrero de 2022 .
- ↑ "Conceptos básicos de control de trabajos (Manual de referencia de Bash)" . GNU . Consultado el 20 de mayo de 2022 .
- ↑ " Oraperl - [ Acceso obsoleto de Perl a bases de datos Oracle para scripts antiguos de oraperl]", metacpan.
- ↑ " Perl ", Preguntas frecuentes sobre oráculos clandestinos .
- ↑ van Rossum, Guido (6-8 de enero de 1998). "Glue It All Together With Python" . Python.org. Archivado del original el 19 de enero de 2024.
Lecturas adicionales
- Barron, David William (2001). El mundo de los lenguajes de scripting . Wiley. ISBN 0-471-99886-9.
Enlaces externos
- Patrones para aplicaciones con scripts en Wayback Machine (archivado el 10 de octubre de 2004)
- Lenguajes de scripting
- paradigmas de programación