leer wikipedia con nuevo diseño

Lenguaje de escritura


Un lenguaje de secuencias de comandos o un lenguaje de secuencias de comandos es un lenguaje de programación para un sistema en tiempo de ejecución que automatiza la ejecución de tareas que de otro modo serían realizadas individualmente por un operador humano. [1] Los lenguajes de secuencias de comandos se suelen interpretar en tiempo de ejecución en lugar de compilarse .

Las primitivas de un lenguaje de secuencias de comandos suelen ser tareas elementales o llamadas a API [ aclaración necesaria ] , y el lenguaje de secuencias de comandos permite que se combinen 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 verse como un lenguaje específico de dominio para un entorno particular; en el caso de la creación de scripts de una aplicación, también se 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 con un alto nivel de abstracción, o como lenguajes de control , particularmente para lenguajes de control de trabajos en mainframes.

El término "lenguaje de secuencias de comandos" también se utiliza de forma vaga para referirse a lenguajes interpretados dinámicos de alto nivel y de propósito general , como Perl , [2] PowerShell , Python y Tcl , [3] con el término "secuencia de comandos" que se utiliza a menudo para pequeños programas (hasta unos pocos miles de líneas de código) en dichos lenguajes, o en lenguajes específicos de dominio como los lenguajes de procesamiento de texto sed y AWK . Algunos de estos lenguajes se desarrollaron originalmente para su uso dentro de un entorno particular y luego se desarrollaron en lenguajes portátiles específicos de dominio o de propósito general. Por el contrario, muchos lenguajes de uso general tienen dialectos que se utilizan como lenguajes de programación. Este artículo analiza los lenguajes de scripting en el sentido estricto de lenguajes para un entorno específico.

El espectro de lenguajes de scripting abarca desde lenguajes muy pequeños y altamente específicos de dominio hasta lenguajes de programación de propósito general utilizados para scripting. Los ejemplos estándar de lenguajes de secuencias de comandos para entornos específicos incluyen: Bash , para los sistemas operativos Unix o similares a Unix ; ECMAScript ( JavaScript ), para navegadores web; y Visual Basic para Aplicaciones , para aplicaciones de Microsoft Office . Lua es un lenguaje diseñado y ampliamente utilizado como lenguaje de extensión. Perl es un lenguaje de propósito general que también se usa comúnmente como un lenguaje de extensión, mientras que ECMAScript sigue siendo principalmente un lenguaje de scripting para navegadores web, pero también se usa como un lenguaje de propósito general. El dialecto Emacs Lisp de Lisp (para el editor de Emacs ) y el dialecto de Visual Basic para Aplicaciones de Visual Basic son ejemplos de dialectos del lenguaje de programación de lenguajes de propósito general. Algunos sistemas de juego, en particular el mundo virtual Second Life y la franquicia Trainz de simuladores de ferrocarril, se han ampliado ampliamente en funcionalidad mediante extensiones de secuencias de comandos ( Linden Scripting Language y TrainzScript). En otros juegos como Wesnoth , la variedad de juegos reales que juegan los jugadores son guiones escritos por otros usuarios.

Caracteristicas

