V, also known as vlang, is a statically typed, compiled programming language created by Alexander Medvednikov in early 2019.[4] It was inspired by the language Go, and other influences including Oberon, Swift, and Rust.[5][6][7] It is free and open-source software released under the MIT License, and currently in beta.[8]
Paradigms | Multi-paradigm: functional, imperative, structured, concurrent |
---|---|
Designed by | Alexander Medvednikov[1] |
First appeared | 20 June 2019[2] |
Stable release | 0.4.8[3]
/ September 28, 2024 |
Typing discipline | static, strong, inferred |
Memory management | optional (automatic or manual) |
Implementation language | V |
Platform | x86-64 |
OS | Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, DragonflyBSD, Solaris |
License | MIT |
Filename extensions | .v , .vsh |
Website | vlang |
Influenced by | |
Go, Kotlin, Oberon, Python, Rust, Swift |
The goals of V include ease of use, readability, and maintainability.[9][10]
History
editAccording to one of the developers, the new language was created as a result of frustration with existing languages being used for personal projects.[11] The language was originally intended for personal use, but after it was mentioned publicly and gained interest, it was decided to make it public. V was initially created in order to develop a desktop messaging client known as Volt.[6] Upon public release, the compiler was written in V, and could compile itself.[4] Key design goals behind the creation of V were being easy to learn and use, higher readability, fast compilation, increased safety, efficient development, cross-platform usability, improved C interoperability, better error handling, modern features, and more maintainable software.[12][13][10][14]
V is released and developed through GitHub[15][6] and maintained by developers and contributors from the community.[4]
Features
editThis section may contain information not important or relevant to the article's subject. (November 2023) |
Safety
editV has policies to facilitate memory-safety, speed, and secure code.[7][17] The language has various default features for greater program safety.[7][17][6][9] It employs bounds checking, to guard against out of bounds usage of variables. Option/result types are used, where the option type (?
) can be represented by none
(among possible choices) and the result type (!
) can handle any returned errors. To ensure greater safety, the checking of errors are mandatory in V. By default, among the following are immutable: variables, structs, and function arguments. This includes string values are immutable, so elements can not be mutated. Other protections, which are the default for the language, are: no usage of undefined values, no shadowing of variables, no usage of null (unless code marked as unsafe), and no usage of global variables (unless enabled via flag).
Performance
editV uses value types and string buffers to reduce memory allocations.[18][19][17] The language can be compiled to human-readable C [4][20] and is considered to be as performant.[17]
Memory management
editThe language's 4 supported options for memory management are the following:[21][6][22][20]
- Use of an optional GC (that can be disabled) for handling allocations, and is the default.
- Manual memory management via disabling the GC (
-gc none
). - Autofree, which handles most objects via free call insertion, and then the remaining percentage is freed by GC (
-autofree
). - Arena allocation (
-prealloc
).
Source code translators
editV supports a source-to-source compiler (transpiler) and can translate C code into V.[23][24][10]
Working translators are also under development for Go, JavaScript, and WebAssembly.[25][26]
Syntax
editHello world
editThe "Hello, World!" program in V:[17]
fn main() {
println("Hello, World!")
}
Variables
editVariables are immutable by default and are defined using :=
and a value. Use the mut
keyword to make them mutable. Mutable variables can be assigned to using =
:[27]
a := 1
mut b := 2
b = 3
Redeclaring a variable, whether in an inner scope or in the same scope, is not allowed:[27]
a := 1
{
a := 3 // error: redefinition of a
}
a := 2 // error: redefinition of a
Structs
editStruct example:[12]
struct Point {
x int
y int
}
mut p := Point {
x: 10
y: 20
}
println(p.x) // Struct fields are accessed using a dot
// Alternative literal syntax for structs with 3 fields or fewer
p = Point{10, 20}
assert p.x == 10
Heap structs
editStructs are allocated on the stack by default. To allocate a struct on the heap and get a reference to it, the &
prefix can be used:[12]
struct Point {
x int
y int
}
p := &Point{10, 10}
// References have the same syntax for accessing fields
println(p.x)
Methods
editMethods in V are functions defined with a receiver argument. The receiver appears in its own argument list between the fn keyword and the method name. Methods must be in the same module as the receiver type.
The is_registered method has a receiver of type User named u. The convention is not to use receiver names like self or this, but preferably a short name. For example:[9][12]
struct User {
age int
}
fn (u User) is_registered() bool {
return u.age > 16
}
user := User{
age: 10
}
println(user.is_registered()) // "false"
user2 := User{
age: 20
}
println(user2.is_registered()) // "true"
Error handling
editOptional types are for types which may represent none. Result types may represent an error returned from a function.
Option types are declared by prepending ?
to the type name: ?Type. Result types use !
: !Type.[9][7][21]
fn do_something(s string) !string {
if s == "foo" {
return "foo"
}
return error("invalid string")
}
a := do_something("foo") or { "default" } // a will be "foo"
b := do_something("bar") or { "default" } // b will be "default"
c := do_something("bar") or { panic("{err}") } // exits with error "invalid string" and a traceback
println(a)
println(b)
See also
editReferences
edit- ^ "Creator of V". GitHub.
- ^ "First public release". GitHub. 20 June 2019.
- ^ "Release 0.4.8". 28 September 2024. Retrieved 28 September 2024.
- ^ a b c d Rao 2021.
- ^ Lewkowicz, Jakub (25 June 2019). "SD Times news digest: V language now open sourced". SD Times. Retrieved 25 June 2019.
- ^ a b c d e James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
- ^ a b c d Umoren, Samuel. "Building a Web Server using Vlang". Section. Archived from the original on 13 March 2023. Retrieved 5 April 2021.
- ^ "The V Programming Language". vlang.io. Retrieved 4 November 2023.
- ^ a b c d Knott, Simon (27 June 2019). "An introduction to V". Retrieved 27 June 2019.
- ^ a b c Nasufi, Erdet. "An introduction to V - the vlang". DebConf. Retrieved 24 July 2022.
- ^ "How To Maintain And Iterate With V - SYNCS 2023 (Sydney Computing Society at the University of Sydney)". YouTube. Retrieved 18 October 2023.
- ^ a b c d Independent Laboratory 2020.
- ^ Lyons 2022.
- ^ "V language: simple like Go, small binary like Rust". TechRacho. Retrieved 3 March 2021.
- ^ "GitHub Programming Languages (repository rankings)" – via OSS.
- ^ "V's official mascot". GitHub. Retrieved 8 November 2023.
- ^ a b c d e Galuh, Rosa (8 August 2022). "A Brief Introduction to the V Language". MUO. Retrieved 8 August 2022.
- ^ Rao 2021, p. 7.
- ^ "The V programming language is now open source". Packt Hub. 24 June 2019. Retrieved 24 June 2019.
- ^ a b Chakraborty 2023.
- ^ a b Tsoukalos 2022.
- ^ Emy, Jade (29 August 2023). "The programming language V 0.4 Beta is available". developpez. Retrieved 29 August 2023.
- ^ Choudhury, Ambika (9 February 2022). "Meet V, The New Statically Typed Programming Language Inspired By Go & Rust". Analytics India Magazine (AIM). Retrieved 7 July 2024.
- ^ Schlothauer, Sarah. "The trendy five: Blazing hot GitHub repos in June 2019". JAXenter. Archived from the original on 17 February 2020. Retrieved 1 July 2019.
- ^ "Convert Go to V with go2v". Zenn. 26 January 2023. Retrieved 26 January 2023.
- ^ "The V WebAssembly Compiler Backend". l-m. 26 February 2023. Retrieved 26 February 2023.
- ^ a b Rao 2021, pp. 28–40.
Further reading
edit- The V Programming Language basic (in Japanese). Independent Laboratory. 20 June 2020. ASIN B08BKJDRFR.
- Rao, Navule Pavan Kumar (10 December 2021). Getting Started with V Programming. Packt Publishing. ASIN B09FKK3JL7. ISBN 978-1839213434. OCLC 1290492862.
- Lyons, Dakota "Kai" (13 April 2022). Beginning with V Programming. Independently Published. ASIN B09XSZKTJ1. ISBN 979-8801499963.
- Chakraborty, Soubhik; Haldar, Subhomoy (6 December 2023). Randomness Revisited using the V Programming Language. Nova Science Publishers. doi:10.52305/CVCN5241. ISBN 979-8891133280. S2CID 265170755.
- Tsoukalos, Mihalis (May 2022). "Discover the V language". Linux Format Magazine (288). ISSN 1470-4234.