October 16 - 20, 2017

Crowne Plaza Houston River Oaks
Houston, Texas, USA
2712 Southwest Freeway, 77098
Phone: 1-713-5238448
Fax: 1-713-5771273

Technical Session Abstracts

2017 TCT Year in Review

Don Porter

A review of the major events in Tcl / Tk development and releases since the last U.S. conference.

Commercializing an App

Clif Flynt

Writing a killer-app is the easy part. The next stages include complete testing, user acceptance, marketing, sales, manging the users and more. A product needs a website that drives sales, tutorial videos, promotion, visibility,

This paper describes how Editomat is solving (and not solving) some of these problems as it matures from a quick and dirty Tcl application into a viable commercial product.

Development of Software Interfaces using Tcl/Tk

This paper describes how we have used JSON, XML, CSV for interfacing between various software sub-systems.

FlightXML at Flightaware

Jonathan Cone

FlightXML is a tcl implementation of a SOAP/REST API for accessing FlightAware's data. The first version, DirectFlight used the SOAP::Domain and SOAP:wsdl packages to build its SOAP interface. In subsequent versions we have migrated to tclws to provide the API interface. During FlightXML2 development, tclws was extended to provide a REST interface using yajltcl to build the json responses. For FlightXML3, tclws was enhanced with an optional operator to be used when constructing the response/request data types and optional strict parameter enforcement. Further enhancement included an error callback handler. These updates are available publicly with tclws v2.4+.

Future directions and high-performance, low-footprint, scalable engines for secure onboard iOT device management.

David Simmons

possible full-hour slot

Introduction to the HAMT; Opportunity for Tcl

Don Porter

The last several years have been an active time in the research and development of efficient, immutable, functional data structures. It?s too late to talk of this work as "new", but it is newer than the Tcl codebase, and than most of the techniques found within it. Since Tcl values are themselves immutable and since Tcl has enough of a Lisp character to profit from functional programming foundations, it makes some sense to examine how these "new" developments can be exploited by Tcl.

Many of the successful data structures in this area have been built up out of the building block of the Hash Array-Mapped Trie (HAMT). In this presentation, we examine the HAMT by way of seeing how it can reproduce the key-value mapping function that Tcl achieves with hash tables. Working through this concrete application aids in understanding some of the complexity found in the HAMT. The implemented HAMT can then be used as the foundation of revised internals of Tcl?s dict value, allowing us to examine the immediate pros and cons of the data structure, and speculate about others on a firmer foundation.

Odielib - A C Accelerated Math Library for Tcl

Sean Woods

Odielib is a collection of tools and C accelerated math functions that I have collected over time, and repackaged in a variety of ways for several projects. The most interesting parts of odielib for most users will be the 3d vector arithmetic and transformation functions, which are implemented as a custom TclObj type. This paper will describe some of the complexities of implementing custom TclObjs, as well as novel strategies used by this library for managing how data structures interact with the interpreter.

Panel: The future of Binary Tcl Extensions

Andreas Kupries, Sean Woods

This panel will cover the future of Critcl, TEA, and Tcl based Build systems. Why are binary Tcl extensions so hard to make and maintain? What can we do to make it better?

Panel: Zip, Kits, and Bundling Applications

Sean Woods

Present a roadmap for getting ZipFS in the core. Preview the build tools that will be available in TEA for assembling kits. Sort out what build facilities will need to be part of TEA to facilitate embedding binary extensions in static applications.

Practical Example of Tcl Command Design in a Qt/C++ Graphical Application

Tony Johnson

Tcl provides excellent support for creating complicated user commands in applications that have correct-by-construction built-in help, support for hidden commands, support for position-independent switches, and more. This paper discusses the technical details for how we created one such command in our Qt-based application.

SQLite's use of Tcl

Richard Hipp

SQLite is the most widely used database engine in the world. There are more instances of SQLite running than there are instances of Linux, or Windows. There are more SQLites than there are iPhones. SQLite is one of the most widely used software components in the world. And one of the best kept secrets of SQLite is that it is a Tcl extension that escaped into the wild. Thought no Tcl code is build into SQLite, Tcl is required in order to build SQLite from canonical sources, and Tcl and Tk are integral parts of all our development processes.

State Of FlightAware Bounties

Karl Lehenbauer

State Of FlightAware Bounties

State Of TclQuadcode

Kevin Kenny

The tclquadcode system is a compiler, now under development for about three years, that translates a significant subset of Tcl to machine code. For the limited cases that it can handle, tclquadcode produces significant gains with respect to the bytecode engine: 3-6-fold speedup in the typical case, and 30-100-fold speedup in the most advantageous cases. This talk presents recent work on speeding up the interface between compiled and interpreted code, avoiding memory allocation, and supporting non-local variable references. The speakers also intend to poll the audience informally on several topics where quadcode may drive developments in core Tcl.

TSL (w/TCL) integrated coffbox (similar to busybox) model CLI and network protocol Servers based on a (single file/binaries with git-like repos etc).

David Simmons

possible full-hour slot

TSL design implementation enabling JavaScript, Lisp, Smalltalk principles to extend the TCL model for integrated use of these language idioms.

David Simmons

possible full-hour slot

Tcl Tools for Game Engines and CAD

Sean Woods

Present the tools available in Vectcl, Odielib, and Tcl3d. Sort out how to take 3 semi-working extensions and turn them into one comprehensive framework.

Tcl_?NewStringObj caching by the core

Cyan Ogilvie

