2019-06-28 01:47:55 +03:00
# The V Programming Language 0.1.x
2019-06-22 21:22:41 +03:00
2019-07-22 13:16:24 +03:00
[![Build Status ](https://travis-ci.org/vlang/v.svg?branch=master )](https://travis-ci.org/vlang/v)
2019-06-25 13:27:06 +03:00
2019-06-22 21:22:41 +03:00
https://vlang.io
Documentation: https://vlang.io/docs
Twitter: https://twitter.com/v_language
2019-06-24 03:11:26 +03:00
Discord (primary community): https://discord.gg/n7c74HM
2019-06-24 03:04:58 +03:00
2019-06-23 17:13:56 +03:00
Installing V: https://github.com/vlang/v#installing-v-from-source
2019-06-22 21:22:41 +03:00
2019-06-24 17:04:19 +03:00
## Key Features of V
- Simplicity: the language can be learned in half an hour, less if you already know Go
2019-06-24 19:53:22 +03:00
- Fast compilation: ~100k loc/s right now, ~1.2 million loc/s once x64 generation is mature enough
2019-06-24 17:07:41 +03:00
- Easy to develop: V compiles itself in less than a second
2019-06-24 17:04:19 +03:00
- Performance: within 5% of C
2019-06-28 02:54:42 +03:00
- Safety: no null, no globals, no undefined behavior, immutability by default
2019-06-24 17:04:19 +03:00
- C to V translation
2019-06-24 17:36:30 +03:00
- Hot code reloading
2019-06-24 17:04:19 +03:00
- Powerful UI and graphics libraries
- Easy cross compilation
- REPL
2019-06-29 17:52:36 +03:00
V 1.0 release is planned for December 2019. Right now V is in an alpha stage.
2019-06-24 17:04:19 +03:00
2019-06-25 14:16:48 +03:00
## Notes
2019-06-24 17:36:30 +03:00
GitHub marks V's code as written in Go. It's actually written in V, GitHub doesn't support the language yet.
2019-06-24 17:07:41 +03:00
2019-06-25 13:44:56 +03:00
The compilation is temporarily slower for this release:
2019-06-25 06:46:45 +03:00
2019-06-30 16:26:03 +03:00
- Debug builds are used (use `./v -prod -o v compiler` to get faster compilation).
2019-06-26 16:23:59 +03:00
- vlib is recompiled with every program you build.
2019-06-25 13:05:00 +03:00
- The new formatter runs on every single token and slows the compiler down by ~20%. This will be taken care of.
2019-06-25 14:16:48 +03:00
2019-06-22 21:22:41 +03:00
2019-07-23 01:31:43 +03:00
2019-06-22 21:22:41 +03:00
## Installing V from source
2019-07-24 01:09:56 +03:00
### Linux, macOS, Windows, *BSD, WSL, Android, Raspbian
2019-06-22 21:22:41 +03:00
2019-06-25 16:14:19 +03:00
2019-06-22 21:22:41 +03:00
```bash
2019-06-25 03:02:05 +03:00
git clone https://github.com/vlang/v
2019-06-29 13:58:52 +03:00
cd v
2019-06-23 12:44:40 +03:00
make
2019-06-26 00:02:25 +03:00
```
2019-07-12 16:58:10 +03:00
2019-07-13 13:49:55 +03:00
That's it! Now you have a V executable at `[path to V repo]/v` . `[path to V repo]` can be anywhere.
2019-07-12 16:58:10 +03:00
### C compiler
You'll need Clang or GCC.
On macOS run `xcode-select --install` if you don't have XCode or XCode tools installed.
On Windows follow these instructions: [github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows ](https://github.com/vlang/v/wiki/Installing-a-C-compiler-on-Windows )
### Building without make
2019-06-26 00:02:43 +03:00
```bash
2019-06-26 00:02:25 +03:00
# Download the V compiler's source translated to C
2019-06-29 17:54:22 +03:00
curl -O https://raw.githubusercontent.com/vlang/vc/master/v.c
2019-07-18 04:03:33 +03:00
cc -std=gnu11 -w -o v v.c -lm # Build it with Clang or GCC
./v -o v compiler # Use the resulting V binary to build V from V source
2019-06-22 21:22:41 +03:00
```
2019-07-13 13:49:55 +03:00
(These instructions won't work on Windows, use `make.bat` instead).
2019-06-22 21:22:41 +03:00
2019-07-12 16:58:10 +03:00
### Symlinking and updates
2019-06-23 14:27:43 +03:00
2019-06-22 21:22:41 +03:00
You can create a symlink so that it's globally available:
```
2019-06-29 13:58:52 +03:00
sudo ln -s [path to V repo]/v /usr/local/bin/v
2019-06-22 21:22:41 +03:00
```
2019-06-27 23:32:29 +03:00
V is being constantly updated. To update V, simply run
```
2019-07-31 05:53:24 +03:00
v up
2019-06-27 23:32:29 +03:00
```
2019-07-23 03:41:55 +03:00
## Docker
```bash
git clone https://github.com/vlang/v
cd v
docker build -t vlang .
docker run --rm -it vlang:latest
v
```
2019-06-27 23:32:29 +03:00
2019-07-04 13:36:42 +03:00
2019-06-22 21:22:41 +03:00
### Testing
```
2019-06-26 18:58:59 +03:00
$ cd examples
$ v run hello_world.v
hello world
2019-06-22 21:22:41 +03:00
2019-06-26 18:58:59 +03:00
$ v
2019-06-30 16:26:03 +03:00
V 0.1.x
2019-06-22 21:22:41 +03:00
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
```
2019-06-26 19:04:10 +03:00
v hello_world.v & & ./hello_world # or simply
v run hello_world.v # this builds the program and runs it right away
2019-06-22 21:22:41 +03:00
v word_counter.v & & ./word_counter cinderella.txt
2019-06-24 18:13:02 +03:00
v run news_fetcher.v
2019-07-22 05:57:55 +03:00
v run tetris/tetris.v
2019-06-22 21:22:41 +03:00
```
2019-06-23 17:16:55 +03:00
< img src = 'https://raw.githubusercontent.com/vlang/v/master/examples/tetris/screenshot.png' width = 300 >
2019-06-22 21:22:41 +03:00
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.
```
2019-06-26 19:04:10 +03:00
macOS:
brew install glfw freetype curl
2019-06-25 21:48:34 +03:00
2019-06-22 21:22:41 +03:00
Ubuntu:
2019-06-24 05:35:15 +03:00
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev libcurl3-dev
2019-06-22 21:22:41 +03:00
2019-06-26 19:04:10 +03:00
Arch:
sudo pacman -S glfw-x11 curl freetype2
2019-06-22 21:22:41 +03:00
```
2019-06-24 19:53:22 +03:00
glfw and libcurl dependencies will be removed soon.
2019-07-22 17:07:37 +03:00
## Code structure
https://github.com/vlang/v/blob/master/CONTRIBUTING.md