Skip to content

GaijinEntertainment/daScript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12,373 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Daslang

Daslang (formerly daScript) is a high-performance, statically typed programming language built for games and real-time applications.

build wasm_build

Website · Documentation · Blog · Try Online

Why Daslang?

Daslang was created at Gaijin Entertainment to solve a real problem: interop overhead between scripting languages and C++ was eating the frame budget in their ECS game engine. Lua (via LuaJIT) and Squirrel both hit the same wall — marshaling data back and forth was too expensive.

Daslang's data layout matches C++. There is no marshaling, no boxing, no conversion — script↔C++ calls are near-zero cost.

Core principles:

  • Iteration speed is king — a full production game recompiles in ~5 seconds; hot reload is built in
  • Explicit, not implicit — no hidden type conversions, no silent allocations; options log shows exactly what the compiler produces
  • 99% safe, not 100% — eliminates real-world C++ bugs pragmatically, without Rust-level restrictions
  • If it gets slow, you can fix it — manual delete to reduce GC pressure, AOT to C++ for native speed
  • The language reflects the problem — a compile-time macro system lets libraries reshape syntax to match the domain

Three execution tiers (all planned from day one): fast tree-based interpreterAOT compilation to C++ (required for consoles) → JIT via LLVM. Hybrid mode uses semantic hashing: unchanged functions stay AOT, changed ones fall back to the interpreter — ship a hotfix without a full rebuild.

See the design philosophy for the full story.

Installation

git clone https://github.com/GaijinEntertainment/daScript.git daslang
cd daslang
git submodule update --init --recursive

Building

cmake -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build --target daslang --config RelWithDebInfo

AOT usage

AOT compiles daslang scripts to C++ for native performance. Generate the C++ stub, then compile and link it with your host application:

./bin/daslang -aot main.das aot_main.cpp
clang++ host.cpp aot_main.cpp -Iinclude lib/liblibDaScript.a lib/liblibUriParser.a -o app

For a complete walkthrough, see the AOT tutorial and integration_cpp_13.cpp.

JIT usage

To use JIT, you need the LLVM 16.0.6 shared library at the path lib/LLVM.dll, this name is fixed because of dynamic bindings.

Once you have LLVM.dll, all you need is:

./bin/daslang -jit main.das

For more details on how JIT works and what can be configured, see the JIT Readme.

Embedding into cmake

To embed daslang into your CMake application, simply call find_package(DAS). This will provide the targets libDaScript and libDaScriptDyn. For an example of using daslang as an external project (including usage for dynamic modules) see this demo.

Package manager (daspkg)

A built-in package manager in utils/daspkg/ handles installing, updating, and building daslang packages — both pure-daslang and C++ native modules.

# Install a package from the index
./bin/daslang utils/daspkg/main.das -- install das-claude

# Install from a git URL
./bin/daslang utils/daspkg/main.das -- install github.com/user/repo

# Search the package index
./bin/daslang utils/daspkg/main.das -- search json

See utils/daspkg/README.md for the full command reference and package authoring guide.

VS Code extensions

MCP server (AI tool integration)

An MCP server in utils/mcp/ exposes 29 compiler-backed tools to AI coding assistants (Claude Code, etc.): compilation diagnostics, type inspection, go-to-definition, find-references, AST dump, AOT generation, expression evaluation, parse-aware grep, package management, and more.

No extra build dependencies (stdio transport). See utils/mcp/README.md for setup and configuration.

Tree-sitter grammar

A full tree-sitter grammar for daslang lives in tree-sitter-daslang/. It parses 99.4% of the codebase (all valid files) and is built automatically by CMake as a shared library.

Use it for:

  • Syntax highlightingqueries/highlights.scm included, works in editors that support tree-sitter (Neovim, Helix, Zed)
  • Parse-aware search — via ast-grep (sg) for structural code search across .das files
  • Editor extensionstree-sitter-daslang/editors/zed/ includes a Zed extension

Build the grammar:

cmake --build build --target tree_sitter_daslang

About

daslang - high-performance statically strong typed scripting language

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors