Open Source im professionellen Einsatz

Die Features der neuen Tcl/Tk-Version 8.4

Schneller, höher, weiter

Sie ist schneller als die Vorgängerversion und mit neuen Widgets und vielen Verbesserungen unter der Oberfläche ausgestattet: Seit Mitte September ist Tcl/Tk 8.4 fertig. Spinbox, Labelframe und Panedwindow, Undo-Fähigkeit im Text-Widget und besseres Handling von Listen führen die Feature-Liste an.

Am 18. September war es so weit: Jeff Hobbs konnte das Release Announcement zu Tcl/Tk 8.4 versenden. Neben vielen Bugfixes für alle Plattformen, MacOS-X-Unterstützung und 64-Bit-Support bietet die neue Version eine ganze Reihe neuer Features, die für den Einsatz unter Linux interessant sind.

An der Basis

Änderungen an Tcl fallen auf den ersten Blick nicht so stark auf wie ein neues Widget in Tk - aber gerade an der Basis hat sich einiges getan. Eine wichtige Verbesserung kommt ohne neues Kommando aus: Tcl 8.4 ist schneller geworden, in einigen Fällen ist es doppelt so schnell wie die Vorgängerversion. Die neue Version übersetzt mehr Kommandos in Bytecode und führt ihn auch schneller aus als bisher. Besonders bei Schleifen mit »for« oder »while« fällt das neue Tempo auf, aber auch Operation mit Listen sind schneller.

Bei vielen Kommandos wurde die Syntax erweitert, es sind neue Optionen und Parameter hinzugekommen. Einige Befehle sind gänzlich neu. Tabelle 1 fasst die wesentlichen Änderungen und Neuerungen zusammen. Viel Feinarbeit ist in die Kommandos für Listen geflossen. Bei Tcl sind Listen die am häufigsten benutzte Datenstruktur, Verbesserungen in diesem Bereich sind daher besonders gern gesehen.

Die auffallendste Änderung betrifft den direkten Zugriff auf innere Elemente von geschachtelten Listen, also Listen, deren Elemente selbst wieder Listen sind. Sie werden häufig benutzt, um komplexe Informationen zu transportieren. Listing 1 wandelt den Inhalt von »/etc/group« in eine geschachtelte Liste um und greift dann auf ihre Elemente zu. Die Originaldatei könnte wie folgt beginnen:

root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:

Diese Datei wandelt das Listing zeilenweise (mit Hilfe von »gets«) in Listenelemente um. Diese Elemente sind selbst wieder Listen (durch das »split«-Kommando getrennt). Das Ganze sieht dann so aus:

{root x 0 root} {bin x 1 root,bin,
daemon} {daemon x 2 {}}

Mit der Angabe von mehreren Indizes extrahiert »lindex« direkt ein beliebiges Element: »lindex $groups 2 0« greift auf die dritte Liste zu (die Zählung beginnt bei null) und darin auf das erste Element, also den String »daemon«. Früher mussten dazu mehrere Kommandos geschachtelt werden.

Das neue »lset«-Kommando verändert direkt ein Element in einer Liste. In älteren Versionen musste man mit »lreplace« eine neue Liste erzeugen. Die neue Liste konnte man zwar in derselben Variable speichern, der Aufwand ist dabei aber deutlich höher.

Tabelle 1: Neue Features in Tcl 8.4

Tabelle 1: Neue Features in Tcl 8.4

Listing 1: Listen mit Tcl 8.3 und 8.4

01 set fd [open /etc/group r]
02 while {[gets $fd line] >=0} {
03     lappend groups [split $line :]
04 }
05 close $fd
06 
07 set index 5
08 
09 # Alte Version mit Tcl 8.3
10 set name  [lindex [lindex $groups $index] 0]
11 set gid   [lindex [lindex $groups $index] 2]
12 set users [lindex [lindex $groups $index] end]
13 puts "$name: gid $gid, users $users"
14 
15 set element [list $name x $gid ""]
16 set group [lreplace $groups $index $index $element]
17 
18 # Neu Version mit Tcl 8.4
19 set name  [lindex $groups $index 0]
20 set gid   [lindex $groups $index 2]
21 set users [lindex $groups $index end]
22 
23 lset groups $index end $users

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook