Lenguaje V (Vlang) lanzado 0.4.1, un lenguaje estático seguro, rápido y compilable

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
  • repararfor 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 
} 

Supongo que te gusta

Origin www.oschina.net/news/256900/vlang-0-4-1-released
Recomendado
Clasificación