| advertise add site services publishers database health videos | ![]() | about toolbar stats live show health store more stuff JOIN/LOGIN |
Solus TCL Contact Lenses imperialoptical.com |
For other uses, see Tcl (disambiguation).
Tcl (originally from "Tool Command Language", but conventionally rendered as "Tcl" rather than "TCL"; pronounced as "tickle" or "tee-cee-ell"[2]) is a scripting language created by John Ousterhout[3]. Originally "born out of frustration"[4]—according to the author—with programmers devising their own (poor quality) languages intended to be embedded into applications, Tcl gained acceptance on its own. It is commonly used for rapid prototyping, scripted applications, GUIs and testing. Tcl is used on embedded systems platforms, both in its full form and in several other small-footprinted versions. Tcl is also used for CGI scripting and as the scripting language for the Eggdrop bot. The combination of Tcl and the Tk GUI toolkit is referred to as Tcl/Tk.
[edit] HistoryThe Tcl programming language was created in the spring of 1988 by John Ousterhout while working at the University of California, Berkeley.
Tcl conferences and workshops are held in both the United States and Europe. [edit] FeaturesTcl's features include
Tcl did not originally support object oriented syntax before 8.6 (8.6 provides an OO system in Tcl core), so OO functionality was provided by extension packages, such as incr Tcl and XOTcl. Even purely scripted OO packages exist, such as Snit and STOOOP (simple tcl-only object-oriented programming). [edit] Syntax and Fundamental SemanticsA Tcl script consists of several command invocations. A command invocation is a list of words separated by whitespace and terminated by a newline or semicolon. word0 word1 word2 ... wordN The first word is the name of a command, which is not built into the language, but which is in the library. The following words are arguments. So we have: commandName argument1 argument2 ... argumentN Practical example, using the puts command which outputs a string, adding a trailing newline, by default to the stdout channel: puts "Hello, world!" Variables and the results of other commands can be substituted inside strings too, such as in this example where we use set and expr to store a calculation result in a variable, and puts to print the result together with some explanatory text: # Good style would put the expression (1+2+3+4+5, in this case) inside {curly braces} set sum [expr 1+2+3+4+5] puts "The sum of the numbers 1..5 is $sum." Formally, words are either written as-is, with double-quotes around them (allowing whitespace characters to be embedded), or with curly-brace characters around them, which suppresses all substitutions inside (except for backslash-newline elimination). In bare and double-quoted words, three types of substitution occur (once, in a single left-to-right scan through the word):
From Tcl 8.5 onwards, any word may be prefixed by “{*}” to cause that word to be split apart into its constituent sub-words for the purposes of building the command invocation (similar to the “,@” sequence of Lisp's quasiquote feature). As a consequence of these rules, the result of any command may be used as an argument to any other command. Also, there is no operator or command for string concatenation, as the language concatenates directly. Note that, unlike in Unix command shells, Tcl does not reparse any string unless explicitly directed to do so, which makes interactive use more cumbersome but scripted use more predictable (e.g. the presence of spaces in filenames does not cause difficulties). To summarize: there is one basic construct (the command) and a set of simple substitution rules. The single equality sign (=) for example is not used at all, and the double equality sign (==) is the test for equality, and even then only in expression contexts such as the The majority of Tcl commands, especially in the standard library, are variadic, and the Tcl is not statically typed: each variable may contain integers, floats, strings, lists, command names, dictionaries, or any other value; values are reinterpreted (subject to syntactic constraints) as other types on demand. However, values are immutable and operations that appear to change them actually just return a new value instead. [edit] Interfacing with other languages
Tcl interfaces natively with the C language. This is because it was originally written to be a framework for providing a syntactic front-end to commands written in C, and all commands in the language (including things that might otherwise be keywords, such as if or while) are implemented this way. Each command implementation function is passed an array of values that describe the (already substituted) arguments to the command, and is free to interpret those values as it sees fit. Digital logic simulators often include a Tcl scripting interface for simulating Verilog, VHDL and SystemVerilog hardware languages. Tools exist (e.g. SWIG, ffidl) to automatically generate the necessary code to connect arbitrary C functions and the Tcl runtime, and Critcl does the reverse, allowing embedding of arbitrary C code inside a Tcl script and compiling it at runtime into a DLL. [edit] C++ InteroperabilityMain article: C++/Tcl [edit] Java InteroperabilityMain article: Tcl/Java [edit] Extension packagesThe Tcl language has always supported extension packages, which provide additional functionality (such as a GUI, terminal-based application automation, database access, etc.) [edit] TkMain article: Tk (framework) The most popular Tcl extension is the Tk toolkit, which provides a graphical user interface library for a variety of operating systems. Each GUI consists of one or more frames. Each frame has a layout manager. [edit] Tile/TtkTile/Ttk is a styles and theming widget collection which can replace most of the widgets in Tk with variants which are truly platform native through calls to an operating system's API. Themes covered in this way are Windows XP, Windows Classic, Qt (which hooks into the X11 KDE environment libraries) and Aqua (Mac OS X). A theme can also be constructed without these calls using widget definitions supplemented with image pixmaps. Themes created this way include Classic Tk, Step, Alt/Revitalized, Plastik and Keramik. Under Tcl 8.4, this package is known as Tile, while in Tcl 8.5 it has been folded into the core distribution of Tk (as Ttk). [edit] Itcl/IncrTclItcl is an object system for Tcl, and is normally named as [incr Tcl] (that being the way to increment in Tcl, similar in fashion to the name C++). [edit] TcllibTcllib is a set of scripted packages for Tcl that can be used with no compilation steps. [edit] DatabasesTcl Database Connectivity (TDBC), part of Tcl 8.6, is a common database access interface for Tcl scripts. It currently supports drivers for accessing MySQL, ODBC, PostgreSQL and SQLite databases. More are planned for the future. Access to databases is also supported through database-specific extensions, of which there are many available.
[edit] See also
[edit] Software written in Tcl[edit] OO libraries[edit] Extensions (libraries)[edit] Footnotes
[edit] References
[edit] External links
| ||||||||||||||||||||||||||||||||||||||||||||
| ↑ top of page ↑ | about thumbshots |