V (Vlang) 0.2 發布了,作者宣布這是首個主要版本,更新重點是提升穩定性和優化編譯時(compile-time)內存管理。
部分更新亮點
-autofree
參數對 compile-time 內存進行管理(計劃在 0.3 中默認啟用)foo(5)
代替foo<int>(5)
詳情查看 https://github.com/vlang/v/discussions/7474
V 0.3 Roadmap:https://github.com/vlang/v/blob/master/0.3_roadmap.txt
V 是一個集合了 Go 的簡單和 Rust 的安全特性的靜態語言,作者表示 V 與 Go 非常相似,如果你了解 Go,那麼就已經了解 80% 的 V。V 在 Go 的基礎上進行改進之處:https://vlang.io/compare#go。
V 主要特性
示例代碼
資料庫訪問:
struct User { /* ... */ }struct Post { /* ... */ }struct DB { /* ... */ }struct Repo <T> { db DB}fn new_repo<T>(db DB) Repo { return Repo<T>{db: db}}fn (r Repo) find_by_id(id int) T? { // `?` means the function returns an optional table_name := T.name // in this example getting the name of the type gives us the table name return r.db.query_one<T>('select * from $table_name where id = ?', id)}fn main() { db := new_db() users_repo := new_repo<User>(db) posts_repo := new_repo<Post>(db) user := users_repo.find_by_id(1) or { eprintln('User not found') return } post := posts_repo.find_by_id(1) or { eprintln('Post not found') return }}
網絡開發:
struct Story { title string}// Fetches top HN stories in 8 coroutines fn main() { resp := http.get('https://hacker-news.firebaseio.com/v0/topstories.json')? ids := json.decode([]int, resp.body)? mut cursor := 0 for _ in 0..8 { go fn() { for { lock { // Without this lock the program will not compile if cursor >= ids.len { break } id := ids[cursor] cursor++ } resp := http.get('https://hacker-news.firebaseio.com/v0/item/$id.json')? story := json.decode(Story, resp.body)? println(story.title) } }() } runtime.wait() // Waits for all coroutines to finish }