Content deleted Content added
TurboSuperA+ (talk | contribs) flow, fixed wikilinks |
Wiki-link words and removed erroneous dead link |
||
(28 intermediate revisions by 9 users not shown) | |||
Line 1:
{{Short description|General-purpose programming language}}
{{Use dmy dates|date=November 2023}}{{Infobox programming language
| name = V
Line 24 ⟶ 21:
}}
'''V''', also known as '''vlang''', is a [[Static type checking|statically typed]], [[Compiled language|compiled]] [[programming language]] created by Alexander Medvednikov in early 2019.{{Sfn|Rao|2021}} It was inspired by [[Go (programming language)|Go]], and other programming languages including [[Oberon (programming language)|Oberon]], [[Swift (programming language)|Swift]], and [[Rust (programming language)|Rust]].<ref>{{cite web |last1=Lewkowicz |first1=Jakub |title=SD Times news digest: V language now open sourced |url=https://sdtimes.com/softwaredev/sd-times-news-digest-v-language-now-open-sourced-smartbear-acquires-bdd-provider-cucumber-and-kaggle-integrates-into-bigquery|publisher=[[SD Times]] |website=SD Times |date=25 June 2019 |access-date=25 June 2019}}</ref><ref name="hackaday">{{cite web |last1=James |first1=Ben |date=23 July 2019 |title=The V Programming Language: Vain Or Virtuous? |url=https://hackaday.com/2019/07/23/the-v-programming-language-vain-or-virtuous/ |access-date=23 July 2019
The goals of V include ease of use, [[Computer programming#Readability of source code|readability]], and [[Maintainability#Software|maintainability]].<ref name="Knott">{{cite web |last1=Knott |first1=Simon |date=27 June 2019 |title=An introduction to V |url=https://simonknott.de/articles/vlang/ |access-date=27 June 2019}}</ref><ref name="nasufi">{{cite web |last1=Nasufi |first1=Erdet |title=An introduction to V - the vlang|url=https://debconf22.debconf.org/talks/69-an-introduction-to-v-the-vlang/ |website=Debian Conference ([[Debian Conference|DebConf]]) |access-date=24 July 2022}}</ref><ref name="techgig">{{cite web |last1=Sharma| first1=Gaurav |title=Exploring the newest programming languages for developers in 2024 |url=https://content.techgig.com/technology/exploring-the-newest-programming-languages-for-developers-in-2024/articleshow/108624842.cms |publisher=[[TechGig.com]] |website=TechGig |date=March 19, 2024}}</ref>
==History==
V is released and developed through [[GitHub]],<ref>{{cite web |url=https://ossinsight.io/analyze/vlang/v#overview |title=GitHub Programming Languages (repository details) |via=[[Open-source software|OSS]] Insight}}</ref><ref name="hackaday"/> and maintained by developers and contributors internationally.{{Sfn|Rao|2021
[[File:Veasel.svg|thumb|Veasel is the official mascot of the V programming language<ref>{{cite web |url=https://github.com/vlang/v-mascot/ |title=V's official mascot |website=GitHub |access-date=8 November 2023}}</ref>]]
Line 39 ⟶ 36:
===Safety===
V has policies to facilitate memory-safety, speed, and secure code,<ref name="MUO">{{cite web |last1=Galuh |first1=Rosa |title=A Brief Introduction to the V Language |url=https://www.makeuseof.com/v-language-brief-introduction |publisher=[[Valnet]]|website=MakeUseOf (MUO) |date=8 August 2022 |access-date=8 August 2022}}</ref><ref name="HA">{{cite web |last1=Abbas |first1=Hazem |title=Introduction to V Language and Desktop App Development |url=https://medevel.com/v-desktop-app-tutorial/ |website=medevel |date=5 August 2024 |access-date=3 January 2025}}</ref>
=== Performance ===
V uses [[value type]]s and string buffers to reduce memory allocations.{{sfn|Rao|2021|p=7}}<ref>{{cite web |title=The V programming language is now open source |url=https://hub.packtpub.com/the-v-programming-language-is-now-open-sourced-is-it-too-good-to-be-true// |publisher=[[Packt Publishing]] |website=Packt Hub |date=24 June 2019 |access-date=24 June 2019}}</ref><ref name="MUO"/> The language can be compiled to human-readable C,<ref name="section"/>{{Sfn|Rao|2021}} and in terms of execution and compilation, it's considered to be as performant.<ref name="MUO"/><ref name="analyticsindiamag">{{
=== Memory management ===
V supports 4 memory management options:{{Sfn|Tsoukalos|2022}}<ref name="hackaday"/>{{sfn|Chakraborty|Haldar|2023}}
# Use of an optional [[Garbage collection (computer science)|garbage collection]] (GC), that can be disabled, for handling allocations, and is the default.
Line 53 ⟶ 50:
===Source code translators===
V supports a [[source-to-source compiler]] (transpiler) and can translate C code into V.<ref name="analyticsindiamag"
Working translators are also being developed for Go, [[JavaScript]], and [[WebAssembly]].<ref>{{cite web |title=Convert Go to V with go2v|url=https://zenn.dev/tkm/articles/go2v-with-go-lsd|website=Zenn |date=26 January 2023 |access-date=26 January 2023}}</ref><ref>{{cite web |title=The V WebAssembly Compiler Backend|url=https://l-m.dev/cs/the_v_webassembly_compiler_backend/|archive-url=https://web.archive.org/web/20240708075458/https://l-m.dev/cs/the_v_webassembly_compiler_backend/ |website=l-m |date=26 February 2023 |archive-date=8 July 2024}}</ref>{{Sfn|
== Syntax ==
=== Hello world ===
The [["Hello, World!" program]] in V:<ref name="MUO"/><ref name=":0">{{Cite web |title=V Documentation |url=https://docs.vlang.io/ |access-date=2025-08-25 |website=docs.vlang.io}} {{Free-content attribution|title = V Documentation| license statement URL =https://github.com/vlang/v?tab=MIT-1-ov-file| license=The MIT License|this = yes}}</ref>
<syntaxhighlight lang="v">
fn main() {
Line 67 ⟶ 64:
=== Variables ===
Variables are immutable by default and are defined using {{code|1=:=}} and a value. Use the {{code|mut}} [[reserved word]] (keyword) to make them mutable. Mutable variables can be assigned to using {{code|1==}}:{{sfn|Rao|2021|pp=28-40}}<ref name=":0" />
<syntaxhighlight lang="V">
mut
</syntaxhighlight>
Redeclaring a variable, whether in an inner scope or in the same scope, is not allowed:{{sfn|Rao|2021|pp=28-40}}<ref name=":0" />
<syntaxhighlight lang="V">
{
}
</syntaxhighlight>
=== Structs ===
Struct example:<ref name="Knott"/><ref name="section"/><ref name=":0" />
<syntaxhighlight lang="
struct
name string
score f32
}
// Struct fields can be initialized by name
var1 := Foo {
number: 21
name: "baz"
score: 2.5
}
// or by position
</syntaxhighlight>
=== Heap structs ===
By default, structs are allocated on the [[Stack_memory|stack]]. When structs are referenced by using the prefix {{code|1=&}} or have the {{code|1=[heap]}} attribute, they are allocated on the [[Heap-based_memory_allocation|heap]] instead:{{sfn|Rao|2021}}<ref name=":0" />
<syntaxhighlight lang="
struct
}
@[heap]
number f32
}▼
// Structs that are referenced are heap allocated
var1 := &Foo{2}
// Baz is always heap allocated because of its [heap] attribute
var2 := Baz{4.5}
</syntaxhighlight>
=== Methods ===
[[Method (computer programming)|Methods]] in V are functions defined with a receiver [[Parameter (computer programming)|argument]]. The receiver appears in its own argument list between the {{code|1=fn}} keyword and the method name. Methods must be in the same [[Modular programming|module]] as the receiver type.
The
struct Client {
enrolled bool
▲struct User {
}
fn (
return x.enrolled
}
println(Client{enrolled: true}.enrolled_status()) // true
println(Client{enrolled: false}.enrolled_status()) // false
▲}
</syntaxhighlight>
=== Error handling ===
<syntaxhighlight lang="V">
fn
if
}
println(
println(
</syntaxhighlight>
Line 177 ⟶ 174:
* {{Cite book |last1=Rao |first1=Navule Pavan Kumar |date=December 10, 2021 |title=Getting Started with V Programming |publisher=[[Packt Publishing]] |isbn=978-1839213434 |language=en |oclc=1290492862}}
* {{Cite book |last1=Lyons |first1=Dakota "Kai" |date=April 13, 2022 |title=Beginning with V Programming |publisher=Independently Published |isbn=979-8801499963 |language=en |ref=none}}
* {{cite journal |last1=Tsoukalos |first1=Mihalis |date=May 2022 |title=Discover the V language |publisher=[[Linux Format]]| journal=Linux Format Magazine |issue=288 |issn=1470-4234}}
* {{Cite book |last1=Chakraborty |first1=Soubhik |last2=Haldar |first2=Subhomoy |date=December 6, 2023 |title=Randomness Revisited using the V Programming Language |publisher=[[Nova Science Publishers]] |isbn=979-8891133280 |language=en
* {{Cite book |last1=Trex |first1=Nova |date=24 December 2024 |title=V Programming: Building Robust and Efficient Software Systems |publisher=Wang Press |isbn=979-8304813778}}
Line 186 ⟶ 183:
* [https://github.com/vlang/v/blob/master/doc/docs.md Documentation]
* [https://modules.vlang.io/ Modules]
* [https://www.youtube.com/watch?v=pchEsYwA74Q Video: How To Maintain And Iterate With V (Sydney Computing Society)]
* [https://www.youtube.com/watch?v=_dIAcNp9bJs Video: A small presentation of V's features at IBM]
[[Category:2019 software]]
|