Skip to content

Languages

The sixteen language implementation repositories. Each one implements the curriculum with the same layout and the same make targets, built and tested in its toolchain container and natively on Linux, macOS, and Windows.

Language Repository Extension Release line Build / package tool Status Projects implemented
C c .c C17 (GCC 16 in the container) make Active 00
C# cs .cs .NET 10 (LTS) dotnet CLI (NuGet) Active 00
C++ cpp .cpp C++20 (GCC 16 in the container) CMake Active 00
Go go .go Go 1.27 Go modules Active 00
Haskell hs .hs GHC 9.14 cabal Active 00
Java java .java Java 25 (LTS, Eclipse Temurin) Maven Active 00
JavaScript js .js Node.js 24 (LTS) npm Active 00
Julia jl .jl Julia 1.13 Pkg Active 00
Objective-C objc .m Objective-C with Foundation (GNUstep Base; Apple Foundation on macOS) GNU Make + gnustep-config Active 00
Perl pl .pl Perl 5.42 cpanm (cpanfile) Active 00
PHP php .php PHP 8.5 Composer Active 00
Python py .py Python 3.14 uv Active 00
Ruby rb .rb Ruby 4.0 Bundler Active 00
Rust rs .rs Rust 1.99 cargo Active 00
TypeScript ts .ts Node.js 24 (LTS); TypeScript via tsc as a project dependency npm + tsc Active 00
Visual Basic vb .vb VB.NET on .NET 10 (LTS) dotnet CLI (NuGet) Active 00

Shared layout

Every language repository follows the curriculum's language skeleton: a root Makefile (make check = repository checks + toolchain verification + every project listed in IMPLEMENTED), a toolchain Containerfile, the sdlc-curriculum submodule pinned to a release, and one workspace per curriculum project. A project counts as implemented once it is listed in IMPLEMENTED; CI then builds and tests it everywhere. Project 00 (00-hello-world, dp-hello) is implemented in all sixteen repositories, against curriculum v1.5.0; see the implementation status.

Language characteristics

Language CLI classification Image category Access to OS primitives Entry-point mechanism
C Included Native Toolchain Absolute & Direct (POSIX system calls) Kernel drops argc and argv pointers directly into main()
C# Included First-Class Runtime wraps system arguments into top-level Main() array Application Level (deep native reflection tools)
C++ Included Native Toolchain Absolute & Direct (POSIX system calls) Kernel drops argc and argv pointers directly into main()
Go Included First-Class High (wrapped for async goroutine scheduler) Compiled-in runtime sets up engine and slices args to os.Args
Haskell Included First-Class High (via System.Environment primitives) Compiles to binary; runtime initializes and wraps options to getArgs
Java Included First-Class Medium-High (abstracted via ProcessBuilder) JVM host maps system args into public static void main()
JavaScript Included First-Class High (via V8 Node.js runtime wrappers) Host binary consumes kernel flags first; residual args go to process.argv
Julia Included First-Class High (explicit process wrappers) Runtime targets calculations but populates global ARGS vector
Objective-C Included Native Toolchain Absolute & Direct (Strict superset of C) Compiles directly; maps arguments using standard C main structure
Perl Included First-Class Absolute & Direct (original Unix stream system wrapper) Interpreter maps argument arrays into structural @ARGV variable
PHP Included First-Class High (via php-cli and standard streams) Engine wraps CLI context and exposes args via argv
Python Included First-Class High (via sys/os/subprocess) Interpreter maps args to high-level sys.argv list
Ruby Included First-Class High (via native process automation libraries) Interpreter bootstraps file and wraps arguments into ARGV array
Rust Included First-Class Absolute & Direct (POSIX + memory boundaries) Compiles directly to machine code; args mapped via std::env::args()
TypeScript Included First-Class High (via V8 Node.js runtime wrappers) Host binary consumes kernel flags first; residual args go to process.argv
Visual Basic Included First-Class Medium-High (.NET platform hooks) Runtime initializes and maps arguments to Main function

Adding a language

Follow Add a repository and Set up a language repository, then add a page here (from templates/reference.md), a row to the tables above, and an entry in the nav:.