stringtranslate.com

Lenguaje de escritura

GDScript en Godot 3.4

Un lenguaje de secuencias de comandos o lenguaje de secuencias de comandos es un lenguaje de programación que se utiliza para manipular, personalizar y automatizar las instalaciones de un sistema existente. [1] Los lenguajes de scripting generalmente se interpretan en tiempo de ejecución en lugar de compilarse .

Las primitivas de un lenguaje de secuencias de comandos suelen ser tareas elementales o llamadas API , [ se necesita aclaración ] y el lenguaje de secuencias de comandos permite combinarlas en más programas. Los entornos que pueden automatizarse mediante secuencias de comandos incluyen software de aplicaciones , editores de texto , páginas web , shells de sistemas operativos , sistemas integrados y juegos de computadora . Un lenguaje de secuencias de comandos puede ser un lenguaje de propósito general o un lenguaje de dominio específico para un entorno particular; en el caso de programar una aplicación, también se le conoce como lenguaje de extensión . Los lenguajes de scripting también se denominan a veces lenguajes de programación de muy alto nivel , ya que a veces operan en un alto nivel de abstracción, o lenguajes de control , particularmente para lenguajes de control de trabajos en mainframes.

El término lenguaje de scripting también se utiliza en un sentido más amplio, es decir, para referirse a 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 pequeño programa en dicho lenguaje; Por lo general, está contenido en un solo archivo y no tiene más de unos pocos miles de líneas de código.

El espectro de lenguajes de scripting varía de pequeño a grande, y desde lenguajes altamente específicos de dominio hasta lenguajes de programación de propósito general . Un lenguaje puede comenzar siendo pequeño y de dominio altamente específico y luego 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.

Ejemplos

Se ha ampliado ampliamente la funcionalidad de algunos sistemas de juego mediante extensiones de secuencias de comandos que utilizan lenguajes personalizados, en particular el mundo virtual Second Life (que utiliza Linden Scripting Language ) y la franquicia Trainz de simuladores Railroad (que utiliza TrainzScript). En algunos juegos, como Wesnoth , los usuarios pueden jugar variantes personalizadas del juego definidas por scripts aportados por el usuario.

Características

Los lenguajes de secuencias de comandos típicos pretenden ser muy rápidos de aprender y escribir, ya sea como archivos de código fuente cortos o de forma interactiva en un bucle de lectura, evaluación e impresión (REPL, shell de lenguaje). [4] Esto generalmente implica una sintaxis y una semántica relativamente simples ; Normalmente, un "script" (código escrito en el lenguaje de scripting) se ejecuta de principio a fin, como un "script", sin un punto de entrada explícito .

Por ejemplo, es poco común caracterizar a Java como un lenguaje de secuencias de comandos debido a su larga sintaxis y reglas sobre qué clases existen en qué archivos, y no es directamente posible ejecutar Java de forma interactiva, porque los archivos fuente solo pueden contener definiciones que deben invocarse. externamente mediante una aplicación host o un iniciador de aplicaciones .

public class HolaMundo { public void printHolaMundo () { System . afuera . println ( "Hola mundo" ); } }         

Este fragmento de código destinado a imprimir "Hello World" no hace nada ya que main() no está declarado en la clase HelloWorld , aunque el siguiente sería útil.

public class HolaMundo { public void printHolaMundo () { System . afuera . println ( "Hola mundo" ); } public static void main ( String [] args ) { printHelloWorld (); } }                 

En el ejemplo anterior, main está definido y, por lo tanto, el iniciador puede invocarlo, aunque todavía no se puede ejecutar de forma interactiva. Por el contrario, Python permite definir algunas funciones en un solo archivo, o evitar funciones por completo y usar un estilo de programación imperativo , o incluso usarlo de forma interactiva.

imprimir ( "Hola mundo" )

Esta línea de código Python imprime "Hola mundo"; Aquí no se requiere ninguna declaración declarativa como main() .

Un lenguaje de scripting generalmente se interpreta a partir del código fuente o código de bytes . [5] Por el contrario, el entorno de software (intérprete) para el que se escriben los scripts suele escribirse en un lenguaje compilado y distribuirse en forma de código de máquina .

Los lenguajes de secuencias de comandos pueden diseñarse para que los utilicen los usuarios finales de un programa ( desarrollo de usuarios finales ) o pueden ser solo para uso interno de los desarrolladores, de modo que puedan escribir partes del programa en el lenguaje de secuencias de comandos. Los lenguajes de scripting suelen utilizar la abstracción , una forma de ocultar información , para ahorrar a los usuarios los detalles de los tipos de variables internas, el almacenamiento de datos y la gestión de la memoria .

