Provided by: critcl_3.1.18.1+dfsg-3_amd64 bug

NAME

       critcl_devguide - Critcl - The Developer's Guide

DESCRIPTION

       C  Runtime In Tcl, or CriTcl , is a system for compiling C code embedded in Tcl on the fly
       and either loading the resulting objects into Tcl for immediate use or packaging them  for
       distribution.  Use CriTcl to improve performance by rewriting in C those routines that are
       performance bottlenecks.

       This document is a guide for developers working on Critcl, i.e. maintainers  fixing  bugs,
       extending the package's functionality, etc.

       Please read

       [1]    Critcl - License,

       [2]    Critcl - How To Get The Sources, and

       [3]    Critcl - The Installer's Guide

       first, if that was not done already.

       Here  we  assume that the sources are already available in a directory of your choice, and
       that you not only know how to build and install them, but  also  have  all  the  necessary
       requisites  to  actually do so. The guide to the sources in particular also explains which
       source code management system is used, where to find it, how to set it up, etc.

PLAYING WITH CRITCL

       The sources of Critcl, should you have gotten them, contain several larger examples  show-
       casing various aspects of the system. These demonstration packages can all be found in the
       sub-directory "examples/" of the sources.

       Lots of smaller examples can be found in the document Using  CriTcl,  an  introduction  to
       Critcl  by  way  of  a  of examples. These focus more on specific critcl commands than the
       overall picture shown by the large examples mentioned in the previous paragraph.

