Category talk:Tcl
Tasks Unlikely to get Implemented
This is a short discussion of the tasks that are marked with the omit template. —Dkf 09:14, 21 May 2009 (UTC)
- Tcl's got a grammar, but it only works at the level of the base language syntax, and that's just not a level that Tclers think about that much. (For example, it doesn't tell you anything about
while
, let alone that it has an embedded block of code.)
- This is a specialization of the Parametric Polymorphism task, so all comments there apply here too.
- Need the concept of proof in the language for this, and this is really an area that Tcl doesn't address. The formal way to fix it is to write a theorem prover in Tcl, but that'd be a ridiculous amount of work.
- Tcl doesn't have static typing, making this task ridiculously trivial/non-applicable. Note also that the task itself states that it only applies to languages with static typing.
Language features
Tcl uses a mixture of pass-by-value and pass-by-reference, and is very good at simulating pass-by-name too. The base language semantics are strictly pass-by-value; this was how everything was done up to Tcl 7.6, and when combined with the fact that it was also string based, it gave the language a (deserved) reputation for being slow. In Tcl 8.0 the language implementation was switched to pass-by-reference, with the entities being semantically immutable objects (the actual code is more nuanced than that, of course); that was a major part of why Tcl sped up with that version. The pass-by-name support is through the upvar
command, which allows the looking-up of a variable in one scope and aliasing it to another variable in the current scope. —Dkf 10:16, 31 May 2009 (UTC)
I've selected these features:
expression=dynamic
- We use dynamic typing in
expr
.
compat=duck
- We say it's a
ducklist if it supports the operations of aducklist.
checking=dynamic
- Our type checks are applied at runtime only. That's when they are enforced strictly.
parampass=value
- We always pass parameters by value. We simulate pass-by-reference by passing handles/names and pass-by-name with the help of
upvar
.
safety=safe
- The language, especially in a safe interpreter, has no unsafe operations at all.
paradigms=Imperative, Object-oriented, Event-driven, Reflective, Concurrent
- Tcl supports all of these handily enough. With more detail/justification:
Concurrent
- The Thread extension is long-established.
Event-driven
- While Tk has always been event driven, Tcl has been since 7.5 or 7.6 when it gained the event loop from Tk.
Imperative
- Tcl is definitely an imperative language.
OO
- Tcl supports this through many extensions, and natively from 8.6.
Reflective
- Tcl's had introspection for ages; it's vital for the language's self-tests.
We need to check whether these features are enough; if not, we should update the Language template... —Donal Fellows 12:26, 1 June 2009 (UTC)