About this project
V is a statically typed, compiled programming language designed for building maintainable software. Its stated goals are simplicity, fast compilation, performance comparable to C, and safety. The compiler is written in V itself and can bootstrap in under a second on typical hardware.
Key characteristics described by the project:
- Simplicity: the language is intended to be learnable in a short time.
- Fast compilation: the README cites roughly 110k lines/second with a Clang backend and roughly 500k lines/second with native and tcc backends on a specific test machine.
- Self-hosting: V compiles itself quickly, and the main backend emits human-readable C.
- Safety features: no null, no globals, immutability by default, and work toward eliminating undefined behavior.
- Memory management options: garbage collection by default, plus manual (`-gc none`), arena allocation (`-prealloc`), and autofree (`-autofree`) modes.
- C-to-V translation, demonstrated with a DOOM translation demo.
- Hot code reloading.
- Built-in ORM and a built-in web framework (veb).
- C and JavaScript backends, plus a REPL.
- Cross-platform UI library and a built-in graphics library.
- Easy cross-compilation, including static binaries via Alpine/musl Docker images.
Installation is primarily from source: clone the repository and run `make` (or `makev.bat` on Windows, `gmake` on BSD/Solaris). The build downloads a bundled Tiny C Compiler when a compatible version exists. Docker and Alpine Dockerfiles are also provided. `v up` updates the compiler, and `v symlink` adds it to the PATH.
Editor and IDE support is available for Atom, CodeLite, Emacs, JetBrains, Sublime Text, Vim/Neovim, VS Code, and Zed, with language-server capabilities provided by v-analyzer.
Examples cover a hello world, word counter, news fetcher, Tetris, and 2048. GUI and game examples using the sokol or gg modules require additional system development libraries. Networking modules (net.http, net.websocket) and `v install` can use bundled Mbed-TLS or system OpenSSL via `-d use_openssl`. The sync module relies on libatomic.
The README notes that the language is pre-1.0 and may still change, with syntax changes largely handled by vfmt. After 1.0, the project plans a feature freeze similar to Go, with only bug fixes and performance improvements.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.