Los lenguajes de scripting típicos están pensados ​​para ser muy rápidos de aprender y escribir, ya sea como archivos de código fuente cortos o de forma interactiva en un ciclo de lectura-evaluación-impresión (REPL, shell del 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 Java como un lenguaje de scripting 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 de host o un lanzador de aplicaciones .

public  class  HelloWorld  {  public  void  printHelloWorld ()  {  System . fuera . 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  HelloWorld  {  public  void  printHelloWorld ()  {  System . fuera . println ( "Hola mundo" );  }  public  static  void  main ( String []  args )  {  printHelloWorld ();  } }

En el ejemplo anterior, main está definido y, por lo tanto, el lanzador puede invocarlo, aunque aún no se puede ejecutar de forma interactiva. Por el contrario, Python permite la definición de 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.

print ( "Hello World" ) print  "Hello World"  # Python 2.7 o anterior

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

Un lenguaje de secuencias de comandos 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 se escribe normalmente en un lenguaje compilado y se distribuye 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 del usuario final) 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 secuencias de comandos 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 a menudo son creados o modificados por la persona que los ejecuta, [6] pero a menudo también se distribuyen, como cuando gran parte de los juegos están escritos en un lenguaje de scripting, en particular el juego Google Chrome T-rex.

Historia

Las primeras computadoras centrales (en la década de 1950) no eran interactivas, sino que usaban procesamiento por lotes . Job Control Language (JCL) de IBM es el arquetipo de lenguajes que se utilizan 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 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. [8] Multics llama a estas funciones activas . [9] Louis Pouzin escribió un procesador temprano para scripts de comando llamado RUNCOM para CTSS alrededor de 1964. Stuart Madnick en 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 rama de CTSS RUNCOM, también llamada RUNCOM. [11] EXEC fue finalmente reemplazado por EXEC 2 y REXX .

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

Algunos programas incorporan varios lenguajes de secuencias de comandos diferentes. Los navegadores web modernos suelen proporcionar un lenguaje para escribir extensiones en 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 secuencias de comandos se pueden clasificar en varios tipos diferentes, con un grado considerable de superposición entre los tipos.

Pegar idiomas

Las secuencias de comandos a menudo se contrastan con la programación del sistema , 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, la creación de scripts es un código adhesivo , que conecta componentes de software , y un lenguaje especializado para este propósito es un lenguaje adhesivo . Las canalizaciones y las secuencias de comandos de shell son ejemplos arquetípicos de lenguajes de pegamento, y Perl se desarrolló inicialmente para cumplir esta misma función. El desarrollo web se puede considerar un uso de lenguajes adhesivos, que interactúan entre una base de datos y un servidor web . Pero si se escribe una cantidad sustancial de lógica en un script, es mejor caracterizarlo simplemente como otro componente de software, no como "pegamento".

Los lenguajes de pegamento son especialmente útiles para escribir y mantener:

  • comandos personalizados para un shell de comandos;
  • programas más pequeños que los que se implementan mejor en un lenguaje compilado; [ cita requerida ]
  • programas "envoltorios" 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 texto, hoja de cálculo, base de datos, ensamblador, compilador, etc .;
  • guiones que pueden cambiar;
  • El desarrollo rápido de una aplicación de una solución eventualmente implementada en otro lenguaje, generalmente compilado.

Ejemplos de lenguaje de pegamento:

  • AppleScript
  • Fusión fría
  • DCL
  • Common Lisp integrable
  • ecl
  • Erlang
  • EJEC
  • EJEC2
  • JCL
  • CoffeeScript
  • Julia
  • JScript y JavaScript
  • Lua
  • m4
  • Pascal moderno
  • Perl (5 y Raku )
  • PHP
  • Potencia Shell
  • Puro
  • Pitón
  • Rebol
  • rojo
  • Rexx
  • Rubí
  • Esquema
  • Tcl
  • Scripts de Unix Shell ( ksh , csh , bash , sh y otros)
  • VBScript
  • Lenguaje de flujo de trabajo
  • XSLT

Los lenguajes de macro expuestos al sistema operativo o los componentes de la aplicación pueden servir como lenguajes de cola. Estos incluyen Visual Basic para Aplicaciones , WordBasic , LotusScript , CorelScript , Hummingbird Basic, QuickScript, Rexx, SaxBasic y WinWrap Basic . Otras herramientas como AWK también se pueden considerar 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 las implementaciones de Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi y C). La mayoría de las aplicaciones pueden acceder a los componentes del sistema operativo y utilizarlos a través de los modelos de objetos o sus propias funciones.

Otros dispositivos, como las calculadoras programables, también pueden tener lenguajes de pegamento; los sistemas operativos de PDA como Windows CE pueden tener herramientas de macros nativas o de terceros disponibles que unen aplicaciones, además de implementaciones de lenguajes de pegamento comunes, incluidos Windows NT , DOS y algunos shells de Unix , Rexx, Modern Pascal, PHP y Perl. Dependiendo de la versión del sistema operativo, WSH y los motores de secuencia de comandos predeterminados (VBScript y JScript) están disponibles.

Las calculadoras programables se pueden programar en lenguajes de pegamento de tres formas. Por ejemplo, la TI-92 de Texas Instruments , de forma predeterminada de fábrica, se puede programar con un lenguaje de secuencia de comandos de comandos. La inclusión del lenguaje de secuencias de comandos 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 de la mayoría de las calculadoras gráficas (la mayoría de las veces variantes básicas, a veces derivadas de Lisp y, más raramente, derivadas de C) en muchos casos pueden unir funciones de calculadora, como gráficos, listas, matrices, etc. Se encuentran disponibles implementaciones de terceros de la versión básica más completa que pueden 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 del sistema operativo en las calculadoras gráficas de TI y HP. Los compiladores cruzados de C basados ​​en PC para algunas de las máquinas de TI y HP que se utilizan 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 de cola para una eventual implementación (como un programa compilado) en la calculadora.

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 secuencias de comandos ha surgido de la automatización del control de trabajos , que se relaciona con el inicio y el control del comportamiento de los programas del sistema. (En este sentido, uno podría pensar que los shells son descendientes del JCL de IBM, o Job Control Language , que se usó exactamente para este propósito). Muchos de los intérpretes de estos lenguajes funcionan como intérpretes de línea de comandos como el shell de Unix o el MS-DOS COMMAND.COM. Otros, como AppleScript, ofrecen el uso de comandos similares al inglés para crear scripts.

Secuencias de comandos de GUI

Con la llegada de las interfaces gráficas de usuario, surgió un tipo de lenguaje de programación especializado para controlar una computadora. Estos lenguajes 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 de los usuarios. Dichos lenguajes también se denominan " macros " cuando el control se realiza mediante pulsaciones de teclas simuladas o clics del ratón, así como al tocar o pulsar en una pantalla táctil activada.

En principio, estos lenguajes podrían utilizarse 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 secuencias de comandos 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 secuencias de comandos de la 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 scripting genérico, por ejemplo , OREXX , para escribir scripts de GUI.

Idiomas específicos de la aplicación

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 aplicaciones internas (postscript, xml, gscript como algunos de los scripts ampliamente distribuidos, implementados respectivamente por Adobe, MS y Google) entre otros incluyen un lenguaje de scripting 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 los 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 uso general (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 secuencias de comandos específico de una aplicación se puede ver como un lenguaje de programación específico de un dominio especializado en una sola aplicación.

Lenguajes de extensión / incrustables

Se han diseñado varios lenguajes con el propósito de reemplazar los lenguajes de scripting específicos de la aplicación al ser incrustables en programas de aplicación. El programador de aplicaciones (que trabaja en C u otro lenguaje de sistemas) incluye "ganchos" donde el lenguaje de scripting 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 puede usar para controlar la aplicación, sin modificar el lenguaje para el dominio específico.

JavaScript comenzó como y principalmente sigue siendo un lenguaje para la creación de scripts dentro de los navegadores web ; sin embargo, la estandarización del lenguaje como ECMAScript lo ha hecho popular como lenguaje incrustable de uso general. En particular, la implementación de Mozilla SpiderMonkey está integrada en varios entornos como Yahoo! Motor de widgets . Otras aplicaciones de incrustación implementaciones ECMAScript incluyen los de Adobe productos de Flash ( ActionScript ) y Adobe Acrobat (para secuencias de comandos PDF archivos).

Tcl se creó como un lenguaje de extensión, pero se ha utilizado con más frecuencia como lenguaje de propósito general en roles 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 un lenguaje de extensión y también como un lenguaje de uso 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 . [12] [13]

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 de Autodesk Maya 3D incorporan Maya Embedded Language , o Blender, que utiliza Python para cumplir esta función.

Algunos otros tipos de aplicaciones que necesitan una adición de funciones más rápida 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 ajustar 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 ajuste (lo que puede llevar una cantidad significativa de tiempo). . Los lenguajes de scripting 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 para que la industria la integre en programas de aplicación C / C ++.

Ver también

  • Lista de lenguajes de secuencias de comandos
  • Lenguaje de descripción de arquitectura
  • Lenguaje de autoría
  • Automatización de la construcción [14]
  • Archivo de configuración
  • Directiva de intérprete / Shebang (Unix)
  • Lenguaje de plantillas

Referencias

  1. ^ "Especificación del idioma ECMAScript 2019" . www.ecma-international.org . Consultado el 2 de abril de 2018 .
  2. ^ Sheppard, Doug (16 de octubre de 2000). "Introducción a Perl para principiantes" . dev.perl.org . Consultado el 8 de enero de 2011 .
  3. ^ La programación es difícil, vamos a programar ... , Larry Wall , 6 de diciembre de 2007
  4. ^ Hola, Tony; Pápay, Gyuri (2014). El universo de la informática: 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 scripting 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".CS1 maint: posdata ( enlace )
  5. ^ Brown, Vicki. "Lenguajes de secuencias de comandos" . Consultado el 22 de julio de 2009 .
  6. ^ Loui, Ronald (2008). "En elogio de las secuencias de comandos" . Computadora IEEE. Archivado desde el original el 23 de septiembre de 2015 . Consultado el 27 de agosto de 2013 .
  7. ^ IBM Corporation (1967). Lenguaje de control de trabajos del sistema operativo IBM System / 360 (C28-6529-4) (PDF) .
  8. ^ Mooers, Calvin. "TRAC, un lenguaje de descripción de procedimientos para la máquina de escribir reactiva" . 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)" . Consultado el 9 de marzo de 2012 .
  10. ^ Varian, Melinda. "VM Y LA COMUNIDAD VM: pasado, presente y futuro" (PDF) . Consultado el 9 de marzo de 2012 .
  11. ^ Van Vleck, Thomas (ed.). "Glosario de Multics - R - (RUNCOM)" . Consultado el 9 de marzo de 2012 .
  12. ^ Oraperl , CPAN]
  13. ^ Perl , preguntas frecuentes sobre Oracle subterráneo
  14. ^ van Rossum, Guido (6 al 8 de enero de 1998). "Pégalo todo junto" . Péguelo todo junto con Python . python.org.

Otras lecturas

  • Barron, David William (2001). El mundo de los lenguajes de secuencias de comandos . ISBN 0-471-99886-9.

enlaces externos

  • Patrones para aplicaciones con secuencias de comandos en Wayback Machine (archivado el 10 de octubre de 2004)
  • Texto
  • Escenarios de desarrollo comunes

This page is based on a Wikipedia article Text is available under the CC BY-SA 4.0 license; additional terms may apply. Images, videos and audio are available under their respective licenses.


  • Terms of Use
  • Privacy Policy