The Avail Programming Language
Mark D. A. van Gulik
Copyright © 2016 Mark van Gulik.


Mark can be emailed by humans at The Avail Foundation.

Career Profile

Areas of expertise include:

  • Language, compiler & interpreter design
  • User interface design
  • Smalltalk mentoring
  • Object-oriented analysis & design techniques
  • Object-oriented implementation
  • Building frameworks and re-use libraries
  • High performance & highly scalable systems
  • Object-oriented databases
  • Relational databases


  • Wilf R. LaLonde, Mark Van Gulik, Building a backtracking facility in Smalltalk without kernel support, Conference proceedings on Object-oriented programming systems, languages and applications, p.105-122, September 25-30, 1988, San Diego, California, United States



  • US 9,830,348 — Persistent data storage techniques
  • US 9,769,292 — Concurrent process execution
  • US 9,665,403 — Executing algorithms in parallel
  • US 9,652,287 — Using databases for both transactions and analysis
  • US 9,613,112 — Structuring data
  • US 9,189,536 — Maintaining a relationship between two different items of data
  • US 9,092,411 — Understanding data in data sets
  • US 8,935,225 — Persistent data storage techniques
  • US 8,489,567 — Persistent data storage techniques
  • US 7,512,610 — Processing Data Records
  • US 7,587,428 — Maintaining a relationship between two different items of data
  • US 7,689,560 — Persistent data storage techniques
  • US 7,783,655 — Processing Data Records


B.C.S. With Honours in Computer Science (Software), Carleton University, 1989.

Work History

