Tcl

tcl
clase de idioma multiparadigma :
orientado a objetos ,
funcional ,
procedimental ,
impulsado por eventos ,
imperativo
tipo de ejecución interpretado
Apareció en 1988
Autor Juan Ousterhout
extensión de archivo .tcl
Liberar
sistema de tipos dinámica
sido influenciado concha , ceceo
influenciado pitón , rubí
Licencia similar a BSD
Sitio web tcl.tk
 Archivos multimedia en Wikimedia Commons

Tcl (del inglés  Tool Command Language  - "lenguaje de comandos de herramientas", léase "ticle" o "ti-si-el") es un lenguaje de secuencias de comandos de alto nivel .

Tcl se usa a menudo junto con la biblioteca de gráficos Tk (Tool Kit) . El paquete Tcl / Tk en ruso a veces se llama "Tak-tikl" (la versión en inglés es "tikl-tok").

Las áreas de aplicación del lenguaje son la creación rápida de prototipos , la creación de interfaces gráficas para programas de consola (paquetes de software), la integración en programas de aplicación, las pruebas . Tcl también se utiliza en el desarrollo web .

Características

En Tcl, los datos de todo tipo, incluido el código del programa, se pueden manipular como cadenas. Esto lo convierte en un lenguaje con soporte natural para la metaprogramación . Este paradigma de programación se tuvo en cuenta durante el desarrollo y evolución del lenguaje.

Un programa Tcl consta de comandos separados por saltos de línea o punto y coma. Cada comando consta de un conjunto de campos separados por espacios. El primer campo debe ser el nombre del comando y los campos restantes opcionales son los argumentos pasados ​​a ese comando. El comando devuelve un valor, a veces vacío. Es decir, como Lisp , Tcl usa notación de prefijos.

No hay palabras clave como tales: el concepto de comando en Tcl es similar al concepto de procedimiento o función en los lenguajes de programación comunes. Esto también se aplica a las construcciones de control de lenguaje. Combinado con la sintaxis elemental, esto hace que el lenguaje sea bien extensible, incluyendo librerías escritas en otros lenguajes como C / C++ o Java .

Tcl también tiene un modelo de control de programa basado en eventos bien implementado . Los eventos pueden ser generados por un temporizador, cuando aparecen datos en un canal, cuando cambia el valor de una variable, cuando finaliza un programa externo, o simplemente cuando el usuario trabaja con la interfaz Tk. Puede configurar sus propios eventos y administrarlos.

Como la mayoría de los lenguajes de secuencias de comandos modernos , Tcl contiene herramientas avanzadas para trabajar con expresiones regulares, funciona con matrices asociativas y otras estructuras de datos dinámicas.

Tcl básico no soportaba programación orientada a objetos hasta la versión 8.6, sin embargo, debido a la facilidad de extender la sintaxis del lenguaje, existen muchas extensiones de Tcl con mecanismos orientados a objetos, implementadas como librerías de enlaces en C o en el mismo Tcl. Antes de la versión 8.5, los más comunes eran: incr Tcl , XOTcl y Snit [3] . Otra implementación de los mecanismos OOP que utilizan el propio Tcl, incluida en la biblioteca estándar de Tcl [4] , es la biblioteca STOOOP [5] . Desde la versión 8.5 existe una nueva implementación de OOP para Tcl, TclOO , incluida desde la versión 8.6 en el núcleo del lenguaje [6] [nota 1] :

extensión implementado en caracteristicas del modelo utilizado
XOTcl C potente sistema de objetos con definición dinámica de clases y métodos, cercano a CLOS
aumentar Tcl C POO en estilo C++ , ampliado con la introducción de configuradores
mocoso tcl implementación del modelo de objetos basada en la delegación , no en la herencia
INCORRECTAR tcl OOP en un estilo lo más cercano posible a C ++, también se ha introducido un mecanismo de cambio de clase
TclOO [7] C Un sistema compacto pero potente orientado a objetos que se puede usar tanto directamente como marco para construir modelos OOP avanzados.

Los espacios de nombres se admiten en el nivel básico del idioma. Al implementar mecanismos OOP en Tcl, se utiliza soporte para la jerarquía de anidamiento de espacios de nombres en este lenguaje [8] .

Tcl es fácil de programar en un estilo funcional : proporciona mecanismos tales como funciones de orden superior y abstracciones de funciones [9] , aunque Tcl rara vez se usa de esta manera. Aquí hay un ejemplo de cómo se pueden componer dos funciones :

proc o { f g x } { $f [ $g $x ]}

En la versión 8.5, Tcl también introdujo el comando de aplicación , que hace que este estilo de programación sea mucho más fácil.

Aquí hay un ejemplo de su uso de la documentación oficial:

mapa de proceso { lista lambda } { establecer resultado {} para cada elemento $ lista { resultado lappend [aplicar $lambda $elemento ] } devolver $resultado } map { x { return [ longitud de cadena $x ] : $x }} { a bb ccc dddd }

el resultado de este ejemplo será

1:a 2:bb 3:ccc 4:dddd

