[LWN Logo]

From: David Welton <davidw@master.debian.org>
Subject: mod_dtcl 0.4.2 - server parsed tcl for apache
Date: 1 Feb 1999 20:56:46 -0800

Hello,

I have, as the version number would indicate, made several releases of
mod_dtcl in the past, but I would like more people to use, test, and
comment on it, so I am publicizing it more openly.  I welcome all
comments, suggestions, ideas and thoughs, and would appreciate it if
they were directed to the mailing list.

I am including the text version of mod_dtcl's readme:

   WHAT IS mod_dtcl ?:
     * mod_dtcl is a free/open source implementation of server parsed
       [1]Tcl, under [2]Apache, distributed under the terms of the GNU
       GPL. It allows you to tightly integrate html with Tcl, a widely
       used scripting language with many years of development invested in
       it. This is an ideal combination, allowing you to greatly extend
       what you could do with plain html. Because Tcl is such a widely
       used language, there is a large amount of documentation for it,
       both on the net and books. There are also many external Tcl
       modules that you can load into mod_dtcl, to create images, access
       databases, etc. Apache, is, of course, the world's most popular
       web server. If you aren't reading this from the web pages, they
       are available at [3]"http://comanche.com.dtu.dk/dave/.

   [4]Install mod_dtcl!
   
   EXAMPLES:
   
     * The [5]examples.ttml file has a few very limited examples of what
       is possible with mod_dtcl. You need to make it accessable to the
       web server in order to be able to view it. Put it in your
       public_html directory or something. Have a look at my rough
       [6]benchmarks - although they are unscientific, the results are
       interesting.

   COMMANDS:
   
   Special mod_dtcl commands
     * hputs ?-error? - like puts, but to the client instead of stdout.
       The error option permits you to send an 'error message' to the
       apache log file, at the NOTICE level.
     * hgetvars - get the environmental vars. This is in a seperate
       command so as not to make the server do this every time you load a
       .ttml file. ENVS and VARS are the two associative arrays loaded.
       ENVS contains environmental variables, VARS contains all the 'cgi'
       variables. Look in the examples.ttml file to see how these work.
     * include filename - include a flat file. Useful for including HTML
       files.

   SUPPORT:
   
   There is a mailing list at [7]mod_dtcl@lists.prosa.it. Mod_dtcl is
   currently alpha software (meaning that it is subject to change),
   however, due to the relative simplicity of the design, it is fairly
   stable, and performs well. If you have any questions or comments,
   please send them to the mailing list, or to me.

   TODO:
   
     * Decide whether to create a new interpreter for each page, or use a
       seperate namespace for each one. The namespace solution is faster,
       and allows things like global configs, however, it is possible to
       create global variables that are persistant within one apache
       process. The Tcl_Create method seems cleaner, but does not permit
       global config files, and might be slower.
     * Decide on standard opening and closing tokens - currently using <+
       and +> for no particular reason.
     * Security review.
     * There ought to be a way to make it so things like while {1}
       doesn't go ape and make the process run away. I.e., create a limit
       on the maximum execution time.
     * Lots more commands.. like php, to make life easier. Some things
       will have to be done in the module itself, I think, like cookie
       things, because they deal with headers. Other things could
       probably be implemented in tcl, if the speed loss isn't too great.
       PHP would be a good place to look for examples.
     * Make file uploads work. Once again, PHP has some code which does
       this, but it looks like a hairy mime mess. It's a pity that Apache
       doesn't have a standard way of getting stuff out of headers,
       without doing most of the parsing yourself.
     * Configurations options: safe mode, ???.
     * Use flex as a lexer instead of my own, handwritten one? Not much
       of a point, I guess, but it might be informative/interesting/fun.
     * Long term: it would be neat to build something that could use any
       one of a variety of languages, like Perl, Python, Guile..whatever.
     * Long term: maybe have a seperate process running somewhere that
       all the different server processes could talk to, similiar to how
       java servlets work (ridruejo@esi.us.es).

   WHY:
   
   Why mod_dtcl when there are already so many other server parsed
   implementations?
   
     * Because it was fun to do:-)
     * Because Tcl is a common and relatively well known language.
       [8]PHP, while nice, is not really used much outside the web. It's
       easier, and more practical, to learn a more general language, that
       can be used outside of the web, for many other applications. Also,
       Tcl has had many more years than PHP to mature, and it has a large
       user base.
     * Because mod_perl is a big heavy chunk of Perl that seems like
       overkill for many things. I didn't really investigate it all that
       thoroughly though:-) Mod_dtcl aims to be more lightweight - it
       doesn't get involved in the server config files, for instance. If
       someone were interested, they could write a companion module
       "mod_tcl_config". Just an idea...

   INTERNALS:
   
   A brief description of how it works. For each page requested, a new
   tcl namespace is created within the global namespace. The module then
   reads through the page, aggregating plain HTML into big "hputs"
   statements, and anything between the delimiters ( <+ and +> ) as
   regular tcl. After this is done, the whole script is eval'ed and sent
   to the client. After it is eval'ed, the namespace that it was run in
   is destroyed, so as to destroy local variables. Read the code for more
   info:-)

   THANKS:
   
   I would like to thank Daniel Ridruejo for furnishing me with the web
   space, Rolf Ade, and the various people subscribed to the mod_dtcl
   mailing list for ideas, comments and suggestions.
   [9]Send me mail about mod_dtcl!
   
   mod_dtcl is Copyright [10]David Welton 1998
   $Id: readme.html,v 1.4 1999/01/30 22:01:19 davidw Exp $

References

   1. http://www.scriptics.com/
   2. http://www.apache.org/
   3. http://comanche.com.dtu.dk/dave/
   4. file://localhost/home/davidw/web/mod_dtcl/INSTALL.html
   5. file://localhost/home/davidw/web/mod_dtcl/examples.ttml
   6. file://localhost/home/davidw/web/mod_dtcl/benchmark.html
   7. mailto:mod_dtcl@lists.prosa.it
   8. http://www.php.net/
   9. mailto:davidw@debian.org
  10. http://www.efn.org/~davidw

Thankyou,
-- 
David Welton                          http://www.efn.org/~davidw 

        www.prosa.it - Debian GNU/Linux - www.debian.org

[[Send Tcl/Tk announcements to tcl-announce@mitchell.org
  Send administrivia to tcl-announce-request@mitchell.org
  Announcements archived at http://www.findmail.com/list/tcl_announce/
  The primary Tcl/Tk archive is ftp://ftp.neosoft.com/pub/tcl/ ]]