The Avail Foundation LLC Madison, Wisconsin and other locations 1993 to present
Role: Developer, Co-Founder, Chief Technology Officer
Environment: PowerPC & x86 Macintosh, System 7.5.1 - MacOS 9.0, OS X 10.0-10.10.5, VisualWorks 2.0, 2.5.2, Power PC Assembly, C, C++, Java/JVM, Windows XP, Windows 7, Eclipse, IntelliJ/IDEA.
Developed many of the deep core concepts of Avail (, its syntactic mechanisms, and its semantic philosophy. Was sole designer and developer until 2008. The Avail Foundation was founded in 2012, nearly 20 years after work began on it.

CUNA Mutual Financial Group Madison, Wisconsin Mar. 2018 – Present
Role: Analyst V, Data
Environment: Windows, Azure, SQL Server, Visual Studio
Worked within Predictive Analytics team to solve data engineering problems and plan additional data pipelines. Assisted in execution and evaluation of predictive models for marketing a variety of banking and insurance products. Advocated best practices in contexts such as code development and deployment, data governance, and quality assurance. Role included programming in SQL, R, and C#.

My Coverage Plan, Inc. Madison, Wisconsin October 2017
Role: Independent Contractor
Environment: OSX, IntelliJ IDEA, Avail
Reviewed code, fixed bugs, and tuned performance and security of a health insurance expert system written in Avail. The portion of the system reviewed includes a domain-specific language for specifying business rules and a compiler that produces JVM bytecodes.

Sonic Foundry Madison, Wisconsin January 2017 to June 2017
Role: Software Design Engineer
Environment: Windows 10, Visual Studio, C#, C++, JavaScript
Made bug fixes and created TCP/IP interface for closed-hardware device.

Google Madison, Wisconsin January 2016 to November 2016
Role: Software Engineer, SWE-6
Environment: Linux, Eclipse, C++
Worked on a massive scale distributed RDMA-based in-memory key/value store in C++. Also contributed pieces to its underlying file system infrastructure. Designed and wired in event logging mechanism, and provisioned the network and storage resources for recording these events for system health monitoring, performance profiling, and post-mortem analysis.

Madison, Wisconsin March 1999 to
December 2015
Role: Principal Developer
Environment: Linux, Windows 98 / NT 4.0 / 2000 / XP / 7, VisualWorks Smalltalk 3.0-7.10, Envy/Developer, StORE, Objectivity/DB, IBM MQSeries (now WebSphere MQ), Java, Eclipse (Helios, Indigo, Juno), JavaScript.

Implemented vast majority of MioSoft's MioEdge consolidating context database engine, ETL / Data Quality tools, and related technologies. Implementation was from just above the file system and sockets, up through the user interface for schema and rule specification, interactive parsing and mapping of files/MQ/ODBC, reporting to files/MQ/ODBC, and integrated web server. Devised and implemented many very complex contention-free parallel algorithms for data consolidation (patented). Designed and implemented UML-based modeling tool with code generation, high quality automatic graph layout algorithms, extensive integrated file parsing and mapping tool, MQSeries (WebSphere MQ) interface, XML/XSL interfaces, parallel report generator, integrated web design tool, complete web server, indexing mechanisms, error-corrected transport layer on top of TCP/IP (to compensate for <10-13 bit error rate on internal bus), and translucent graphics operations in Smalltalk and C. Assisted construction of production databases using this technology with hundreds of cores and disks in redundant data centers, thousands of data sources providing petabytes of data, and over 30,000 users connected via WAN. Leveraged expertise in Java, JavaScript, Smalltalk, HTML, CSS, XML technologies, C, x86 assembly language, and Avail. Also contributed significantly in the design and implementation of Miosoft's Mioplexer®.

Of lesser note, designed and implemented entirety of:

  • Serialization framework, deep copy / compare framework.
  • ZLib compression interface.
  • MD5 implementation (in ECMAScript).
  • Concurrent LRU cache that gangs overlapped requests for the same key.
  • Monitors for process synchronization (in VisualWorks).
  • A safe process termination mechanism (VisualWorks).
  • An ordered Heap with O(log(N)) removal time.
  • A new BTree variant with < 0.05 seeks per random write at the trillion element scale.
  • End-user graphical scripting tool for parallel and distributed execution.
  • Compressed, single-file transactionally extendable file format.

Sprint Overland Park, Kansas September 1998
to December 1998
Role: VisualWorks Smalltalk Architect
Environment: Pentium Pro, Unix boxes. Windows NT, XWindows. VisualWorks 2.5.2, Envy/Developer.
Architected "Partitioning Service" for the Sprint ION project. This service is the mechanism for coordinating ION services in the presence of planned and unplanned node failovers and hand-offs. Also developed uniform layer for starting and controlling external processes on either NT or Unix.

Honda Canada Alliston, Ontario, Canada August 1998
Role: VisualAge Smalltalk Expert
Environment: Pentium Pro, Unix boxes. Windows NT 4.0, XWindows. VisualAge 4.02b, Envy/Developer.
Assisted in very short term troubleshooting & coding (2 weeks). Order of magnitude performance improvements were made to graphics subsystem under XWindows.

Computer Sciences
Oslo, Norway November 1997
to March 1998
Role: Smalltalk Expert
Environment: Pentium Pro. Windows NT 4.0. VisualAge 3.0a, 4.0, 4.02b, Envy/Developer, TOPLink.
Mentored other developers (about 20), mostly helping to debug framework quirks. Improved performance of framework by caching and recycling key windows. Helped design pieces of security subsystem. Assisted in deployment of system for a client using MVS DB2 3.0, by patching TOPLink.

Policy Management
Systems Corporation
Columbia, South Carolina August 1997 to
October 1997
Role: Smalltalk Mentor
Environment: Pentium, Dual Pentium Pro. Windows NT 4.0. VisualAge 3.0a, 4.0, 4.02, Envy/Developer, Micado Frameworks.
Mentored team of >100 (of varied experience) in Smalltalk. Produced key tools for analysis of application packaging. Produced components for automated layout of screens. Critiqued portions of system (total system was > 90,000 methods).

(2nd contract)
Ottawa, Ontario, Canada September 1996
to April 1997
Role: Smalltalk and Languages Specialist
Environment: 486, Pentium, Pentium Pro. Windows 95, NT 3.51/4.0. VisualWorks 2.5, Envy/Developer, Gemstone, HP Distributed Smalltalk, Rational Rose.
Mentored team of about 12 in Smalltalk and object-oriented design & analysis, using Rational Rose. Delivered key pieces of an agent framework. Constructed performance measurement framework. Constructed automated testing framework. Interfaced Smalltalk to C code. Built layers for resource management and call control abstract interface.

Marsh & McLennan Toronto, Ontario, Canada February 1996 to
September 1996
Role: Smalltalk Developer and Troubleshooter
Environment: Pentium. IBM VisualAge Smalltalk.
Tracked and corrected hundreds of bugs in a production insurance claim processing system. Also extended functionality as per existing requirements. Moved many business rules from code to database tables for easier maintenance and distribution. Mentoring was also a significant portion of my activities.

Lynchburg, Virginia May 1995 to
February 1996
Role: Senior Smalltalk Specialist
Environment: 486 PC and PowerMac 8100. ParcPlace VisualWorks 1.0 & 2.0.
Participated in design of C++ browser. Developed prototype in Smalltalk. Prototyped portable window system layer in Smalltalk, started translation to C++.

(1st contract)
Ottawa, Ontario, Canada May 1994 to
April 1995
Role: Senior Technical Lead
Environment: 486 PCs. ParcPlace VisualWorks 1.0 & 2.0. ENVY/Developer.
Participated in the design of a system to handle connections between any two non-homogenous and homogenous digital systems. Built an interpreter in Smalltalk to support the building of scripts within the application. Scripts used enterprise model rules for resource allocation and other policies. Provided mentoring, training, code and design reviews to the entire team (>10 persons). Was responsible for most of the technical implementation details, such as adding new user interface widgets and complex functionality. Was ENVY Library Supervisor.

Raleigh, North Carolina December 1993
to April 1994
Role: Senior Technical Lead
Environment: Diskless X-windows boxes connected to Unix servers. ParcPlace VisualWorks 1.0. ENVY/Developer.
Was responsible for building various low level interfaces to external data sources. Designed and built an object broker mechanism to retrieve data from relational and object databases, as well as from legacy systems. Was responsible for major technical issues, such as performance. Provided support for code and design reviews.

Sietec Open
Willowdale, Ontario, Canada May 1992 to
November 1992
& July 1993 to
October 1993
Role: Smalltalk Consultant
Environment: 386/486 PCs, OS/2 1.3, Windows 3.1, Digitalk Smalltalk V/ PM and V/Win.
Smalltalk/VPM and Smalltalk /VWin knowledge resource for the other (more than 16) members of the group. Previous experience with bugs and caveats in these environments was fundamental to fulfilling this role. Debugged and extended several modules that were heavily dependent on detailed aspects of VPM's and VWin's windowing classes. Provided programming tools and tips to simplify development.

Canadian National
Research Council
& Simcon System
Ottawa, Ontario, Canada February 1993
to May 1993
Role: Smalltalk Consultant
Environment: DECstation 3100, Ultrix, X/Windows, VisualWorks 1.0, and ObjectWorks r4.1.
Developed reusable components for an enterprise modeling system. These components included graph layout classes, model based drag and drop support and hypergraph (graph of graphs) editor. These components were built inside the VisualComponent hierarchy in order to be able to plug in arbitrary objects. Designed some of the look and feel. Provided support for the tuning of the application, as well as debugging of low level problems. Mentored the group of 5 developers on proper use of the existing class library and general Smalltalk idioms. Porting of tools developed in other environments was also done. These tools improved the effectiveness of the load building process already in place.

Veritas Venture
& First Union Bank
Charlotte, North Carolina December 1991
to April 1992
Role: Consultant to First Union Bank
Environment: 386/486 PCs, 0S/2 1.3, Digitalk Smalltalk V/ PM.
Design and development of a product (Customer Relationship System) for internal use by First Union Bank. The product provided facilities for selecting a customer and then viewing simple reports about the customer. It acquired its data from a host by means of OS/2's APPC services, as well as OS/2's EHLLAPI services for scraping data from 3270 screens. This was the first project in Smalltalk for the rest of the programming team (from Broadway & Seymour). Position required mentoring and transfer of Smalltalk knowledge.

Veritas Venture
Lynchburg, Virginia October 1989 to
December 1991
Role: Smalltalk Software Engineer
Environment: 386/486 PCs, 0S/2 1.3, Smalltalk V/ PM, C, COBOL.
Participated in the design and development of an expert system for handling the resolution of credit card charge-backs. The team consisted of 3 to 6 programmers, varying over time. Duties included: Building knowledge engineering tools. Interfacing Smalltalk/VPM to OS/2 Extended Edition's SQL Manager and 3270 screens. Building export and import utilities for the domain data to and from multiple destinations and sources. Setting up a simple CASE system to deal with teams of 3 to 6 programmers. Construction of the expert system engine and user interface. Extension and correction of the Smalltalk/VPM class library. Porting the system across multiple versions of Smalltalk/VPM (alpha0.76, 1.0, 1.1, 1.2, 1.3). Near end of project, the core of the system was ported to COBOL by myself & 3 others.

Artech Digital
Ottawa, Ontario May 1988 to
September 1988
Role: Assembly Language Software Engineer
Environment: AT PCs, C, 80286 Assembler, 6502 Assembler.
Developed a real time simulation of motorcycle driving. The simulation involved displaying a moving track from multiple points of view. It also involved tuning acceleration and terrain effects for realism.

Carleton University,
Department of
Computer Science
Ottawa, Ontario May 1987 to
September 1987
Role: Researcher
Environment: APPLE Lisa, Macintosh II, Tektronix-4405, Smalltalk-80 (Tektronix, r2.1).

Produced many prototype applications based on different aspects of computer animation: ray tracing, world editing, experimental techniques of movie editing, and an object oriented way of describing movies (describing the interactions between objects in a world). A general equation solver was written in order to solve the constraints (differential equations) given in the description of a world. Many venues for stereoscopic viewing were investigated.

Open Source

Over 20 years of work developing Avail, a novel multi-paradigmatic language for articulate programming. See the Avail home page for details.

Technical Profile

Hardware: Mac (68K/PPC/x86)
x86 PCs
SUN SparcStation I, I+, II
DEC 5100
PDP 11-60
DOS, Windows 3.0 / 3.1 / 3.11 / NT4.0 / 2000 / XP / XP Professional 64 / Server 2003 / Vista Ultimate / Windows 7 / Windows 10
Macintosh System — MacOS 3.0 through Mac OS X 10.12.5 (Sierra)
UNIX (FreeBSD, X Windows on Solaris)
OS/2 (1.1 through 3.0)
Assembler (6502, x86, PDP-11, 680x0, PowerPC)
BASIC (C64, MS, Newton NSBasic)
C, C++, C#
MicroFocus COBOL
Lisp, Scheme
  • V (PM, Win, 286, Mac)
  • ST-80 R2.1 through R4.1
  • ObjectWorks 4.0, 4.1
  • VisualWorks 1.0, 2.0, 2.5, 2.5.2, 3.0, 5i, 5i.2, 5i.4, 7.2, 7.4, 7.6, 7.8, 7.9, 7.10
  • Visual Age (IBM) 2.0, 3.0, 4.0, 4.02b
  • Squeak 2.0
Databases: Gemstone (an ODBMS)
Objectivity/DB (an ODBMS)
MioDB (a parallel/distributed ODBMS developed almost exclusively by me)
DB2 (MVS 3.0, MVS 5.0 Universal, and Windows NT 5.0 Universal)
SQL Server