stringtranslate.com

tcl

Tcl (pronunciado " cosquillas " o como inicialización [8] ) es un lenguaje de programación dinámico , interpretado , de alto nivel y de propósito general . Fue diseñado con el objetivo de ser muy simple pero poderoso. [9] Tcl moldea todo en el molde de un comando , incluso construcciones de programación como asignación de variables y definición de procedimientos. [10] Tcl admite múltiples paradigmas de programación , incluidos los estilos orientado a objetos , imperativo , funcional y procedimental .

Se utiliza comúnmente integrado en aplicaciones C , [11] para creación rápida de prototipos , aplicaciones con script, GUI y pruebas. [12] Los intérpretes Tcl están disponibles para muchos sistemas operativos , lo que permite que el código Tcl se ejecute en una amplia variedad de sistemas. Debido a que Tcl es un lenguaje muy compacto, se utiliza en plataformas de sistemas integrados , tanto en su forma completa como en varias otras versiones de tamaño reducido. [13]

La popular combinación de Tcl con la extensión Tk se conoce como Tcl/Tk (pronunciado "tickle teca" o como inicialización ) y permite crear una interfaz gráfica de usuario (GUI) de forma nativa en Tcl. Tcl/Tk se incluye en la instalación estándar de Python en forma de Tkinter .

Historia

El lenguaje de programación Tcl fue creado en la primavera de 1988 por John Ousterhout mientras trabajaba en la Universidad de California, Berkeley . [14] [15] Originalmente "nació de la frustración", [11] según el autor, cuando los programadores idearon sus propios lenguajes para extender el software de automatización de diseño electrónico (EDA) y, más específicamente, la herramienta de diseño VLSI Magic , que fue un enfoque profesional para John en ese momento. [16] Posteriormente, Tcl ganó aceptación por sí solo. Ousterhout recibió el premio ACM Software System Award en 1997 por Tcl/Tk. [17]

El nombre proviene originalmente de T ool Command Language , pero convencionalmente se escribe Tcl en lugar de TCL . [18]

Las conferencias y talleres de Tcl se llevan a cabo tanto en Estados Unidos como en Europa. [28]

Características

Un archivo Tcl editado en el IDE de Eclipse

Las características de Tcl incluyen

Tcl seguro

Safe-Tcl es un subconjunto de Tcl que tiene funciones restringidas para que los scripts Tcl no puedan dañar su máquina o aplicación de alojamiento. [31] El acceso al sistema de archivos es limitado y se impide la ejecución de comandos arbitrarios del sistema. Utiliza un modelo de intérprete dual en el que el intérprete que no es de confianza ejecuta código en un script que no es de confianza. Fue diseñado por Nathaniel Borenstein y Marshall Rose para incluir mensajes activos en el correo electrónico. Safe-Tcl se puede incluir en el correo electrónico cuando se admiten application/safe-tcl y multipart/enabled-mail . Desde entonces, la funcionalidad de Safe-Tcl se ha incorporado como parte de las versiones estándar de Tcl/Tk. [32] [33]

Sintaxis y semántica fundamental.

La sintaxis y la semántica de Tcl están cubiertas por doce reglas [34] conocidas como Dodekalogue. [35]

Un script Tcl consta de una serie de invocaciones de comandos. Una invocación de comando es una lista de palabras separadas por espacios en blanco y terminadas con una nueva línea o punto y coma. La primera palabra es el nombre de un comando, que puede estar integrado en el lenguaje, encontrarse en una biblioteca disponible o definirse en el propio script. Las siguientes palabras sirven como argumentos del comando:

nombre del comando argumento1 argumento2 ... argumentoN

El siguiente ejemplo utiliza el comando puts (abreviatura de "poner cadena") para mostrar una cadena de texto en la consola del host:

pone "¡Hola mundo!" 

Esto envía la cadena "¡Hola, mundo!" al dispositivo de salida estándar junto con un carácter de nueva línea añadido.

