Se ha lanzado el lenguaje V (Vlang) 0.4.1. Los principales cambios se centran en mejorar las funciones del lenguaje, los analizadores, las bibliotecas estándar y los cambios relacionados con las partes internas del compilador.
- Implementar
Enum.from_string(name string)
la conversión de cadenas a valores de enumeración. - no permitir el uso de punteros de función no inicializados
- arreglar estructura anónima con expr predeterminada
- Soporte para usar const como valor de enumeración
- No permitir que funciones estáticas se declaren como receptores de métodos
- reparar
for i++; i<10; i++ {
Consulte las notas de la versión para obtener más detalles .
V es un lenguaje estático que combina la simplicidad de Go y las características de seguridad de Rust. El autor dijo que V es muy similar a Go. Si conoces Go, ya conoces el 80% de V. Mejora de V sobre la base de Go: https://vlang.io/compare#go .
V características principales
- Simple (el autor afirma que V se puede aprender en menos de una hora)
- Compilación rápida (el compilador tiene solo 400 kb y no hay dependencias de terceros)
- Facilidad de desarrollo: V se compila en menos de un segundo
- Seguridad: sin valores nulos, sin variables globales, sin valores indefinidos, detección de límites, uso predeterminado de estructuras inmutables
- Soporte para conversión C/C++
- Compilación cruzada fácil de usar
- Proporciona una biblioteca de interfaz de usuario multiplataforma
- Biblioteca de gráficos incorporada
- ORM incorporado
- Marco web incorporado
- ……
Código de muestra
Acceso a la base de datos:
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
}
}
desarrollo web:
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
}