Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. https://vlang.io
 
 
Go to file
Alexander Medvednikov 249fa95eab Revert 'compiler: allow mut passed as argument to be modified'. This broke 2019-06-29 11:42:47 +02:00
.github Update issue templates 2019-06-28 14:08:41 +02:00
base64 base64: Rewrite base64_decode() and add some tests 2019-06-27 20:06:00 +02:00
builtin fix_replace 2019-06-28 17:24:56 +02:00
compiler Revert 'compiler: allow mut passed as argument to be modified'. This broke 2019-06-29 11:42:47 +02:00
examples tetris improvements 2019-06-28 21:40:47 +02:00
gg tetris improvements 2019-06-28 21:40:47 +02:00
gl gl: Remove C hashes 2019-06-28 17:26:11 +02:00
glfw tetris improvements 2019-06-28 21:40:47 +02:00
glm fix tests 2019-06-26 19:37:02 +02:00
gx Fixed typo in gx.v 2019-06-25 15:01:35 +02:00
http `mut v :=` update examples 2019-06-28 15:24:48 +02:00
json some more tests 2019-06-27 15:01:09 +02:00
log replace ugly `tos2(bytes)` with `string(bytes)` 2019-06-27 12:50:02 +02:00
math math: add tau constant, add factorial function 2019-06-27 19:16:02 +02:00
os fix windows build 2019-06-29 11:03:39 +02:00
rand Replace all remaining C code with V in the compiler and vlib (hoorah!) 2019-06-27 23:11:27 +02:00
stbi make lots of functions public 2019-06-26 17:51:05 +02:00
sync sync public fns 2019-06-26 18:29:43 +02:00
termcolor add log and rename colors 2019-06-27 02:20:04 +02:00
tests some more tests 2019-06-27 15:01:09 +02:00
thirdparty add `khrplatform.h` 2019-06-24 12:28:42 +02:00
time time: clean up 2019-06-28 16:05:55 +02:00
.gitattributes .gitattributes etc 2019-06-22 20:24:15 +02:00
.gitignore fix tests 2019-06-26 19:37:02 +02:00
.travis.yml windows build 2019-06-29 11:04:29 +02:00
CHANGELOG.md V 0.1.8 2019-06-28 13:49:34 +02:00
CONDUCT.md Update CONDUCT.md 2019-06-24 18:07:25 +02:00
CodeStructure.md Create CodeStructure.md 2019-06-25 12:06:55 +02:00
LICENSE README.md 2019-06-22 20:22:41 +02:00
README.md Update README.md 2019-06-28 21:37:22 +02:00
azure-pipelines.yml Update azure-pipelines.yml 2019-06-27 19:11:39 +02:00

README.md

The V Programming Language 0.1.x

Build Status Build Status

https://vlang.io

Documentation: https://vlang.io/docs

Twitter: https://twitter.com/v_language

Discord (primary community): https://discord.gg/n7c74HM

Installing V: https://github.com/vlang/v#installing-v-from-source

Key Features of V

  • Simplicity: the language can be learned in half an hour, less if you already know Go
  • Fast compilation: ~100k loc/s right now, ~1.2 million loc/s once x64 generation is mature enough
  • Easy to develop: V compiles itself in less than a second
  • Performance: within 5% of C
  • Safety: no null, no globals, no undefined behavior, immutability by default
  • C to V translation
  • Hot code reloading
  • Powerful UI and graphics libraries
  • Easy cross compilation
  • REPL

V 1.0 release is planned for December 2019.

Notes

GitHub marks V's code as written in Go. It's actually written in V, GitHub doesn't support the language yet.

The compilation is temporarily slower for this release:

  • Debug builds are used (use ./v -prod -o v . to get faster compilation).
  • vlib is recompiled with every program you build.
  • The new formatter runs on every single token and slows the compiler down by ~20%. This will be taken care of.
  • There are a lot of known issues that are quick to fix (like function lookups being O(n)).

There's some old hacky code written when V was 2 months old. All of it will be quickly cleaned up. There are ~500 lines of C code, which will be removed by the end of June.

Code structure

https://github.com/vlang/v/blob/master/CodeStructure.md

Installing V from source

Linux and macOS

You'll need Clang or GCC. On macOS run xcode-select --install if you don't have XCode or XCode tools installed.

# You can clone V anywhere
git clone https://github.com/vlang/v
cd v/compiler
make

Or build without make:

# Download the V compiler's source translated to C
curl -sO https://raw.githubusercontent.com/vlang/vc/master/v.c
cc -std=gnu11 -w -o v v.c  # Build it with Clang or GCC
./v -o v .                 # Use the resulting V binary to build V from V source
./v -o v .                 # Build the compiler again to make sure it works

That's it! Now you have a V executable at v/compiler/v.

You can create a symlink so that it's globally available:

sudo ln -s [path to V repo]/compiler/v /usr/local/bin/v

V is being constantly updated. To update V, simply run

git pull origin master
cd compiler/
make clean
make

Windows

V works great on Windows Subsystem for Linux. The instructions are the same as above.

If you want to build v.exe on Windows without WSL, you can use MinGW-w64 or Visual Studio.

MinGW-w64

Download and install MinGW-w64.

Make sure the C:/mingw-w64/bin directory is in system's PATH.

# You can clone V anywhere
git clone https://github.com/vlang/v
cd v/compiler
# Download the V compiler's source translated to C
curl -sO https://raw.githubusercontent.com/vlang/vc/master/v.c
gcc -std=gnu11 -w -o v.exe v.c  # Build it with GCC

Testing

$ cd examples
$ v run hello_world.v
hello world

$ v
V 0.1.2
Use Ctrl-D to exit

>>> println('hello world')
hello world
>>>

Now if you want, you can start tinkering with the compiler. If you introduce a breaking change and rebuild V, you will no longer be able to use V to build itself. So it's a good idea to make a backup copy of a working compiler executable.

Running the examples

v hello_world.v && ./hello_world    # or simply
v run hello_world.v                 # this builds the program and runs it right away

v word_counter.v && ./word_counter cinderella.txt
v run news_fetcher.v
v run tetris.v

In order to build Tetris and anything else using the graphics module, you will need to install glfw and freetype.

If you plan to use the http package, you also need to install libcurl.

macOS:
brew install glfw freetype curl

Ubuntu:
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev libcurl3-dev

Arch:
sudo pacman -S glfw-x11 curl freetype2

glfw and libcurl dependencies will be removed soon.