DEVELOPING FOR CRITCL

   ARCHITECTURE & CONCEPTS
       The system consists of two main layers, as seen in the figure below, plus a support  layer
       containing general packages the system uses during operation.

       +----------------+
       |Applications    |
       | critcl         |
       | critcl::app    |
       +----------------+

       +----------------+
       |Core Packages   |
       | critcl         |
       | critcl::util   |
       +----------------+

       +----------------+
       |Support Packages|
       | stubs::*       |
       | md5, platform  |
       |  ...           |
       +----------------+

       [1]    At  the  top  we  have  an application built on top of the core packages, providing
              command line access to the second and third usage modes, i.e. Generate Package  and
              Generate TEA Package.

              critcl

              critcl::app

       [2]    Below that is the core package providing the essential functionality of the system,
              plus various utility packages which make common tasks more convenient.

              critcl

              critcl::util

       [3]    Lastly a layer of supporting packages, mostly external to critcl.

              md5    For this pure-Tcl package to  be  fast  users  should  get  one  of  several
                     possible accelerator packages:

                     [1]    tcllibc

                     [2]    Trf

                     [3]    md5c

              cmdline

              platform

              stubs::container

              stubs::reader

              stubs::writer

              stubs::gen

              stubs::gen::init

              stubs::gen::header

              stubs::gen::decl

              stubs::gen::macro

              stubs::gen::slot

              stubs::gen::lib

   REQUIREMENTS
       To  develop  for  critcl  the following packages and applications must be available in the
       environment. These are all used by the build.tcl helper application.

       dtplite
              A Tcl application  provided  by  Tcllib,  for  the  validation  and  conversion  of
              doctools-formatted text.

       dia    A  Tcl application provided by Tklib, for the validation and conversion of diagram-
              formatted figures into raster images.

              Do not confuse this with the Gnome dia application, which is a graphical editor for
              figures and diagrams, and completely unrelated.

       fileutil
              A Tcl package provided by Tcllib, providing file system utilities.

       vfs::mk4, vfs
              Tcl  packages  written  in C providing access to Tcl's VFS facilities, required for
              the generation of critcl starkits and starpacks.

   DIRECTORY STRUCTURE
       Helpers

              "build.tcl"
                     This helper application provides various operations needed  by  a  developer
                     for  critcl,  like regenerating the documentation, the figures, building and
                     installing critcl, etc.

                     Running the command like

                       ./build.tcl help

                     will  provide  more  details  about  the  available  operations  and   their
                     arguments.

       Documentation

              "doc/" This  directory  contains  the documentation sources, for both the text, and
                     the figures.  The texts are written in doctools format, whereas the  figures
                     are written for tklib's dia(gram) package and application.

              "embedded/"
                     This  directory  contains  the  documentation  converted to regular manpages
                     (nroff) and HTML.  It is called embedded because these files, while derived,
                     are  part  of  the git repository, i.e. embedded into it. This enables us to
                     place these files where they are  visible  when  serving  the  prject's  web
                     interface.

       Testsuite

              "test/all.tcl"

              "test/testutilities.tcl"

              "test/*.test"
                     These  files  are  a standard testsuite based on Tcl's tcltest package, with
                     some utility code snarfed from Tcllib.

                     This currently tests only some of the stubs::* packages.

              "test/*.tcl"
                     These files (but not "all.tcl", and "testutilities.tcl") are  example  files
                     (Tcl with embedded C) which can be run through critcl for testing.

                     TODO: These should be converted into a proper test suite.

       Package Code, General structure

       Package Code, Per Package

              critcl

                     "lib/critcl/critcl.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl/Config"
                            The configuration file for the standard targets and their settings.

                     "lib/critcl/critcl_c/"
                            Various  C  code  snippets  used by the package.  This directory also
                            contains the copies of the Tcl  header  files  used  to  compile  the
                            assembled  C  code, for the major brnaches of Tcl, i.e. 8.4, 8.5, and
                            8.6.

              critcl::util

                     "lib/critcl-util/util.tcl"
                            The Tcl code implementing the package.

              critcl::app

                     "lib/app-critcl/critcl.tcl"
                            The Tcl code implementing the package.

              critcl::iassoc

                     "lib/critcl-iassoc/iassoc.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl-iassoc/iassoc.h"
                            C code template used by the package.

              critcl::class

                     "lib/critcl-class/class.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl-class/class.h"
                            C code template used by the package.

              dict84

              lassign84

                     "lib/util84/dict.tcl"

                     "lib/util84/lassign.tcl"
                            These are two packages implementing forward compatibility  emulations
                            of  the dict and lassign commands introduced with Tcl 8.5.  These are
                            used automatically when critcl is run by Tcl 8.4.

              stubs::*

                     "lib/stubs/*"
                            A set of non-public (still) packages which  provide  read  and  write
                            access  to  and  represent  Tcl  stubs  tables. These were created by
                            taking the "genStubs.tcl" helper application coming with the Tcl core
                            sources apart along its internal logical lines.

              critclf

                     "lib/critclf/"
                            Arjen  Markus' work on a critcl/Fortran. The code is outdated and has
                            not been adapted to the changes in critcl version 3 yet.

              autoscroll

              cmdline

              md5

              md5c

              platform

              snit

              snitbutton

              wikit  These are  all  external  packages  whose  code  has  been  inlined  in  the
                     repository  for  easier development (less dependencies to pull), and quicker
                     deployment from the repository (generation of starkit and -pack).

                     The packages autoscroll, snit, snitbutton, and wikit are for the support  of
                     the  Wikit  GUI  accessible  from  starkit  and  -pack  when the application
                     functionality (critcl::app) is run with an empty command line.

                     TODO: These should all be checked  against  their  origin  for  updates  and
                     changes since they were inlined.

AUTHORS

       Jean Claude Wippler, Steve Landers, Andreas Kupries

BUGS, IDEAS, FEEDBACK

       This  document,  and  the  package  it  describes, will undoubtedly contain bugs and other
       problems.  Please report them at https://github.com/andreas-kupries/critcl/issues.   Ideas
       for  enhancements  you  may have for either package, application, and/or the documentation
       are  also  very  welcome   and   should   be   reported   at   https://github.com/andreas-
       kupries/critcl/issues as well.

KEYWORDS

       C code, Embedded C Code, code generator, compile & run, compiler, dynamic code generation,
       dynamic  compilation,  generate  package,  linker,  on  demand   compilation,   on-the-fly
       compilation

CATEGORY

       Glueing/Embedded C code

COPYRIGHT

       Copyright (c) Jean-Claude Wippler
       Copyright (c) Steve Landers
       Copyright (c) 2011-2018 Andreas Kupries