Las variables y los resultados de otros comandos se pueden sustituir en cadenas, como en este ejemplo que usa los comandos set y expr para almacenar el resultado de un cálculo en una variable (tenga en cuenta que Tcl no se usa =como operador de asignación), y luego utiliza puts para imprimir el resultado junto con algún texto explicativo:

# expr evalúa la cadena de texto como una suma de conjunto de expresiones [expr 1 + 2 + 3 + 4 + 5 ] pone "La suma de los números 1..5 es $sum".    

El #personaje introduce un comentario . Los comentarios pueden aparecer en cualquier lugar donde el intérprete espere un nombre de comando.

# con llaves, la sustitución de variables se realiza mediante expr set  x 1 set sum [expr { $x + 2 + 3 + 4 + 5 }]; # $x no se sustituye antes de pasar el parámetro a expr; # expr sustituye 1 por $x mientras evalúa la expresión y pone "La suma de los números 1..5 es $sum". ; # la suma es 15                
# sin llaves, la sustitución de variables ocurre en el sitio de definición (alcance léxico) set  x 2 set op * set y 3 set res [expr $x$op$y ]; # Se sustituyen $x, $op y $y y la expresión se evalúa como 6 puts "$x $op $y es $res". ; # $x, $op, $y y $res se sustituyen y evalúan como cadenas           

Como se ve en estos ejemplos, hay una construcción básica en el lenguaje: el comando. Los mecanismos de cotización y las reglas de sustitución determinan cómo se procesan los argumentos de cada comando.

Se produce una sustitución especial antes del análisis de cualquier comando o argumento. Si el carácter final de una línea (es decir, inmediatamente antes de una nueva línea) es una barra invertida, entonces la combinación de barra invertida y nueva línea (y cualquier espacio o tabulación inmediatamente después de la nueva línea) se reemplaza por un solo espacio. Esto proporciona un mecanismo de continuación de línea , mediante el cual líneas largas en el código fuente se pueden pasar a la siguiente línea para comodidad de los lectores.