The essential idea is to add a cache to Tcl?NewStringObj in the core so that it returns references to recently and commonly used values instead of creating new string objects. There are obviously complications to this approach, and it triggers issues with sloppy refcount management, assumptions about the TclIsShared state of the returned objects, and (very rarely) assumptions about the type of the objects returned. To work around these I hacked up an automated system to find a safe subset of Tcl_?NewStringObj calls in the core to replace with versions that include the cache, and still allow some subset of the test suite to pass.

The (very early) indications are much more encouraging than I expected (the following measured with [time] in an interactive tclsh, both built with -O2, time in microseconds / iteration):

                       Vanilla 8.6.7      Dedup 8.6.7       Factor

info commands 7.85853 3.84669 0.489 clock microseconds 0.38309 0.27893 0.728 clock format [clock seconds] 8.1333 6.57341 0.808 glob /usr/lib/* 281.9676 273.2906 0.969

proc foo {} bar; proc bar {} {error bang} catch {foo} 6.118 4.83416 0.790

These results were obtained with only about 20% of the core's calls to Tcl_?NewStringObj replaced with caching versions, the subset found by the automated tool when considering the code exercised by 'make test TESTFLAGS="-match clock-*"'. There are a few that are disabled from that set that would have an additional impact, but which would need some changes to the reference count handling (part1Ptr and part2Ptr in tclVar.c, etc), and many others that are outside of the code searched by the automated tool for that test.

The core of the cache is the value deduplication mechanism from rljson, so I know it's solid (seen extensive production use for more than a year now), and there is no technical reason preventing every Tcl?NewStringObj call from being converted, in the core or extensions, once the refcounting issues are resolved. There should also be a significant reduction in peak memory usage for most common workloads, but I don't have the numbers to back that up yet.

The State Of Fossil

Richard Hipp

This talk provides an overview of the state of Fossil, the DVCS used to manage the Tcl/Tk sources.

Translating Executable Software Models with micca

Andrew Mangogna

Translating Executable Software Models with micca Tcl Applied to Formal Software Methods

    Andrew Mangogna
    [email protected]


Micca is a program, written in Tcl, for translating executable software models into "C" code. It accepts a domain specific language formulated as a Tcl script that describes the data, dynamics and processing for a software domain and produces "C" header and code files implementing the model logic. This paper explores the underlying Tcl technology that is used to implement the translation. Tcl features and extensions for creating DSL's, handling relational-structured data, parsing using a PEG and code generation using template expansion are discussed. The source code for micca is freely available and licensed in the same manner as Tcl.

Unit Testing Framework for Tcl

Gerald Lester

This will discuss the addition of a framework to the tcltest package to make unit testing of tcl code easier. The framework is proposed in TIP 452. Both standard procedural and tcloo based tcl code is supported.

Using TSL (w/TCL/JSON) as embeddable native engine for stored procedures within SQLite

David Simmons

Missing abstract

tclrmq: A pure Tcl library for RabbitMQ

Garrett McGrath

tclrmq is a fully asynchronous non-blocking pure Tcl library for working with AMQP v0.9.1 and RabbitMQ. Using TclOO and event-loop registered callbacks, it provides a natural Tcl interface for the most widely deployed open-source message broker. Unlike a Tcl extension for accomplishing the same task, tclrmq requires no external depencies outside of Tcl 8.6. Complete implementation of RabbitMQ specific features included, such as TLS support, publisher confirms, consumer cancel and blocked connection notifications, and negative acknowledgments. This presentation will introduce the library and detail how best to use it.

My proposed talk on tclrmq is meant to be a quick introduction to distributed messaging through the lens of a soon-to-be-released Tcl library. It is intended mainly for those who have only heard of, but not programmatically used, this well known application messaging protocol. By exhibiting how best to work with the library, my presentation will illustrate how to create distributed messaging applications with only a few lines of Tcl. Leveraging the event loop and a callback based style, tclrmq provides a natural interface for communicating with the RabbitMQ AMQP v0.9.1 broker. In addition, the talk will also be of help to those more familiar with the topic by making available at the time of the talk full library documentation and many ready-to-use code examples which can be used as templates for making immediate use of the API. It is meant to spread the word about a newly available ability to use Tcl with one of the open source community's most stable, widely used server technologies.

pg_sqlite and deltastream - Synchronizing Postgresql and SQLite databases by way of Tcl

Peter da Silva

Postgresql has a mechanism for dumping WAL changes in any streaming format. Technically, anyay... the only sample format they provide is a rather chatty human-readable one that?s completely useless for software.

By building an extension for the pgtcl postgres interface library to quickly copy the initial state of the postgresql database to SQLite, and then using a postgresql output extension to stream database changes in an easily parsed tab-separate key-value pair format, we will be able to copy postgresql tables to a local SQLite "cache" and then use the stream of changes to keep them up to date. Duplicating the SQLite variable substitution code in pltcl we will be able to make complex queries from tcl against postgresql or SQLite transparently.

socketservertcl a Tcl extension for using SCM_RIGHTS

Shannon Noe

The socketservertcl Tcl extension implements SCM_RIGHTS passing of accepted sockets between processes. Each process receiving a socket from the accepting server can handle the I/O in parallel. The extension supports worker pre- forking. The worker uses the standard Tcl socket patterns. Worker accept connections with a callback. The worker receives a connection for each callback registration. On completion of work, the worker re-registers for the next available connection. The workers wait on a pipe for sockets from an accepting server. The exchange of a connection between the server and worker is on a UNIX pipe. This exchange is performant.

Contact information

[email protected]