interpreter executes HLA CTL statements during the compiling of an HLA source file; hence the name compile-time language. The HLA CTL includes many control statements such as #IF, #WHILE, #FOR, #PRINT, an assignment statement and so on. One can also create compile-time variables and constants (including structured data types such as records and unions). The HLA CTL also provides hundreds of built-in functions (including a very rich set of string and pattern-matching functions). The HLA CTL allows programmers to create CTL programs that scan and parse strings, allowing those programmers to create embedded domain specific languages (EDSLs, also termed mini-languages). The stdout.put macro appearing earlier is an example of such an EDSL. The put macro (in the stdout namespace, hence the name stdout.put) parses its macro parameter list and emits the code that will print its operands. Standard library The HLA Standard Library is an extensive set of pre-made routines and macros (like the stdout.put macro described above) that make life easier for programmers, saving them from starting from scratch every time they write a new application. Perhaps just as important, the HLA Standard Library allows programmers to write portable applications that run under Windows or Linux with nothing more than recompiling the source code. Like the C standard library for the programming language C, the HLA Standard Library allows users to abstract away low-level operating system (OS) calls, so the same set of OS application programming interfaces (APIs) can serve for all operating systems that HLA supports. While an assembly language allows making any needed OS calls, where programs use the HLA Standard Library API set, writing OS-portable programs is easy. The HLA Standard Library provides thousands of functions, procedures, and macros. While the list changes over time, as of mid-2010 for HLA v2.12, it included functions in these categories: Command-line argument processing Array (dynamic) declaration and manipulation Bit manipulation Blob (binary large object) manipulation Character manipulation Conversions Character set manipulation Date and time functions Object-oriented file I/O Standard file I/O File system manipulation functions, e.g., delete, rename, change directory HLA-related declarations and functions The HLA Object Windows Library: object-oriented framework for Win32 programming Linked list manipulation Mathematical functions Memory allocation and management FreeBSD-specific APIs Linux-specific APIs MacOS-specific APIs Win32-specific APIs Text console functions Coroutine support Environment variable support Exception handling support Memory-mapped file support Sockets and client–server object support Thread and synchronization support Timer functions Pattern matching support