Continuando con el procesamiento normal de argumentos, una palabra que comienza con un carácter de comillas dobles ( ") se extiende hasta el siguiente carácter de comillas dobles. Por tanto, una palabra de este tipo puede contener espacios en blanco y punto y coma sin que se interprete que esos caracteres tienen ningún significado especial (es decir, se tratan como caracteres de texto normales). Una palabra que comienza con un carácter de llave de apertura ( {) se extiende hasta el siguiente carácter de llave de cierre ( }). Dentro de las llaves se suprimen todas las formas de sustitución, excepto la eliminación de barra invertida y nueva línea mencionada anteriormente. Las palabras que no están incluidas en ninguna de las construcciones se conocen como palabras simples.

En palabras simples y entre comillas dobles, pueden ocurrir tres tipos de sustitución:

La sustitución se realiza de izquierda a derecha en un solo recorrido por cada palabra. Cualquier texto sustituido no será escaneado nuevamente para posibles sustituciones adicionales. Sin embargo, puede aparecer cualquier número de sustituciones en una sola palabra.

Desde Tcl 8.5 en adelante, cualquier palabra puede tener el prefijo {*}, lo que hace que la palabra se divida en sus subpalabras constituyentes con el fin de construir la invocación del comando (similar a la ,@secuencia de la característica de cuasicomillas de Lisp ).

Como consecuencia de estas reglas, el resultado de cualquier comando puede usarse como argumento para cualquier otro comando. Tenga en cuenta que, a diferencia de los shells de comandos de Unix , Tcl no analiza ninguna cadena a menos que se le indique explícitamente que lo haga, lo que hace que el uso interactivo sea más engorroso, pero el uso mediante scripts es más predecible (por ejemplo, la presencia de espacios en los nombres de archivos no causa dificultades).

El signo único de igualdad ( =) no desempeña ningún papel especial en el lenguaje. El signo de doble igualdad ( ==) es la prueba de igualdad que se utiliza en contextos de expresión como el exprcomando y en el primer argumento de if. (Ambos comandos son parte de la biblioteca estándar; no tienen un lugar especial en la biblioteca y pueden reemplazarse si se desea).

La mayoría de los comandos Tcl, especialmente en la biblioteca estándar, son variados , y proc(el constructor para procedimientos de comando programados) permite definir valores predeterminados para argumentos no especificados y un argumento general para permitir que el código procese números arbitrarios de argumentos. .

Tcl no tiene tipos estáticos: cada variable puede contener números enteros, flotantes, cadenas, listas, nombres de comandos, diccionarios o cualquier otro valor; los valores se reinterpretan (sujetos a restricciones sintácticas) como otros tipos bajo demanda. Sin embargo, los valores son inmutables y las operaciones que parecen cambiarlos en realidad simplemente devuelven un nuevo valor.

Comandos básicos

Los comandos más importantes que hacen referencia a la ejecución de programas y operaciones de datos son:

Los comandos de control de ejecución habituales son:

Los comandos de bucle anteriores se pueden controlar adicionalmente mediante los siguientes comandos:

Comandos avanzados

nivel superior

uplevelpermite que un script de comando se ejecute en un ámbito distinto del ámbito más interno actual de la pila. Debido a que el script de comando puede llamar a procedimientos que usan el comando de nivel superior , esto tiene el efecto neto de transformar la pila de llamadas en un árbol de llamadas. [36]

Se implementó originalmente para permitir que los procedimientos Tcl reimplementaran comandos integrados (como for , if o while ) y aún tuvieran la capacidad de manipular variables locales . Por ejemplo, el siguiente script Tcl es una reimplementación del comando for (omitiendo el manejo de excepciones ):

proc  for { initCmd testExpr advancedCmd bodyScript } { nivel superior 1 $initCmd set testCmd [ lista expr $testExpr ] mientras {[nivel superior 1 $testCmd ]} { nivel superior 1 $bodyScript nivel superior 1 $advanceCmd } }                         

Upvar

upvarorganiza una o más variables locales en el procedimiento actual para hacer referencia a variables en una llamada a procedimiento adjunta o a variables globales . El comando upvar simplifica la implementación de llamadas a procedimientos de llamada por nombre y también facilita la creación de nuevas construcciones de control como procedimientos Tcl. [37]

Un comando decr que funciona como el comando integrado increxcepto que resta el valor de la variable en lugar de agregarlo:

proc  decr { varName { decremento 1 }} { upvar 1 $varName var incr var [expr { -$decrement }] }            

Orientado a objetos

Tcl 8.6 agregó un sistema de objetos dinámicos incorporado, TclOO, en 2012. [29] Incluye características como:

oo :: clase  crear  fruta { método comer {} { pone "¡delicioso!" } } oo :: clase crear plátano { superclase constructor de frutas {} { mi variable pelado conjunto pelado 0 } método pelar {} { mi variable pelado conjunto pelado 1 pone "piel ahora fuera" } método comestible ? {} { mi variable pelado return $pelado } método eat {} { if { ! [ mi comestible ? ]} { mi cáscara } siguiente } } set b [ plátano nuevo ] $b comer  imprime "sin piel" y "¡delicioso!" fruta destruir $b comer  error "comando desconocido"                                                                         

Tcl no tenía sintaxis orientada a objetos (OO) hasta 2012, [29] por lo que surgieron varios paquetes de extensión para permitir la programación orientada a objetos. Están muy extendidos en el código fuente Tcl existente. Las extensiones populares incluyen:

TclOO no solo se agregó para construir un fuerte sistema orientado a objetos, sino también para permitir que los paquetes de extensión construyan abstracciones orientadas a objetos usándolo como base. Después del lanzamiento de TclOO, incr Tcl se actualizó para utilizar TclOO como base. [27]

Desarrollo de aplicaciones web

Tcl Web Server es una implementación puramente Tcl de un servidor de protocolo HTTP. Se ejecuta como un script sobre un intérprete básico de Tcl.

Apache Rivet es un sistema de programación de código abierto para el servidor HTTP Apache que permite a los desarrolladores utilizar Tcl como lenguaje de programación para crear aplicaciones web dinámicas. Rivet es similar a PHP , ASP y JSP . Rivet fue desarrollado principalmente por Damon Courtney, David Welton, Massimo Manghi, Harald Oehlmann y Karl Lehenbauer . Rivet puede utilizar cualquiera de los miles de paquetes Tcl disponibles públicamente que ofrecen innumerables funciones, como interacción con bases de datos (Oracle, PostgreSQL, MySQL, SQLite, etc.) o interfaces para aplicaciones populares como la biblioteca de gráficos GD .

Interfaz con otros idiomas

Tcl interactúa de forma nativa con el lenguaje C. [38] Esto se debe a que fue escrito originalmente para ser un marco para proporcionar una interfaz sintáctica para los comandos escritos en C, y todos los comandos en el lenguaje (incluidas las cosas que de otro modo podrían ser palabras clave , como ifo while) se implementan de esta manera. . A cada función de implementación de comando se le pasa una matriz de valores que describen los argumentos (ya sustituidos) del comando, y es libre de interpretar esos valores como mejor le parezca.

Los simuladores de lógica digital suelen incluir una interfaz de secuencias de comandos Tcl para simular los lenguajes de hardware Verilog , VHDL y SystemVerilog .

Existen herramientas (por ejemplo, SWIG , Ffidl) para generar automáticamente el código necesario para conectar funciones C arbitrarias y el tiempo de ejecución de Tcl, y Critcl hace lo contrario, permitiendo incrustar código C arbitrario dentro de un script Tcl y compilarlo en tiempo de ejecución en una DLL .

Paquetes de extensión

El lenguaje Tcl siempre ha permitido paquetes de extensión, que proporcionan funcionalidad adicional, como una GUI, automatización de aplicaciones basada en terminal, acceso a bases de datos, etc. Las extensiones de uso común incluyen:

tk
La extensión Tcl más popular es el kit de herramientas Tk , que proporciona una biblioteca de interfaz gráfica de usuario para una variedad de sistemas operativos . Cada GUI consta de uno o más fotogramas . Cada marco tiene un administrador de diseño.
Esperar
Una de las otras extensiones Tcl muy populares es la extensión Expect . La estrecha relación inicial de Expect con Tcl es en gran medida responsable de la popularidad de Tcl en áreas de uso prolíficas, como en las pruebas de Unix, donde Expect se empleó (y todavía se emplea hoy en día) con mucho éxito para automatizar sesiones de telnet, ssh y seriales para realizar muchas tareas repetitivas (es decir, creación de scripts de aplicaciones que antes eran sólo interactivas). Tcl era la única forma de ejecutar Expect, por lo que Tcl se volvió muy popular en estas áreas de la industria.
Azulejo/Ttk
Tile/Ttk [39] es una colección de widgets de estilos y temas que puede reemplazar la mayoría de los widgets en Tk con variantes que son verdaderamente nativas de la plataforma a través de llamadas a la API de un sistema operativo . Los temas cubiertos de esta manera son Windows XP , Windows Classic, Qt (que se conecta a las bibliotecas del entorno X11 KDE ) y Aqua (Mac OS X). También se puede construir un tema sin estas llamadas utilizando definiciones de widgets complementadas con mapas de píxeles de imágenes . Los temas creados de esta manera incluyen Classic Tk, Step, Alt/Revitalized, Plastik y Keramik. En Tcl 8.4, este paquete se conoce como Tile, mientras que en Tcl 8.5 se ha integrado en la distribución principal de Tk (como Ttk).
entradas
Tix, Tk Interface eXtension, es un conjunto de componentes de interfaz de usuario que amplían las capacidades de las aplicaciones Tcl/Tk y Python. Es un paquete de software de código abierto mantenido por voluntarios del Tix Project Group y publicado bajo una licencia estilo BSD. [40]
Itcl/IncrTcl
Itcl es un sistema de objetos para Tcl, y normalmente se denomina [incr Tcl] (esa es la forma de incrementar Tcl, similar en estilo al nombre C++).
Tcllib
Tcllib es un conjunto de paquetes con secuencias de comandos para Tcl que se pueden utilizar sin pasos de compilación.
Tklib
Tklib es una colección de módulos de utilidad para Tk y un complemento de Tcllib.
tDOM
tDOM es una extensión Tcl para analizar XML, basada en el analizador Expat
TclTLS
TclTLS es la extensión OpenSSL de Tcl.
TclUDP
La extensión TclUDP [41] proporciona una biblioteca simple para admitir sockets del Protocolo de datagramas de usuario (UDP) en Tcl.
Bases de datos
Tcl Database Connectivity (TDBC), parte de Tcl 8.6, es una interfaz de acceso a bases de datos común para scripts Tcl. Actualmente admite controladores para acceder a bases de datos MySQL , ODBC , PostgreSQL y SQLite . Se planean más para el futuro. El acceso a las bases de datos también se admite a través de extensiones específicas de bases de datos, de las cuales hay muchas disponibles. [42]

Ver también

Referencias

  1. ^ ab "Desarrollo central de Tcl/Tk". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  2. ^ "[TCLCORE] Tcl/Tk 8.6.14 LANZADO". 29 de febrero de 2024 . Consultado el 1 de marzo de 2024 .
  3. ^ "Términos de licencia de Tcl/Tk". Tcl desarrollador Xchange . Consultado el 2 de noviembre de 2016 .
  4. ^ "Kit de desarrollo Tcl: compilador". Documentos de ActiveState . Consultado el 2 de noviembre de 2016 .
  5. ^ Lerdorf, Rasmus (26 de abril de 2007). "PHP on Hormones - presentación de la historia de PHP realizada por Rasmus Lerdorf en la Conferencia MySQL en Santa Clara, California". La Red de Conversaciones . Consultado el 11 de diciembre de 2009 .
  6. ^ "PowerShell y WPF: WTF". Blog de Windows PowerShell . Microsoft. Archivado desde el original el 25 de diciembre de 2008 . Consultado el 3 de abril de 2019 .
  7. ^ "Guiones TH1". Fósil.
  8. ^ Kenny, Kevin (4 de julio de 2005). "Re: certificación TCL". Grupo de noticias : comp.lang.tcl.
  9. ^ "Idioma". Tcl desarrollador Xchange . Consultado el 2 de noviembre de 2016 .
  10. ^ Fundamentos de Tcl , Capítulo 1 en Programación práctica en Tcl y Tk , ISBN 0-13-038560-3 
  11. ^ ab Desde la solapa interior de Tcl y Tk Toolkit , ISBN 0-201-63337-X 
  12. ^ "Usos de Tcl/Tk". Tcl desarrollador Xchange . Consultado el 2 de noviembre de 2016 .
  13. ^ "Guía de configuración de Cisco IOS Scripting con TCL". Soporte de Cisco . Consultado el 2 de noviembre de 2016 .
  14. ^ John Ousterhout. "Historia de Tcl". Páginas personales . Universidad Stanford . Consultado el 9 de agosto de 2011 .
  15. ^ "Historia de Tcl". Tcl desarrollador Xchange . Consultado el 2 de noviembre de 2016 .
  16. ^ "EDA". wiki.tcl-lang.org . Consultado el 27 de abril de 2022 .
  17. ^ "John K Ousterhout - Ganador del premio". Premios ACM . Consultado el 4 de noviembre de 2016 .
  18. ^ De la Wiki de Tcler Tcl vs.TCL
  19. ^ "Anuncio de lanzamiento de Tcl/Tk 8.0". Tcl desarrollador Xchange . Consultado el 1 de julio de 2014 .
  20. ^ "Anuncio de lanzamiento de Tcl/Tk 8.1". Tcl desarrollador Xchange . Consultado el 1 de julio de 2014 .
  21. ^ ab "Nuevas funciones de expresiones regulares en Tcl 8.1". Tcl desarrollador Xchange . Consultado el 2 de noviembre de 2016 .
  22. ^ "Anuncio de lanzamiento de Tcl/Tk 8.2". Tcl desarrollador Xchange . 18 de agosto de 1999 . Consultado el 1 de julio de 2014 .
  23. ^ "Anuncio de lanzamiento de Tcl/Tk 8.4". Tcl desarrollador Xchange . 2013-06-01 . Consultado el 1 de julio de 2014 .
  24. ^ "CONSEJO n.º 237: Enteros de precisión arbitraria para Tcl". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  25. ^ "CONSEJO n.° 194: CONSEJO n.° 194: Procedimientos como valores mediante aplicación". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  26. ^ "Anuncio de lanzamiento de Tcl/Tk 8.5". Tcl desarrollador Xchange . 2013-09-18 . Consultado el 1 de julio de 2014 .
  27. ^ ab "Anuncio de lanzamiento de Tcl/Tk 8.6". Tcl desarrollador Xchange . 2013-09-20 . Consultado el 1 de julio de 2014 .
  28. ^ "Conferencias Tcl/Tk". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  29. ^ abc "CONSEJO n.º 257: Orientación a objetos para Tcl". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  30. ^ "Descargar fuentes Tcl/Tk". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  31. ^ "Tcl seguro". Tcl desarrollador Xchange . Consultado el 1 de noviembre de 2016 .
  32. ^ Brown, Lawrie (18 al 20 de septiembre de 1996). "Seguridad del código móvil". En Bossomaier, Terry; Chubb, Lucy (eds.). Actas, Segunda Conferencia Conjunta, AUUG '96 y WWW Asia-Pacífico '96 . Melbourne, Australia. pag. 50 . Consultado el 22 de marzo de 2011 .
  33. ^ Welch, Brent B.; Jones, Ken; Hobbs, Jeffrey (2003). Programación práctica en Tcl y Tk . vol. 1 (4ª ed.). Prentice Hall PTR. pag. 291.ISBN 0-13-038560-3.
  34. ^ "Página del manual de Tcl: comandos integrados de Tcl". Tcl desarrollador Xchange . Consultado el 14 de junio de 2014 .
  35. ^ "Dodecálogo". Wiki de Tcler . Consultado el 14 de junio de 2014 .(También contiene una versión más corta de las reglas, "Octálogo").
  36. ^ "página de manual de nivel superior: comandos integrados". Tcl desarrollador Xchange . Consultado el 14 de junio de 2016 .
  37. ^ "página del manual de upvar: comandos integrados". Tcl desarrollador Xchange . Consultado el 14 de junio de 2016 .
  38. ^ "API Tcl C". tcl.tk. ​Consultado el 2 de noviembre de 2016 .
  39. ^ "Tile: un motor de temas mejorado para Tk". FuenteForge . Consultado el 7 de agosto de 2016 .
  40. ^ "Licencia Tix". FuenteForge . Consultado el 7 de agosto de 2012 .
  41. ^ "TclUDP". Wiki de Tcl'ers . Consultado el 7 de agosto de 2012 .
  42. ^ "TDBC". Wiki de Tcl'ers . Consultado el 7 de agosto de 2012 .

Otras lecturas

enlaces externos