Los scripts suelen ser creados o modificados por la persona que los ejecuta, [6] pero también suelen distribuirse, como cuando gran parte de los juegos están escritos 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 y en su lugar utilizaban procesamiento por lotes . El lenguaje de control de trabajos (JCL) de IBM es el arquetipo de lenguajes utilizados para controlar el procesamiento por lotes. [7]

Los primeros shells interactivos se desarrollaron en la década de 1960 para permitir el funcionamiento remoto de los primeros sistemas de tiempo compartido , y utilizaban scripts de shell , que controlaban la ejecución de programas informáticos dentro de un programa informático, 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 guiones que, cuando se interpretan, insertan una cadena de caracteres en el guión. [8] Multics llama a estas funciones activas . [9] Louis Pouzin escribió uno de los primeros procesadores para scripts de comandos llamado RUNCOM para CTSS alrededor de 1964. Stuart Madnick en el MIT escribió un lenguaje de scripts para CP/CMS de IBM en 1966. Originalmente llamó a este procesador COMMAND, más tarde llamado EXEC . [10] Multics incluía una rama de CTSS RUNCOM, también llamada RUNCOM. [11] EXEC finalmente fue reemplazado por EXEC 2 y REXX .

Lenguajes como Tcl y Lua se diseñaron específicamente como lenguajes de programación de propósito general que podían integrarse en cualquier aplicación. Otros lenguajes como Visual Basic para Aplicaciones (VBA) proporcionaron una fuerte integración con las funciones de automatización de un sistema subyacente. La incorporación de estos lenguajes de programación de propósito general en lugar de desarrollar un nuevo lenguaje para cada aplicación también tuvo beneficios obvios, ya que alivió al desarrollador de la aplicación de la necesidad de codificar un traductor de idiomas desde cero y permitió al usuario aplicar las habilidades aprendidas en otros lugares.

Algunos programas incorporan varios lenguajes de programación 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, incluido JavaScript (un dialecto de ECMAScript ) o XUL .

Tipos

Los lenguajes de scripting se pueden clasificar en varios tipos diferentes, con un grado considerable de superposición entre los tipos.

Idiomas de pegamento

El scripting a menudo se contrasta 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 ". Desde este punto de vista, el scripting es un código adhesivo que conecta componentes de software , y un lenguaje especializado para este propósito es un lenguaje adhesivo . Los pipelines y los scripts de shell son ejemplos arquetípicos de lenguajes adhesivos, y Perl se desarrolló inicialmente para cumplir esta misma función. El desarrollo web puede considerarse un uso de lenguajes adhesivos, que actúan como interfaz entre una base de datos y un servidor web . Pero si una cantidad sustancial de lógica está escrita en script, es mejor caracterizarla como simplemente otro componente de software, no como "pegamento".

Los lenguajes adhesivos son especialmente útiles para escribir y mantener:

Ejemplos de lenguaje de pegamento:

Los lenguajes de macro expuestos al sistema operativo o a los componentes de la aplicación pueden servir como lenguajes adhesivos. Estos 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 adhesivos, 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 implementaciones de Rexx, Perl, Tcl, Python, XSLT, Ruby, Pascal moderno, Delphi y C). La mayoría de las aplicaciones pueden acceder y utilizar componentes del sistema operativo a través de modelos de objetos o sus propias funciones.

