DragonFly On-Line Manual Pages
critcl_devguide(n) C Runtime In Tcl (CriTcl) critcl_devguide(n)
______________________________________________________________________________
NAME
critcl_devguide - Critcl - The Developer's Guide
DESCRIPTION
Welcome to the C Runtime In Tcl, CriTcl for short, a system to build C
extension packages for Tcl on the fly, from C code embedded within Tcl
scripts, for all who wish to make their code go faster.
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-2015 Andreas Kupries
doc 3.1.15 critcl_devguide(n)