|
|||
|
Hi all. Having worked on critcl version 3.1 for some time now I believe that the code is ready to be shown around as at least a release candidate. For those people willing to test things out before I make an actual release, some information: Critcl is found at github, at http://jcw.github.com/critcl/ The work on version 3.1 resides in the branch "dev31". It will find its way into branch "master" only when the release proper is made. It is planned to be mainly a feature release providing the following extensions over the capabilities of the 3.0.x line: [1] Added a new higher-level package *critcl::iassoc*. This package simplifies the creation of code associating data with an interpreter via Tcl's *Tcl_(Get|Set)AssocData()* APIs. The user can concentrate on his data while all the neccessary boilerplate C code to support this is generated by the package. This package uses several of the new features which were added to the core *critcl* package, see below. [2] Added the higher-level package *critcl::class*. This package simplifies the creation of C level objects with class and instance commands. The user can write a class definition with class- and instance-variables and -methods similar to a TclOO class, with all the necessary boilerplate C code to support this generated by the package. This package uses several of the new features which were added to the core *critcl* package, see below. [3] Extended the API for handling TEApot metadata. Added the command critcl::meta? to query the stored information. Main use currently envisioned is retrieval of the current package's name by utility commands, for use in constructed names. This particular information is always available due to the static scan of the package file on execution of the first critcl command. The new packages *critcl::iassoc* and *critcl::class* (see above) are users of this command. [4] Extended the API with a command, critcl::name2c, exposing the process of converting a Tcl name into base name, namespace, and C namespace. This enables higherl-level code generators to generate the same type of C identifiers as *critcl* itself. The new package *critcl::class* (see above) is a user of this command. [5] Extended the API with a command, critcl::source, executing critcl commands found in a separate file in the context of the current file. This enables easier management of larger bodies of code as it allows the user to split such up into easier to digest smaller chunks without causing the generation of multiple packages. [6] Related to the previous item, extended the API with commands to divert collection of generated C code into memory. This makes it easier to use the commands for embedded C code in higher-level code generators. See the section -> Advanced: Diversions for details of the provided commands. The new package *critcl::class* (see above) is a user of these facilities. [7] Extended the API with commands helping developers with the generation of proper C _#line_ directives. This allows higher-level code generators to generate and insert their own directives, ensuring that compile errors in their code are properly attributed. See the section -> Advanced: Location management for details of the provided commands. The new packages *critcl::iassoc* and *critcl::class* (see above) are users of these facilities. [8] Extended the API with commands giving users the ability to define custom argument and result types for ::critcl::cproc. See the section -> Advanced: Extending cproc for details of the provided commands. The examples coming with the critcl sources were extended and modified to demos the new features above, mainly "critcl::class" and "critcl::iassoc" (*). For a really _big_ example of the use of "critcl::class", custom #line generation, custom types for cproc, i.e. pretty much everything in v3.1-to-be, please see https://chiselapp.com/user/andreas_k.../KineTcl/index Note that actually building this big example will require a few external dependencies like OpenNI, NITE, etc. And a Kinect, of course. Details regarding getting and building it can be found in KineTcl's dev guide. (*) Has somebody a better name for this one ? -- So long, Andreas Kupries <akupries@shaw.ca> <http://www.purl.org/NET/akupries/> Developer @ <http://www.activestate.com/> http://www.tcl.tk/community/tcl2012/ - Tcl'2012, Nov 12-16, Chicago, IL, USA. ------------------------------------------------------------------------------- |
|
|
||||
|
||||
|
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|