Otros dispositivos, como las calculadoras programables, también pueden tener lenguajes adhesivos; Los sistemas operativos de PDA, como Windows CE, pueden tener disponibles macroherramientas nativas o de terceros que unen aplicaciones, además de implementaciones de lenguajes adhesivos comunes, incluidos Windows NT , DOS y algunos shells Unix , Rexx, Modern Pascal, PHP. y Perl. Dependiendo de 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 adhesivos de tres formas. Por ejemplo, la Texas Instruments TI-92 , por defecto de fábrica, se puede programar con un lenguaje de script de comandos. La inclusión del lenguaje de scripting y pegamento Lua en la serie de calculadoras TI-NSpire podría verse como un sucesor de esto. Los principales lenguajes de programación de alto nivel integrados en la mayoría de las calculadoras gráficas (la mayoría de las veces variantes básicas, 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. Están disponibles implementaciones de terceros de una versión básica más completa que puede estar más cerca de las variantes enumeradas como lenguajes adhesivos 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 utilizados con herramientas que convierten entre C y Perl, Rexx, AWK y scripts de shell a Perl, Modern Pascal, VBScript hacia y desde Perl hacen posible escribir un programa. en un lenguaje adhesivo para su eventual implementación (como un programa compilado) en la calculadora. [ cita necesaria ]

Idiomas del editor

Varios editores de texto admiten macros escritas utilizando un lenguaje de macros integrado en el editor, por ejemplo, The SemWare Editor (TSE), vi mejorado (VIM), o utilizando 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 secreto para proporcionar otras aplicaciones, por ejemplo, FILELIST y RDRLIST en CMS .

Lenguajes y shells de control de trabajos

Una clase importante de lenguajes de scripting ha surgido a partir de la automatización del control de trabajos , que se relaciona con el inicio y control del comportamiento de los programas del sistema [16] (en este sentido, uno podría pensar que los shells son descendientes del JCL de IBM, o Job Control). Idioma , que se utilizó exactamente 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 Unix o MS-DOS COMMAND.COM. Otros, como AppleScript, ofrecen el uso de comandos similares al inglés para crear scripts.

secuencias de comandos GUI

Con la llegada de las interfaces gráficas de usuario, surgió un tipo especializado de lenguaje de programación para controlar una computadora. Estos idiomas interactúan con las mismas ventanas gráficas, menús, botones, etc., que lo haría 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 simuladas o clics del mouse, así como toques o presiones en una pantalla activada por tacto.

En principio, estos lenguajes podrían usarse para controlar cualquier aplicación GUI; pero, en la práctica su uso es limitado porque su uso necesita soporte de la aplicación y del sistema operativo . Hay algunas excepciones a esta limitación. Algunos lenguajes de programación GUI se basan en el reconocimiento de objetos gráficos a partir de los píxeles de la pantalla . Estos lenguajes de secuencias de comandos 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 secuencias de comandos genérico, por ejemplo OREXX , para escribir secuencias de comandos GUI.

Idiomas específicos de la aplicación

Los idiomas específicos de la aplicación se pueden dividir en muchas categorías diferentes, es decir, idiomas de aplicaciones independientes (ejecutables) o idiomas internos específicos de la aplicación (postscript, xml, gscript como algunos de los scripts ampliamente distribuidos, implementados respectivamente por Adobe, MS y Google), entre otros. un lenguaje de programación idiomático adaptado a las necesidades del usuario de la aplicación. Asimismo, muchos sistemas de juegos de computadora utilizan un lenguaje de secuencias de comandos personalizado para expresar las acciones programadas de personajes que no son jugadores y el entorno del juego. Los lenguajes de este tipo están diseñados para una sola aplicación; y, si bien pueden parecerse superficialmente a un lenguaje específico de propósito general (por ejemplo, QuakeC , modelado a partir de C), tienen características personalizadas que los distinguen. Emacs Lisp , si bien es un dialecto de Lisp totalmente formado y capaz , contiene muchas características especiales que lo hacen más útil para ampliar las funciones de edición de Emacs. Un lenguaje de secuencias de comandos específico de una aplicación puede verse como un lenguaje de programación de dominio específico especializado en una sola aplicación.

Extensiones/idiomas integrables

Se han diseñado varios lenguajes con el fin de reemplazar los lenguajes de secuencias de comandos específicos de aplicaciones al poder integrarlos en programas de aplicaciones. El programador de aplicaciones (que trabaja en C u otro lenguaje de sistemas) incluye "ganchos" donde el lenguaje de secuencias de comandos puede controlar la aplicación. Estos lenguajes pueden ser técnicamente equivalentes a un lenguaje de extensión específico de una 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 utilizar para controlar la aplicación, sin modificar el lenguaje para el dominio específico.

JavaScript comenzó como, y principalmente sigue siendo, un lenguaje para secuencias de comandos dentro de los navegadores web ; 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 de Mozilla SpiderMonkey está integrada en varios entornos como Yahoo! Motor de widgets . Otras aplicaciones que incorporan implementaciones de ECMAScript incluyen los productos de Adobe Adobe Flash ( ActionScript ) y Adobe Acrobat (para secuencias de comandos de archivos PDF ).

Tcl se creó como un lenguaje de extensión, pero se ha utilizado con mayor frecuencia como lenguaje de propósito general en funciones similares a Python , Perl y Ruby . Por otro lado, Rexx se creó originalmente como un lenguaje de control de trabajos, pero se usa ampliamente como lenguaje de extensión y 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 Perl 4 con Oracle Call Interface compilado. Sin embargo, desde entonces ha sido reemplazado por una biblioteca (Módulo Perl), DBD::Oracle. [17] [18]

Otras aplicaciones complejas y orientadas a tareas pueden incorporar y exponer un lenguaje de programación integrado para permitir a sus usuarios más 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 Maya Embedded Language o Blender , que utiliza Python para desempeñar esta función.

Algunos otros tipos de aplicaciones que necesitan agregar funciones más rápidamente o ciclos de ajuste y ejecución (por ejemplo, motores de juegos ) también utilizan un lenguaje integrado. Durante el desarrollo, esto les permite crear prototipos de funciones más rápido y modificarlas con mayor libertad, sin la necesidad de que el usuario tenga un conocimiento profundo del funcionamiento interno de la aplicación o de reconstruirla después de cada modificación (lo que puede llevar una cantidad significativa de tiempo). . Los lenguajes de script utilizados para este propósito van desde los más comunes y famosos Lua y Python hasta los menos conocidos como AngelScript y Squirrel .

Ch es otra opción de scripting compatible con C que la industria puede incorporar en programas de aplicación C/C++.

Ver también

Referencias

  1. ^ "Especificación del lenguaje ECMAScript 2019". ECMA Internacional . Consultado el 2 de abril de 2018 .
  2. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes". Perl.com . Consultado el 8 de enero de 2011 .
  3. ^ Muro, Larry (12 de diciembre de 2007). "Programar es difícil, vamos a crear secuencias de comandos ..." Perl.com . Archivado desde el original el 8 de diciembre de 2023.
  4. ^ Hola, Tony; Papay, Gyuri (2014). El universo informático: un viaje a través de una revolución . Prensa de la Universidad de Cambridge. pag. 76.ISBN 978-1-31612322-5. Una característica importante de los lenguajes de programación modernos es su interactividad, a veces denominada entorno de programación REPL . […] Las características de facilidad de uso y ejecución inmediata con un entorno REPL a veces se toman como la definición de un lenguaje de scripting.
  5. ^ Marrón, Vicki; Morin, rico (1999). "Lenguajes de secuencias de comandos". MacTech . Consultado el 22 de julio de 2009 .
  6. ^ Luis, Ronald. "Elogio de las secuencias de comandos: pragmatismo de programación real". Computadora IEEE. Archivado desde el original el 23 de septiembre de 2015 . Consultado el 27 de agosto de 2013 .
  7. ^ IBM Corporation (marzo de 1967). Lenguaje de control de trabajos del sistema operativo IBM System/360 (C28-6529-4) (PDF) . Archivado (PDF) desde el original el 25 de mayo de 2023, a través de bitsavers.
  8. ^ Mooers, Calvin (1965). "TRAC, un lenguaje de descripción de procedimientos para la máquina de escribir reactiva". Fundación TRAC . Archivado desde el original el 25 de abril de 2001 . Consultado el 9 de marzo de 2012 .
  9. ^ Van Vleck, Thomas (ed.). "Glosario Multics - A - (función activa)". Multics . Consultado el 9 de marzo de 2012 .
  10. ^ Varian, Melinda (abril de 1991). "VM y la comunidad VM: pasado, presente y futuro" (PDF) . Archivado desde el original (PDF) el 6 de octubre de 2011 . Consultado el 9 de marzo de 2012 .
  11. ^ Van Vleck, Thomas (ed.). "Glosario Multics - R - (RUNCOM)" . Consultado el 9 de marzo de 2012 .
  12. ^ "¿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 .
  13. ^ Larson, Quincy (10 de enero de 2020). "Lenguajes de programación interpretados versus compilados". Campamento de código gratuito . Consultado el 23 de febrero de 2022 .
  14. ^ Balkis, Antón. "Guión Adalah". Consejos de Raja . Consultado el 23 de febrero de 2022 .
  15. ^ Axelsson, esteras. "Scripts de Shell: ¿qué se puede cambiar?". Sugerencia de Linux . Consultado el 23 de febrero de 2022 .
  16. ^ "Conceptos básicos de control de trabajos (manual de referencia de Bash)". www.gnu.org . Consultado el 20 de mayo de 2022 .
  17. ^ Oraperl, CPAN]
  18. ^ Perl, preguntas frecuentes sobre Oracle subterráneo
  19. ^ van Rossum, Guido (6 al 8 de enero de 1998). "Pégalo todo junto". Pégalo todo junto con Python . python.org.

Otras lecturas

enlaces externos