Historia

El lenguaje fue desarrollado por John Ousterhout mientras estaba en la Universidad de California en Berkeley. El objetivo original era crear un lenguaje universal para incrustar en aplicaciones de consola . Después de esto, Ousterhout amplió su lenguaje con herramientas para crear interfaces gráficas  : así nació Tcl / Tk. [diez]

Durante 4 años de desarrollo dentro de los muros de la universidad, la comunidad Tikl ha crecido a varios cientos de miles de programadores. En 1993, se desarrolló la primera extensión orientada a objetos, incr Tcl .

En 1994, Ousterhout se convirtió en ingeniero principal del proyecto SunScript. Durante los siguientes 4 años, convirtiéndose en uno de los proyectos de Sun Corporation , Tikl no solo siguió siendo un sistema de libre distribución , sino que también mejoró significativamente, convirtiéndose en multiplataforma .

Richard Stallman asestó un golpe significativo a la popularidad del lenguaje cuando publicó en septiembre de 1994 en varios grupos de noticias la recomendación "Por qué no debería usar Tcl" [11] . En él, se basa en las afirmaciones de que "Tcl no está diseñado como un lenguaje de programación serio" y "Tcl tiene una sintaxis particular que atrae a los piratas informáticos debido a su simplicidad. Pero la sintaxis de Tcl parece extraña para la mayoría de los usuarios". , y también en relación con la promoción de Emacs Lisp , emitió un veredicto: "el proyecto GNU no va a utilizar Tcl en el software GNU" . Además de las afirmaciones subjetivas sobre el diseño del lenguaje, Stallman señaló un inconveniente objetivo en ese momento: el bajo rendimiento.

Sin embargo, el crecimiento en el número de desarrolladores que utilizan activamente tikl ascendió al 600 % durante este período.

En 1998, debido al auge de Java y la feroz competencia asociada con él, la corporación ya no pudo prestar la misma atención a tikl. John Ousterhout deja Sun para formar (con el apoyo de Sun) Scriptics, continuando el desarrollo de la tecnología Tcl/Tk [12] [13] . Fue una de las primeras empresas de software comercial en centrarse en el software libre .

En marzo de 1998, Ousterhout escribió el ya clásico artículo “Scripting: High-Level Programming for the 21st Century” [14] , en el que denominó lenguajes de scripting lenguajes de integración de sistemas, porque están enfocados principalmente a trabajar con objetos del sistema operativo. entorno, y no con datos elementales. Esto permite, sin escribir miles de líneas de código , “pegar” tales objetos en uno solo con dos o tres comandos.

En el mismo año, ganó dos importantes premios por el desarrollo del lenguaje Tcl. El primero es el ACM Software System Award, que reconoce "el software más significativo". El premio ha honrado previamente a sistemas fundamentales como la pila de protocolos TCP/IP , la primera hoja de cálculo , la primera base de datos relacional , la World Wide Web , Unix , PostScript y Smalltalk . El segundo es el premio anual USENIX Software Tools User Group (STUG) en reconocimiento al software destacado.

En 1999, se lanzó Tcl 8.0; en esta implementación, apareció por primera vez la compilación a bytecode , lo que permitió aumentar la velocidad en 6 veces [15] . La próxima versión de Tcl 8.1 presenta compatibilidad completa con Unicode e introduce subprocesos múltiples por primera vez . En relación con este comunicado, Ousterhout declaró:

“En general, 8.1 mueve Tcl a una nueva categoría, ya que ahora se puede usar para aplicaciones de servidor. C, C++ y Java todavía se pueden usar para construir las partes críticas de rendimiento de las aplicaciones, mientras que Tcl se puede usar para integrar y construir componentes front-end”. [dieciséis]

En 2000, Scriptics pasó a llamarse Ajuba Solutions y luego fue comprada por Interwoven, que no estaba interesada en trabajar con software libre . En este sentido, se trasladó el desarrollo de Tcl a la comunidad de programación. Así se conformó el Core Team de Tcl .

En la 9.ª Conferencia Tcl/Tk en Vancouver , se presentó el sistema de archivos virtual StarKit , que proporciona una forma nueva y fácil de usar para distribuir programas Tcl.

Sintaxis Tcl

Guion comandos separados por saltos de línea o punto y coma (;). Equipo palabras separadas por espacios. commandName argumento1 argumento2 argumentoN

La primera palabra es el nombre del comando, el resto son sus argumentos. Cualquier argumento puede ser reemplazado por otro comando encerrado entre corchetes. Los argumentos entre llaves se pasan al comando tal cual, como un solo argumento.

Símbolos de especial significado

  • $  - Provoca la sustitución del valor de la variable.
  • []  - Provoca la sustitución del resultado de la ejecución del comando dentro de los corchetes.
  • ""  - agrupa los argumentos en uno con la sustitución de valores variables.
  • {}  - agrupa los argumentos en uno sin sustituir los valores de las variables.
  • \  - escapa al carácter siguiente o provoca la sustitución del carácter de control.
  • #  - el comienzo de un comentario de una sola línea, debe estar después de un carácter de nueva línea sin escape o ";" (punto y coma).

