450 likes | 1.1k Views
?Programming productivity may be increased as much as five times when a suitable high-level language is used."F.P.Brooks, ?The Mythical Man-Month" ? [representation] is important, because how information is represented can greatly affect how easy it is do do different things with it."David Marr,
E N D
1. Programming Using Tcl/Tk Dr. Ernest J. Friedman-Hill
ejfried@herzberg.ca.sandia.gov
http://herzberg.ca.sandia.gov/
2. “Programming productivity may be increased as much as five times when a suitable high-level language is used.”
F.P.Brooks, “The Mythical Man-Month”
“ [representation] is important, because how information is represented can greatly affect how easy it is do do different things with it.”
David Marr, “Vision”
3. Your Instructor SMTS in Scientific Computing at Sandia National Labs
Writing Tcl code since Fall 1994
Ph.D. in Chemistry, MIT 1992
Using Tcl/Tk for systems integration, automated test, distributed computing
Wrote XCELL Design Environment
Friedman-Hill, E.J. and J.M. O’Connor, The XCELL Integrated Product Realization Environment: A Toolbox for Agile Construction of Custom Parametric Design Software, Proceedings of the 1996 Agility Forum National Meeting, Boston, MA.
4. What you’ll need A computer with WWW & FTP access
(UNIX preferred; Win95, Win3.1 PC or Mac OK)
Netscape Navigator (if available) for ‘Tclets’
A Tcl/Tk installation
http://www.sunlabs.com/research/tcl/install.html
Binaries and source
Textbook
Ousterhout’s Tcl and the Tk Toolkit
(Addison-Wesley, ISBN 0-201-63337-X)
Other reading material
Up-to-date man pages; Tk4.0 Porting document
5. Other References Exploring Expect, Don Libes (O'Reilly, ISBN 1-56592-090-2)
Recommended reading.
Practical Programming in Tcl and Tk, Brent Welch (Prentice Hall, ISBN 0-13-182007-9)
Lots of examples. Comes with a source disk.
http://www.sunlabs.com/research/tcl/
Tcl/Tk home page. Source, docs, info.
http://www.sunlabs.com/research/tcl/plugin/
Home page for the new Navigator plug-in
6. Who you are Write on a piece of paper:
Your name
What you do
What you want to do with Tcl/Tk
What other computer languages you know
Anything you’d especially like to see covered
7. What I’ll do Today: give an overview of the Tcl language
Next four weeks:
Using the Tcl language
GUI development with Tk
Important Tcl extensions like expect
Integrating Tcl/Tk with C and C++ applications
Writing ‘Tclets’ for the WWW
Put course notes on the Web:
http://herzberg.ca.sandia.gov/TclCourse/
PowerPoint format only (sorry)
8. What you’ll do Complete several small problem sets
Coding problems and questions
Complete a term programming project
You should choose a small application that fills a real need or solves a real problem
Examples: GUI for a command-line utility; task automation; a game or puzzle
Briefly present your project at the last meeting
Ask questions
Participation in class or via email is expected
9. Grading System Grade:
40% Homework
40% Project
20% Participation
Scores: (None), OK, Good, Excellent
Grading on a Curve. Mode is B+.
10. Overview of Tcl/Tk Component technologies:
Tcl: embeddable scripting language
Tk: GUI toolkit and widgets based on Tcl.
The principle: universal scripting language controls everything: functions, interfaces, communication.
Results:
Raise the level of GUI programming: simpler, 5-10x faster application development than X, raw Win32
Greater power: programmable applications work together; cross-platform delivery
Active objects: replace data with scripts.
11. Outline Tcl scripting language.
Tk toolkit.
Tk applications.
Survey of applications and extensions.
Conclusions.
12. Tcl: Tool Command Language Interactive programs need command languages:
Typically redone for each application.
Result: weak, quirky.
emacs and csh powerful, but can't reuse.
Solution: reusable scripting language.
Interpreter is a C library.
Provides basic features: variables, procedures, etc.
Applications extend with additional features.
13. Scripting Language Philosophy Large, complex applications:
Performance important.
Need structure.
Goal: prevent bad things. Interactive commands, scripting:
Performance less important.
Minimum structure: less overhead, easy interchange.
Goal: enable good things.
14. Two-Language Approach Use Tcl for scripting, C or C++ for large things.
Goals for Tcl:
Minimal syntax: easy to learn and type.
Minimal structure: make things play together.
Simple interfaces to C: extensibility.
15. Tcl: Tool Command Language Simple syntax (similar to sh, C, Lisp):
set a 47 ? 47
Substitutions:
set b $a ? 47
set b [expr $a+10] ? 57
Quoting:
set b "a is $a" ? a is 47
set b {[expr $a+10]} ? [expr $a+10]
16. More On The Tcl Language Rich set of built-in commands:
Variables, associative arrays, lists.
C-like expressions.
Conditionals, looping:
if "$x < 3" {
puts "x is too small"
}
Procedures.
Access to files, subprocesses, network sockets
17. More On The Tcl Language Only data representation is zero-terminated strings:
Easy access from C.
Programs and data interchangeable.
set cmd1 "exec notepad"
...
eval $cmd1
(notepad.exe launches under Windows)
Unfortunately, no 8-bit data
18. Factorial Procedure Defining and using procedures is easy!
proc fac x {
if $x<=1 {return 1}
expr $x*[fac [expr $x-1]]
}
fac 4 ? 24
19. Embedding Tcl In Applications Application generates scripts.
Tcl parses scripts, passes words to command procedures.
Application extends built-in command set:
Define new object types in C.
Implement primitive operations as new Tcl commands.
Build complex features with Tcl scripts.
20. Extensions Extensions can be developed independently:
Network communication, database access, security, ...
Applications can include combinations of extensions.
21. The Tk Toolkit The problem:
Too hard to build applications with nice user interfaces.
Even harder to do so cross-platform
The wrong solution:
C++, object-oriented toolkits, Java’s AWT
Only small improvement (10-20%?): must stillprogram at a low level.
The right solution:
Raise the level of programming.
Create interfaces by writing Tcl scripts.
22. Creating User Interfaces With Tk Additional Tcl commands:
Create Motif-like widgets (on all platforms)
Arrange widgets.
Bind events to Tcl commands.
Manipulate selection, focus, window manager, etc.
Library of C procedures:
Create new widget classes.
Create new geometry managers.
23. The Tcl interpreter.
The Tk toolkit.
Optionally, application-specific C code (primitives):
New commands.
New widgets.
Tcl scripts (compose primitives into actions):
Build user interface.
Respond to events. What's A Tk-Based Application?
24. Wish: Windowing Shell Create user interfaces by writing Tcl scripts.
Hello, world:
button .hello -text "Hello, world" -command exit
pack .hello
Simple directory browser: 30 lines
Web browser: 2000 lines
10x less code for simple things.
25. Browser Wish Script #!/usr/local/bin/wish4.0
listbox .list -yscroll ".scroll set" \
-width 20 -height 20
pack .list -side left
scrollbar .scroll -command \
".list yview"
pack .scroll -side right -fill y
wm title . "File Browser"
if {$argc > 0} {
set dir [lindex $argv 0]
} else {
set dir .
}
foreach i [lsort [glob * .*]] {
.list insert end $i
}
bind .list <Double-ButtonPress-1> {
browse $dir [selection get]
}
bind all <Control-c> {destroy .}
proc browse {dir file} {
if {$dir != "."} {
set file $dir/$file
}
if {file isdirectory $file] {
exec browse $file &
} else {
if [file isfile $file] {
exec emacs $file &
} else{
error "can't browse $file"
}
}
}
26. Other Uses For Tcl Data representation:
Store data on disk as Tcl scripts.
To load information, evaluate script
Good for app configuration
Active objects:
Store scripts in objects.
Evaluate scripts to give objects behavior.
Communication: send Tcl scripts between applications.
Executable content:
Active e-mail messages (Safe-Tcl)
Web pages (Tclets)
27. Status Runs on all UNIX/X platforms.
Runs on Win32/Win16/Mac as of version 7.4/4.1.
Source and documentation freely available.
New Netscape Plug-In may increase audience.
100,000 developers world-wide?
Hundreds of commercial products, free extensions.
Newsgroup: comp.lang.tcl.
2 introductory books (Ousterhout, Welch).
28. Representative Applications Multimedia, groupware.
Active e-mail messages.
System administration.
Testing.
Scientific applications: instrument control, simulation, visualization, CAD.
Real-time control system for offshore platform.
British teletext system.
Feature animation at Walt Disney Studios.
On-air broadcast control system for NBC.
29. Popular Extensions Expect: remote control for interactive UNIX programs such as ftp, telnet, crypt, and fsck:
#!/usr/local/bin/expect
spawn rlogin [lindex $argv 0]
expect -re "($|#|%) "
send "cd [pwd]\r"
expect -re "($|#|%) "
send "setenv DISPLAY $env(DISPLAY)\r"
interact
Expect is available via anonymous FTP
ftp://ftp.cme.nist.gov/pub/expect/
30. Popular Extensions, cont'd Archives via anonymous FTP:
ftp://ftp.neosoft.com/pub/tcl
TclX: general-purpose extensions:
POSIX system calls.
Keyed lists.
File scanning (similar to awk).
Date/time manipulation.
Debugging, help, profiling.
Oratcl and Sybtcl: access to commercial databases.
Incr tcl: object-oriented programming in Tcl.
31. Popular Extensions, cont'd Tcl-DP: socket-based remote procedure calls, distributed objects
Sample ‘unique ID’ server:
set myId 0
proc GetId {} {
global myId
incr myId
return $myId
}
dp_MakeRPCServer 4545
Sample client:
set server [dp_MakeRPCClient foo.bar.com 4545]
dp_rpc $server GetId
Not yet updated for Tcl 7.4/4.1 socket command
32. Where You Might Use Tcl and Tk Creating graphical user interfaces.
Testing.
Applications that need scripting or extension facilities.
Platform-independent applications.
Creating interactive content for the WWW.
33. Drawbacks Must learn new language
Substitution rules confusing to some people.
Competitors: JavaScript, Visual Basic…
Interpreted language has performance limits
Surprisingly high; not much worse than Java
C interfaces incompatible with Xt, Motif library.
Motif look-and-feel on PC, Mac for now.
34. What’s up at Sun Labs? Create exciting Internet applications:
Netscape Plug-In available now!
Increase accessibility:
More work on PC/Mac ports (native look and feel).
SpecTcl: interactive GUI builder (available now)
Better development tools (debugger, etc.)
Improving the language/toolkit:
Incremental on-the-fly compiler (some progress)
Better support for modules, data structures.
Dynamically loadable extensions now possible
35. Summing up... High-level programming:
Less to learn.
Build applications more quickly.
Universal scripting language:
Extend and modify applications at run-time.
Make many things work together.
Use scripts instead of data:
Active objects, executable content.
Tcl + Tk = shell of the 1990's?
36. Tcl Language Programming There are two parts to learning Tcl:
1. Syntax and substitution rules:
Substitutions simple, but may be confusing at first.
2. Built-in commands:
Can learn individually as needed.
Control structures are commands, not language syntax.
TCL HAS NO FIXED GRAMMAR!
37. Basics Tcl script =
Sequence of commands.
Commands separated by newlines, semi-colons.
Tcl command =
One or more words separated by white space.
First word is command name, others are arguments.
Returns string result.
Examples:
set a 22 set the variable ‘a’ to 22
puts "Hello, World!" world’s shortest program
38. Division Of Responsibility Interprets words.
Can invoke parser recursively.
Produces string result. Chops commands into words.
Makes substitutions.
Does not interpret values of words.
Single pass operation!
39. Arguments Parser assigns no meaning to arguments (quoting by default, evaluation is special):
C: x = 4; y = x+10
y is 14
Tcl: set x 4; set y x+10
y is "x+10"
Different commands assign different meanings to their arguments. “Type-checking” must be done by commands themselves.
set a 122
expr 24/3.2
eval "set a 122"
button .b -text Hello -fg red
string length Abracadabra
40. Variable Substitution Syntax: $varName
Variable name is letters, digits, underscores.
This is a little white lie, actually.
May occur anywhere in a word.
Sample command Result
set b 66 66
set a b b
set a $b 66
set a $b+$b+$b 66+66+66
set a $b.3 66.3
set a $b4 no such variable
41. Command Substitution Syntax: [script]
Evaluate script, substitute result.
May occur anywhere within a word.
Sample command Result
set b 8 8
set a [expr $b+2] 10
set a "b-3 is [expr $b-3]" b-3 is 5
42. Controlling Word Structure Words break at white space and semi-colons, except:
Double-quotes prevent breaks:
set a "x is $x; y is $y"
Curly braces prevent breaks and substitutions:
set a {[expr $b*$c]}
Backslashes quote special characters:
set a word\ with\ \$\ and\ space
Backslashes can escape newline (continuation)
Substitutions don't change word structure:
set a "two words"
set b $a
43. Notes on Substitution and Parsing Tcl substitution rules are simple and absolute
Example: comments
set a 22; set b 33 <- OK
# this is a comment <- OK
set a 22 # same thing? <- Wrong!
set a 22 ;# same thing <- OK
Parser looks at a command just once!
It’s OK to experiment
Expressions exist that can’t be written in one command
Sometimes things get hairy “{[“cmd”]}”
44. For Next Week... Get your Tcl/Tk environment set up
Try the demos, especially Tk’s ‘widget’
Type in ‘Hello, World’ and get it to work
Read Chapters 1 through 5 of Ousterhout