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.