Notas sobre el proceso de análisis del script

  • La división en palabras, la sustitución de valores de variables y los resultados de la ejecución del comando se realizan en un solo paso de comando.
  • Todos los caracteres dentro de los corchetes {} y las comillas "" se tratan como una sola palabra.
  • La primera palabra del comando se trata como un procedimiento integrado o definido.

Ejemplos de comandos

  • La asignación se indica con la palabra conjunto , no con el signo igual.

Sintaxis:

establecer valor variable

Ejemplo:

establecer un 2 conjunto b 3
  • Un comentario se indica con #

Sintaxis:

# texto del comentario

Ejemplo:

# es un comentario
  • La salida (impresión) se implementa mediante el comando puts

Sintaxis:

poner expresión

Ejemplo:

pone "¡Hola! Soy yo". pone 123 pone $a pone "b = $b"
  • El ciclo while se implementa con el comando while , que toma dos argumentos. La primera es una expresión Tcl (las expresiones en realidad están escritas en un lenguaje miniaturizado de matemáticas y comparaciones de estilo C ). El segundo argumento es el script que se ejecutará en cada iteración del . Por lo general, se coloca entre llaves para evitar la ejecución inmediata.

Sintaxis:

mientras que { Tcl_Expression_With_Boolean_Value } { TclCommand otroTclCommand ... ... }

Ejemplo:

mientras que { $x < 10 } { pone $x incrementa x }
  • comando condicional

Sintaxis:

si { Expresión_Tcl_Con_Valor_Booleano } { Comando tcl }

Ejemplo:

si { $x < 0 } { establecer x 0 }
  • Comando de rama

Ejemplo:

cambiar - globo -- $var { { ver } - { vio } - { visto } { pone "¡Todo significa lo mismo!" } }
  • El comando puede no tener argumentos, por ejemplo
personas con discapacidad

simplemente devuelve el directorio de trabajo actual. y el equipo

establecer wdir [ contraseña ]

almacena el nombre del directorio actual en la variable wdir .

  • El comando puede devolver una lista, por ejemplo
patrón global

devolverá una lista de nombres de archivos en el directorio actual que coincidan con el patrón Pattern .

Procedimientos

Los procedimientos se definen de la siguiente manera

proc ProcedimientoNombre { Lista de argumentos } { }

Matrices asociativas

El siguiente fragmento de código creará e inicializará una matriz asociativa (también llamada mapa, diccionario o hash en otros idiomas).

set capital ( Francia ) Paris set capital ( Italia ) Roma set capital ( Alemania ) Berlin set capital ( Polonia ) Varsovia set capital ( Rusia ) Moscú set capital ( España ) Madrid

Para consultar y mostrar uno de los valores de una matriz asociativa, utilice

pone $capital ( Italia )

Se puede obtener una lista de todos los países (claves de matriz) con el comando

matriz nombres capital

El resultado no se ordenará porque las matrices Tcl se basan en tablas hash .

Polonia España Rusia Alemania Italia Francia

La clasificación se puede hacer con el comando

lsort [matriz de nombres mayúsculas ]

Para hacer referencia a una matriz (pasarla como referencia), use el nombre de la variable que la contiene:

proc demo arrName { upvar 1 $arrName arr ; # vincular la referencia a un nombre local #hacer algo con arr }

Para acceder a una matriz por valor, use array get o array set . Por ejemplo, para copiar una matriz a otra:

conjunto de matriz Newarr [matriz obtener Oldarr ]

Tcl 8.5 introdujo matrices pasadas por valor - diccionarios ( dict ).

Para convertir una variable escalar en una matriz y viceversa, elimine la variable existente con el comando unset .

Alcance variable

De forma predeterminada, solo las variables definidas en el procedimiento son visibles dentro del procedimiento. Fuera de la definición de un procedimiento, sus variables no son accesibles excepto a través del mecanismo de paso de parámetros. Es posible tener variables en un procedimiento con el mismo nombre que en el programa principal, mientras que los valores de estas variables diferirán, de hecho serán variables diferentes. Para cambiar este comportamiento se utilizan los comandos global o upvar .

Ejemplos

¡Hola Mundo!

Hola, el programa mundial se ve así .

pone "¡Hola mundo!"

más o menos

pone { ¡ Hola mundo ! _ }

Matrices

Acceder a los elementos de la matriz

Visualización del valor del elemento de matriz OldArray (precisión), cuyo nombre (matriz) viene dado por la nueva variable NewArray

establecer NewArray OldArray pone [establecer $ { NewArray }( precisión )] Adición de números en una matriz

Método (A) - Adición usando el ciclo 'foreach'

establecer números { 1 2 3 4 5 6 7 8 9 10 } establecer resultado 0 para cada número $números { establecer resultado [expr { $resultado + $número }] } pone $resultado

Método (B): una forma mucho más elegante usando el comando 'unirse'

establecer números { 1 2 3 4 5 6 7 8 9 10 } pone [expr [ unir $números + ]] Listado del contenido de una matriz

La matriz tcl_platform contiene información sobre las propiedades de la plataforma en la que se ejecuta Tcl. Se puede obtener una lista de nombres de propiedades con

nombres de matriz tcl_platform

El siguiente fragmento los muestra junto con sus valores:

foreach i [ nombres de matriz tcl_platform ] { pone "$i = $tcl_platform($i)" }

Si las propiedades deben ordenarse

foreach i [ lsort [ nombres de matriz tcl_platform ] ] { pone "$i = $tcl_platform($i)" }

Aquí se demuestra el anidamiento de comandos. Se pueden anidar a cualquier profundidad. Se puede lograr un resultado similar con el comando parray [17] introducido en Tcl 8.5.

Intersección de conjuntos

El procedimiento de filtro devuelve aquellos elementos de la lista para los cuales el script se evalúa como VERDADERO:

filtro de proceso { guión de lista } { establecer res {} foreach e $lista {if {[uplevel 1 $script $e ]} { lappend res $e }} return $res }

El comando de nivel superior 1 evalúa una expresión en el contexto en el que se llama al filtro de palabras .

El procedimiento in  es una notación abreviada para incluir conjuntos:

proc en { lista e } { expr {[ lsearch - $lista exacta $e ] >= 0 } }

Examen:

% filtro { a b c } { en { b c d }} b c

Factoriales

proceso ! x {expr { $x < 2 ? 1 : $x * [ ! [ incr x - 1 ]]}}

Esto demuestra que el nombre del comando puede ser cualquier cadena, así como el operador ?: conocido en otros idiomas .

Implementación, distribuciones, herramientas

Tcl es un lenguaje interpretado , es decir, los programas Tcl están listos para ejecutarse sin compilación ni enlace .

El intérprete de Tcl ha sido portado a la mayoría de las plataformas comunes [18] . Se distribuye bajo una licencia libre , sin copyleft , lo que permite su uso sin restricciones en el desarrollo de aplicaciones propietarias , así como para crear sistemas derivados propietarios. Los desarrolladores se refieren a ella como similar a BSD , aunque, en comparación con la licencia BSD, la licencia Tcl impone menos restricciones.

Implementación

Actualmente, el trabajo en el núcleo del lenguaje Tcl está siendo llevado a cabo por un grupo de desarrolladores [19] llamado Tcl Core Team [20] . Las últimas versiones del traductor de Tcl y las bibliotecas principales están disponibles en el repositorio de SourceForge.net , consulte la lista de proyectos de sourceforge incluidos en la distribución principal de Tcl/Tk [21] .

El traductor Tcl compila el programa en una representación intermedia - bytecode , y luego lo interpreta. A diferencia, por ejemplo, de Python , esta representación intermedia no se guarda en disco, el programa solo se puede almacenar en código fuente, posiblemente empaquetado en un módulo StarKit o utilizando algún otro contenedor . Dependiendo de las opciones de compilación, el intérprete de Tcl puede o no admitir subprocesos múltiples .

Si bien la mayoría de los libros de texto de Tcl para principiantes dicen algo como "Tcl tiene solo un tipo de variable, la cadena", la realidad es que los traductores de Tcl han estado haciendo las cosas de manera diferente durante mucho tiempo. Internamente, Tcl utiliza un sistema de tipo dinámico con conversión automática de cadenas transparentes.

Tcl está incluido en casi todas las distribuciones de Linux . Microsoft Windows requiere un paquete de instalación independiente.

La versión Tcl 8.4 se diferencia de la anterior con nuevas características (optimización de código de 64 bits, VFS, adiciones en términos de introspección ) y cierto aumento de rendimiento debido a la optimización del trabajo con bytecode.

Las nuevas funciones añadidas en la versión 8.1 (como la compatibilidad con subprocesos múltiples, las instalaciones de internacionalización y el manejo de caracteres Unicode) redujeron la velocidad de Tcl en aproximadamente un 19 % en comparación con la versión 8, que dio un salto en la velocidad. Los desarrolladores de 8.4 han hecho todo lo posible para maximizar la velocidad de ejecución del programa, para garantizar que no solo funcionen más lento, sino incluso más rápido que cuando apareció la versión 8.0. Este objetivo se logró para casi todas las herramientas Tcl y Tk: la versión 8.4 es en promedio 8 veces más rápida que la versión 7.6 [15] .

La versión actual de TCL es 8.6.

Implementaciones alternativas y dialectos

Hay implementaciones alternativas de Tcl para máquinas virtuales populares de uso general . Este es un intérprete de Java : Jacl [22] (última versión de 2008) y el proyecto Eagle [23] , que implementa la mayoría de los comandos Tcl 8.4 para CLR (se encuentran disponibles compilaciones para .NET 4.0 y 2.0). Se están realizando experimentos para traducir programas Tcl al código de la máquina virtual Parrot , que se está desarrollando para la sexta versión de Perl [24] .

Para la programación de sistemas integrados y la integración en aplicaciones, se ha desarrollado un dialecto especial de Tcl: Jim [25] [26] . Este es un intérprete que implementa un gran subconjunto de Tcl, ampliado con mecanismos adicionales de programación funcional y orientada a objetos , y ocupa menos de 100 kilobytes en forma compilada.

Otro dialecto de Tcl es el lenguaje de programación móvil Hecl [27] , desarrollado por David Welton e implementado en Java ( J2ME ) [28] [29] . En cuanto a la plataforma Android , el soporte de Tcl en ella (junto con otros lenguajes de secuencias de comandos) es proporcionado por: capa de secuencias de comandos SL4A [30] ; también hay una implementación nativa de Tcl para este sistema operativo llamada AndroWish [31] .

Distribuciones

Todas las distribuciones enumeradas a continuación se distribuyen libremente y se ensamblan a partir de componentes que tienen una u otra licencia libre . La mayoría de ellos son multiplataforma (excepto WinTclTk y Tcl/Tk Aqua ), aunque en los sistemas Unix Tcl/Tk suele formar parte de la distribución del sistema operativo .

  • Tcl activa [32] La distribución más utilizada de Tcl. Al igual que otros productos de la empresa, ActiveState incluye un gran conjunto de bibliotecas y extensiones. En las versiones de Windows, incluye herramientas de integración de WSH . No existen herramientas que faciliten la vida del programador. La empresa vende el paquete TclDevKit, que contiene herramientas para depurar y crear programas independientes (este último basado en la tecnología StarKit ) y Komodo , un IDE  universal para lenguajes de scripting que incluye herramientas de programación visual para formularios Tk .
  • WinTclTk [33] Más compacta que ActiveTcl, una distribución enfocada a trabajar con XOTcl  , una extensión orientada a objetos de Tcl. La lista de bibliotecas incluidas en él es algo más estrecha que en ActiveTcl, pero el conjunto básico está presente aquí. Esta distribución incluye Tloona IDE [34]  , un entorno de desarrollo tradicional, y XOTclIde [35] , un entorno  de programación orientado a objetos al estilo Smalltalk , ambos con depuradores. También está disponible gratuitamente en el sitio del desarrollador un paquete para crear un solo archivo TkWrapper ejecutable basado en FreeWrap [36]  , una tecnología alternativa a StarKit basada en una compresión ZIP simple. La última versión hasta la fecha es la 8.5.6 (3 de diciembre de 2009, Tcl 8.5.6).
  • Kit Tcl [37] Es Tcl/Tk con un conjunto básico de bibliotecas en un ejecutable compacto. La distribución fue creada utilizando la tecnología StarKit . Contiene la biblioteca MetaKit que le permite manipular el contenido de este archivo. Otra distribución popular de Tcl en un archivo es eTcl [38] . La distribución dqkit [39] se basa en principios similares  : un ensamblaje alternativo conocido como "TclKit con esteroides", hay varias opciones que difieren en la composición de las bibliotecas, compatibilidad con subprocesos múltiples, etc.
  • MiTcl [40] Un entorno de desarrollo integrado (IDE) completo en Tcl, incluida una distribución de entorno de lenguaje. Tiene la capacidad de generar aplicaciones independientes en formato StarKit . La versión actual es 1.0 Build 8 (18 de junio de 2012) para Win32 y Win64 con Tcl 8.5.11 integrado en el sistema. Actualmente no es de código abierto .
  • androdeseo [31] Entorno para ejecutar scripts Tcl/Tk y vincular una aplicación tcl/tk a un archivo apk para su ejecución en Android

Aplicación

Tcl, junto con Perl y Python , se ha convertido en uno de los tres lenguajes clásicos de secuencias de comandos de propósito general. Esta trinidad aparece no solo como una lista de distribuciones libres compiladas en ActiveState , sino también, por ejemplo, como lenguajes en los que (además del dialecto PL/pgSQL ) se pueden escribir disparadores y procedimientos almacenados del popular servidor de base de datos PostgreSQL .

Tcl como lenguaje integrable ha encontrado aplicación en el campo de CAD ( CAD | CAM | CAE ) [41] [42] . Se utiliza, por ejemplo, como sintonizador de base de datos en el posprocesador Unigraphics . Además, es el lenguaje de automatización e integración de facto en todos los principales paquetes de software de diseño de chips ( FPGA y ASIC ).

Uso en desarrollo web

En la programación web, Tcl generalmente se usa junto con el servidor web AOLServer o uno de los servidores web FastCGI "ligeros" como lighttpd . Para integrar Tcl con Apache , existe el módulo Rivet [43] .

Bajo el control de AOLServer, en particular, OpenACS [44]  es un sistema de gestión de contenido para sitios web con rica extensibilidad en el lenguaje Tcl, XOtcl extendido o proyecto abierto [45]  - un sistema de trabajo en grupo con una interfaz web .

También existen proyectos como TclHttpd [46] y su sucesor, Wub [47] , que son frameworks web completos . Basado en la nueva extensión de objetos del lenguaje TclOO, se está desarrollando el marco web Woof (Web Oriented Object Framework) [48] . Un ejemplo de un CMS para TclHttpd es Ucome [49] .

Además de usarse como lenguaje de implementación de aplicaciones web, Tcl se puede usar como lenguaje de secuencias de comandos para ampliar las aplicaciones existentes. Por ejemplo, los módulos para el bot Eggdrop IRC están escritos en él [50] [51] .

Ventajas y desventajas

La desventaja de las primeras versiones de Tcl/Tk fue, sin duda, el bajo rendimiento. Las versiones anteriores a la 8 utilizaron una interpretación directa del código fuente, sin embargo, el uso de bytecode resolvió este problema. Ahora, en términos de velocidad, Tcl no es muy diferente de PHP , aunque es notablemente inferior a lenguajes de secuencias de comandos como, por ejemplo, Python o Lua . Se recomienda ejecutar secciones de código complejas o de tiempo crítico como módulos externos en C / C++ .

Tcl/Tk tiene una sintaxis desconocida para los programadores en lenguajes "tradicionales". Está más cerca de la sintaxis de shell estándar de Unix . Esta sintaxis se puede modificar arbitrariamente (como en otros "lenguajes de programación programables" como Forth [nota 2] o Common Lisp ). Esto puede ser una ventaja para un programador individual o un pequeño grupo de programadores, pero hace que Tcl/Tk no sea adecuado para su uso como lenguaje de propósito general para el desarrollo industrial. Aunque la presencia de extensiones estandarizadas reduce la gravedad de este problema. Tcl también se puede utilizar en grandes proyectos dentro de su "nicho ecológico" (scripts embebidos, componentes "pegados", programación WEB).

Aunque Tcl tiene todas las propiedades de un lenguaje funcional , su intérprete anterior a la versión 8.6 no realizaba optimización de recursión de cola , lo que dificultaba el uso de un estilo puramente funcional y reducía su efectividad. Sin embargo, la flexibilidad del lenguaje hace posible eludir este problema implementando una apariencia de tal optimización a un alto nivel [52] . Finalmente, el comando tailcall , que apareció en la versión de prueba 8.6, le permite usar la recursividad de cola sin ningún problema.

La integración más cercana de Tcl con la biblioteca de gráficos Tk , que a menudo se usa en combinación con otros lenguajes de programación, es una ventaja indudable de Tcl. Para crear contenedores de GUI para programas de consola o paquetes de programas de consola, Tcl puede ser la mejor opción.

Influencia

Aunque no es un lenguaje de programación muy utilizado, Tcl, junto con lenguajes (anteriores) como Lisp y Smalltalk , ha tenido una notable influencia en la programación. Se convirtió en el primer lenguaje centrado en la facilidad de integración en las aplicaciones [53] .

La facilidad de uso de la biblioteca de widgets gráficos de Tk no tenía paralelo y se hizo popular en otros lenguajes de secuencias de comandos de propósito general además de Tcl . Tkinter sigue siendo la herramienta predeterminada para crear aplicaciones GUI en Python . También hay bibliotecas de enlace Tk para Perl [ 54] (Tkx) y Ruby [53] .

SQLite , un sistema de gestión de bases de datos SQL  ligero e integrable , se desarrolló originalmente como una extensión de Tcl [53] .

Véase también

Enlaces

En ruso

Artículos y reseñas Blogs dedicados a TCL

Libros

En ruso

original: Brent Welch, Ken Jones, Jeffrey Hobbs "Programación práctica en Tcl y Tk (4.ª edición)", ISBN 0-13-038560-3 , 2003 ( versión electrónica [55] )
  • Moskvin PV "ABC TCL", ISBN 5-93517-130-9
  • Alexey Petrovsky, TCL (lenguaje de comandos de herramientas), ISBN 5-901321-16-2

En inglés

  • Cliff Flynt. Tcl/Tk: una guía para desarrolladores . - 3. - Morgan Kaufmann, 2012. - 817 p. - (La Serie Morgan Kaufmann en Ingeniería de Software y Programación). — ISBN 9780123847171 .
2.ª edición: "Tcl/Tk, segunda edición: guía para desarrolladores", ISBN 1-55860-802-8 , 2003 Primera edición: Tcl/Tk para programadores reales, ISBN 0-12-261205-1
  • John K. Ousterhout, Ken Jones "Tcl y el kit de herramientas DTk (2.ª edición)", ISBN 0-321-33633-X , 2009
  • Bert Wheeler " Libro de cocina de programación Tcl / Tk 8.5 ", ISBN 1-84951-298-1 , 2011
  • Wojciech Kocjan, Piotr Beltowski. Tcl 8.5 Programación de Redes . - Packt Publishing, Limited, 2010. - 588 p. — ISBN 9781849510967 .
  • Mark Harrison, Michael McLennan, Programación eficaz de Tcl/Tk. Escribir mejores programas en Tcl y Tk, ISBN 0-201-63474-0
  • J. Adrian Zimmer "Tcl/Tk para programadores", ISBN 0-8186-8515-8
  • Salvatore Sanfillipo "Tcl Wise. Guía del lenguaje de programación Tcl" ( Primeros 9 capítulos en línea Archivado el 29 de agosto de 2013 en Wayback Machine )
  • Paul Raines, Jeff Tranter "Tcl / Tk en pocas palabras: una referencia rápida de escritorio", ISBN 1-56592-433-9
  • David Maggiano "Programación CGI con Tcl", ISBN 0-201-60629-1
  • JM Ivler, Kamran Husain, "Recurso para desarrolladores de Cgi: programación web en Tcl y Perl", ISBN 0-13-727751-2

Notas

  1. . Si ninguna de las implementaciones del modelo de objetos le conviene, o está interesado en cómo funciona, puede leer el artículo Creación de comandos de objetos Archivado el 13 de mayo de 2007 en Wayback Machine de  los creadores de SNIT
  2. Una simbiosis interesante de Forth y Tcl dentro del proyecto HolonT . Archivado el 2 de abril de 2012 en Wayback Machine , donde Forth se traduce a código Tcl.
Fuentes
  1. Tcl / Tk 8.6.12 LANZADO  (inglés) - 2021.
  2. https://www.tcl.tk/software/tcltk/8.6.html
  3. Kocjan, Beltowski, 2010 , págs. 62-63.
  4. Biblioteca Tcl estándar (tcllib) . www.tcl.tk. Consultado el 26 de junio de 2016. Archivado desde el original el 6 de octubre de 2014.
  5. Sriram Srinivasan. 7.5 Comparación con Otros Lenguajes OO // Programación Perl Avanzada . — 1ª edición. - O'Reilly , 1997. - ISBN 1-56592-220-4 .
  6. Kocjan, Beltowski, 2010 .
  7. TclOO Archivado el 15 de septiembre de 2018 en Wayback Machine en TclWiki
  8. Clyf Flynt. 8.1.7. Anidamiento de espacios de nombres // Tcl/Tk: una guía para desarrolladores. — 3ra edición. - Waltham, MA: Morgan Kaufmann, 2012. - P. 215. - 792 p. — ISBN 0-12-384717-6 .
  9. ver también Pasos hacia la programación funcional Archivado el 10 de febrero de 2007 en Wayback Machine .
  10. Ver Historia de Tcl Archivado el 10 de junio de 2016 en Wayback Machine .
  11. ¿Por qué no deberías usar Tcl . Fecha de acceso: 14 de mayo de 2007. Archivado desde el original el 4 de febrero de 2012.
  12. Cameron Laird, Katherine Sorez, SunWorld, Estados Unidos. El fundador de Tcl deja Sun por una nueva empresa  // Computerworld. - Sistemas Abiertos , 1998. - No. 07 .
  13. Robert McMillan, SunWorld. Tcl: el camino hacia una nueva vida  // Computerworld. - Sistemas Abiertos , 1998. - N° 36 .
  14. John K. Ousterhout Scripting: Programación de alto nivel para el siglo XXI Archivado el 1 de febrero de 2010 en Wayback Machine  .
    Traducción de este artículo Archivado el 30 de septiembre de 2007 en Wayback Machine  (ruso) en la revista Open Systems, No. 3, 1998
  15. 1 2 ver Tcl Benchmarks Archivado el 21 de mayo de 2007 en Wayback Machine .
  16. Ted Smalley Bowen. Tcl: una variante empresarial  // Computerworld. - Sistemas Abiertos , 1999. - N° 21 .
  17. Documentación de Tcl | parray _ Consultado el 26 de marzo de 2014. Archivado desde el original el 11 de mayo de 2014.
  18. Wiki de TCL | ¿En qué plataformas se ejecuta Tcl ? Consultado el 26 de marzo de 2014. Archivado desde el original el 2 de septiembre de 2013.
  19. Lista de miembros del equipo central de Tcl . Consultado el 14 de mayo de 2007. Archivado desde el original el 2 de mayo de 2007.
  20. Equipo central de Tcl . Consultado el 14 de mayo de 2007. Archivado desde el original el 30 de abril de 2007.
  21. Tcl en SourceForge . Consultado el 14 de mayo de 2007. Archivado desde el original el 16 de mayo de 2007.
  22. El Proyecto Tcl/Java, Jacl . Consultado el 14 de mayo de 2007. Archivado desde el original el 29 de abril de 2007.
  23. The Eagle Project, (Motor lógico generalizado adaptable extensible) . Consultado el 11 de junio de 2011. Archivado desde el original el 2 de octubre de 2011.
  24. partcl. Implementación de tcl dirigida a la máquina virtual de loros Archivado el 22 de mayo de 2011 en Wayback Machine ( blog del proyecto archivado el 24 de agosto de 2011 en Wayback Machine
  25. Steve Bennet. Jim Tcl. Una implementación de Tcl de huella pequeña // Prensa de la Asociación Tcl Actas de la 18ª Conferencia Anual Tcl/Tk de la Asociación Tcl. - Lulu.com, 2011. - S. 94-105 . — ISBN 0578098016 .
  26. El intérprete de Jim. Una implementación pequeña del lenguaje de programación Tcl
  27. hecl.org Archivado el 15 de diciembre de 2010 en Wayback Machine : Hecl - The Mobile Scripting Language
  28. David Welton. Crea una aplicación sencilla con Hecl  // Revista de Software Libre. — Miércoles, 2007-10-31. - Asunto. 20 _ Archivado desde el original el 30 de junio de 2013.
  29. Implementación del lenguaje de programación Hecl Archivado el 10 de agosto de 2013 en Wayback Machine . 
  30. Acerca de la automatización y las secuencias de comandos para Android . "Hacker" (18 de febrero de 2014). Consultado el 26 de junio de 2016. Archivado desde el original el 15 de agosto de 2016.
  31. 12 AndroWish . Tcl/Tk para Android . Fecha de acceso: 3 de diciembre de 2014. Archivado desde el original el 20 de diciembre de 2014.
  32. ActiveTcl. La distribución Tcl estándar de la industria (enlace no disponible) . Consultado el 1 de septiembre de 2013. Archivado desde el original el 21 de agosto de 2009. 
  33. WinTclTk. Distribución Tcl/Tk para Microsoft Windows . Consultado el 5 de junio de 2007. Archivado desde el original el 22 de junio de 2007.
  34. TloonaTcl/Tk IDE . Fecha de acceso: 21 de octubre de 2008. Archivado desde el original el 22 de marzo de 2009.
  35. XOTCLIDE. Entorno de Desarrollo Integrado para XOTcl y Tcl . Consultado el 15 de mayo de 2007. Archivado desde el original el 21 de junio de 2007.
  36. FreeWrap. Construye ejecutables TCL/TK independientes. ¡No se requiere compilador! . Consultado el 15 de mayo de 2007. Archivado desde el original el 29 de junio de 2014.
  37. Tiempo de ejecución de la aplicación Tclkit . Consultado el 14 de mayo de 2007. Archivado desde el original el 23 de mayo de 2007.
  38. ET cl. Distribución de Evolane de Tcl/Tk (enlace no disponible) . Consultado el 1 de septiembre de 2013. Archivado desde el original el 1 de septiembre de 2013. 
  39. dqkit . Consultado el 14 de mayo de 2007. Archivado desde el original el 21 de mayo de 2007.
  40. MiTcl. Potente IDE Tcl/Tk . Consultado el 25 de marzo de 2013. Archivado desde el original el 15 de mayo de 2013.
  41. Historial del software CAD Archivado el 13 de enero de 2010 en Wayback Machine en TclWiki. Archivado el 19 de diciembre de 2006 en Wayback Machine .
  42. Tecnología informática moderna al servicio de Nike, Inc. Archivado el 15 de octubre de 2011 en Wayback Machine en CAD and Graphics Magazine. Archivado el 25 de marzo de 2010 en Wayback Machine , No. 10'2000 .
  43. Rivet: creación de secuencias de comandos web para Tcl'ers . Consultado el 22 de septiembre de 2010. Archivado desde el original el 27 de septiembre de 2011.
  44. OpenACS. El kit de herramientas para comunidades en línea Archivado el 31 de agosto de 2009 en Wayback Machine . 
  45. proyecto abierto. Gestión de proyectos empresariales de código abierto Archivado el 14 de enero de 2010 en Wayback Machine . 
  46. tclhttpd - Servidor web Tcl . Consultado el 30 de enero de 2010. Archivado desde el original el 25 de enero de 2010.
  47. Servidor, cliente y conjunto de herramientas Wub pure tcl HTTP1.1 . Fecha de acceso: 5 de enero de 2010. Archivado desde el original el 28 de abril de 2010.
  48. Guau. Marco de objetos orientado a la web . Fecha de acceso: 30 de enero de 2010. Archivado desde el original el 14 de agosto de 2009.
  49. Ucome. Your Content Management in Tcl Archivado el 10 de febrero de 2014 en Wayback Machine . 
  50. Darryl K. Taft. Lenguaje de programación Tcl: 20 cosas que no sabes . Semana electrónica (31 de enero de 2011). Recuperado: 25 junio 2016.
  51. Instalando un eggdrop en IRC - "Hacker" (21 de agosto de 2000). Consultado el 25 de junio de 2016. Archivado desde el original el 13 de agosto de 2016.
  52. Optimización de llamada de cola Archivado el 11 de marzo de 2007 en Wayback Machine , describe este problema y describe posibles soluciones.
  53. ↑ 1 2 3 Andrew Binstock. Un cuarto de siglo de Tcl . Dr. Dobb's (21 de enero de 2014). Consultado el 25 de junio de 2016. Archivado desde el original el 7 de julio de 2016.
  54. Nancy Walsh. Aprendiendo Perl/Tk . - O'Reilly, 1999. - 392 p. — ISBN 9781565923140 .
  55. primera edición completamente disponible, selectivamente, más reciente