Skip to content

Latest commit

 

History

History
273 lines (161 loc) · 16.2 KB

vbook_01.md

File metadata and controls

273 lines (161 loc) · 16.2 KB

第1章 V编程简介

V编程语言是一种静态类型的编译编程语言,用于构建可维护和健壮的软件应用程序。

它具有高性能和简单性,这使得软件程序员可以快速原型化可扩展的应用程序。

您可以编写简单和使用V进行最小抽象的清洁代码。

V具有与C一样快的性能。

V不是从任何其他编程语言派生的,而是由V本身编写并在不到1秒的时间内编译自己。

V的设计受到编程语言的影响,例如Go,Rust,Oberon,Swift,Kotlin和Python。

V lang与流行的Go编程语言相比有几乎相似的语法。

V lang是一个简单,快速,安全和编译的编程语言。

V默认提供所有安全功能,例如不可变变量,不可变结构和纯函数。

V为Go编程提供了很好的并发支持。

在本章中,我们将涵盖以下主题:

  • V的过去,现在和未来

  • V是一种静态类型和编译的编程语言

  • 简单易维护的语法

  • 向后兼容性,稳定性和易于升级到未来版本

  • V编程的特点

  • V作为框架

  • V支持的操作系统

通过本章的学习,您将了解V语言及其特性。您还将了解到Vinix,一个完全使用V编写的操作系统。

让我们开始我们的旅程,了解V是如何诞生的,谁创造了它,以及它的未来。

V的过去、现在和未来

V是由Alexander Medvednikov于2019年初创建的一种新的编程语言。创作者对V语言及其提供的功能有着广泛的愿景。因此,V语言及其各种功能正在进行大量的开发。官方网站是:https://vlang.io/。 V编程语言是开源的,根据MIT许可证授权。您可以在其官方GitHub存储库:https://github.com/vlang/v 上参考V的整个源代码。

V拥有一个活跃的开发者和贡献者社区。社区非常活跃,对在GitHub上提出的问题做出响应。您可以在: https://github.com/vlang/v/discussions 参与讨论,团队也可在Discord上使用:https://discord.gg/vlang。

V具有许多与C相当的性能优化,与其他编程语言(如Go、Java或Python)相比。

V是一种静态类型和编译的编程语言

编程语言旨在具有某些键入和执行现象。键入可以指静态键入或动态键入,而执行现象可以指编译或解释。让我们更详细地看一下这些术语。

静态类型与动态类型

当变量的类型检查发生在编译时而不是运行时时,编程语言被称为静态类型。

在动态类型的编程语言中,类型是根据分配给变量的值在运行时确定的。动态类型编程语言的优点是程序员在编码时不必显式地提到变量的类型。这种能力可以简化和加快开发时间。

编译与解释语言

当代码直接转换为机器代码或字节代码时,编程语言被称为编译。这种现象使得结果程序运行比解释语言快得多。V每CPU每秒编译约120万行代码(LOC)。

另一方面,解释一词指的是解释器逐行执行命令运行程序的编程语言。这种现象使解释语言比编译语言慢得多。

V编程语言是一种静态类型的编译语言。因此,在V中进行类型检查就发生在编译时。此外,当您构建V程序时,它会生成一个可执行文件作为输出,其中包含程序中编写的所有指令转换为机器代码。

简单易维护的语法

正如我们已经了解的,V受到Go编程语言的启发,其设计也受到Oberon、Rust、Swift、Kotlin和Python的影响。V在语法和语义方面提供了最简单的编码样式形式。

如果您是Go程序员,那么在V中编写程序会让您兴奋不已,因为语法的简单性。V提供的语法简单性让这种编程语言的初学者快速学习并理解基础知识,而不是试图学习语义。

V需要类似或更少的LOC来模拟用Go编写的功能。它只有一种标准的编写代码格式,这由vfmt管理,这是一个内置库,可帮助格式化代码。vfmt根据全球唯一的编码标准严格格式化您的代码,适用于所有V项目。

编写简单程序只需要以下三行代码:

fn main() {
    println('Hello, from V lang!')
}

你甚至不需要fn main() {和闭合括号}。只需将以下行放在名为hello.v的文件中,并使用v run hello.v命令运行它:

println('Hello, from V lang!')

与V相比,我们可以在一行中编写简单的程序,而在格式化后编写的类似程序需要至少7个LOC,如下所示:

package main
import "fmt"
func main() {
    fmt.Println("Hello from Go lang!")
}

可以看到,与前面的代码相比,V程序显示得简洁而最小,同时提供可读性并避免了许多不必要的导入。

向后兼容性,稳定性和易于升级到未来版本

V编程语言在撰写本书时仍处于开发阶段。但是自其问世以来,它已经发展了很多,并且得到了全球软件工程社区的高度赞赏。本书试图在整个书中详细介绍V已经获得的各种编程功能。

尽管值得注意的是,在撰写本书时,V仍处于开发阶段,但从版本1开始,它将非常稳定,并且还提供向后兼容性保证。 V的格式化程序vfmt会自动为您升级代码。因此,您无需在升级V版本时手动识别不兼容的语法。

V编程的特点

尽管是一种非常新的和不断发展的编程语言,但V具有满足现代程序员需求的所有最受追捧的功能。在本节中,我们将探讨V的各种功能。

性能

V具有Clang,GCC或MSVC作为其主要后端,具体取决于操作系统,这使其能够编译为可读的C。使用这些编译器作为主要后端允许V与C轻松互操作。 V通过使用值类型和字符串缓冲区进行创新的内存管理,执行最小量的内存分配。使用V编写的程序会编译为本机二进制文件,没有任何依赖项。此外,V将整个应用程序编译为单个二进制文件,这使得部署变得容易。

速度

撰写本书时,根据官方网站https://vlang.io/,使用Clang后端,V每秒编译约110k LOC,每个CPU核心。使用x64和TCC后端,V每个CPU代码编译约1百万LOC。

没有空值

空值表示什么也没有。空值既不表示空值也不表示默认值。在编程语言中使用空值强制您使用多个检查处理空值场景。如果错过这些检查,可能会导致错误。 与Java,C#,Python或Go等其他编程语言不同,V没有空值或nil值。这是因为V中的所有类型默认情况下都是零。零意味着它们被分配了默认值,例如字符串类型的空字符串,int的0和布尔类型的false。 因此,V不依赖于编译器来检查类型是否为空,从而防止程序创建多个错误。

没有全局变量

全局变量允许您在应用程序级别维护状态。虽然这看起来很令人舒适,但全局变量会慢慢导致可靠性问题,这是由于这些变量上的越来越多的参与者而引起的。 在V中,默认情况下禁用全局变量。可以使用__global关键字声明这些全局变量,并使用-enable-globals参数运行V程序。 V促进使用全局变量的原因是允许实现低级应用程序,例如编程OS内核或系统驱动程序。在这种情况下,您可能需要具有可以全局访问的变量。

没有未定义的值

在V中,当您声明任何类型的变量时,必须对其进行初始化。 否则,会导致编译错误。此外,在结构体的情况下,结构体的字段会被清零为其默认值,这在第8章"结构体"中有详细介绍。

错误处理

V对于处理错误有一个非常简单的方法。您可以使用or {}块处理这些错误,也可以使用可选运算符?让错误传播。您还可以使用内置的error方法构建自定义错误,该方法接受一个字符串作为输入参数。处理错误的不同方法将在第7章"函数"中的"函数可以具有可选的返回类型"部分中进行演示。

强大的并发性

V具有非常强大的并发框架。对于在高端计算设备上运行的应用程序,能够有效地利用其资源(例如CPU)非常重要。通过V的内置并发模型,使用go关键字,您可以在其他线程上并发地运行函数,这些线程与主程序运行的线程不同。并发运行的函数称为协程。

您可以使用rlocks关键字强制执行只读锁定或使用lock关键字强制执行读/写/修改锁定来同步协程之间的数据。这种方法在第10章"并发性"中的"在主线程和并发任务之间共享数据"部分中进行了演示。使用传统的并发同步技术,协程通过共享数据或内存进行通信。

由于创建共享变量并手动强制执行锁定通常很麻烦,因此V具有一个名为sync的内置库,该库实现了称为通道的高级并发模式。通道允许您通过在协程之间建立通信通道来共享数据。通道充当中介,其中一个协程将数据推入其中,其他通道将数据弹出其中。我们将学习有关通道的信息,以及如何使用缓冲和非缓冲通道以及其特性的信息,这些信息在第11章"通道-高级并发模式"中。

易于交叉编译

V允许您使用其跨平台编译功能生成跨平台二进制文件。使用此功能,您可以从unix操作系统生成针对unix操作系统变体以及Windows或macOS的应用程序可执行文件。从unix操作系统,例如Ubuntu,创建名为hello.v的文件,并将以下代码添加到其中:

module main

fn main() {
    os := $if windows { 'Windows' } $else { 'Unix' }
    println('Hello, $os user!')
}

前面代码中的$符号告诉编译器立即在编译时评估以下if条件。此外,windows是一个内置术语,用于标识操作系统类型。

使用v run hello.v命令运行前面的代码。您将看到输出Hello,Unix user!

从unix操作系统,您可以运行以下命令以创建针对Windows操作系统的交叉编译可执行文件。

在为hello.v程序生成交叉编译二进制文件之前,您需要安装mingw-64,该软件包用于生成针对Windows操作系统的可执行文件。要安装mingw-64,请运行以下命令:

sudo apt install -y mingw-w64

或者,您可以在基于Debian的发行版上尝试sudo apt install -y mingw-w64,或者在Arch上尝试sudo pacman -S mingw-w64-gcc

安装mingw-64后,从Ubuntu操作系统运行以下命令以生成可在Windows操作系统上运行的可执行文件,如下所示:

v -os windows hello.v

前面的命令将生成一个名为hello.exe的可执行文件。现在,将.exe文件传输到Windows操作系统。从命令提示符运行可执行文件将输出Hello,Windows user!

您还可以交叉编译以从Windows操作系统生成unix二进制文件。您需要安装Windows的Clang,如:https://clang.llvm.org/get_started.html 所述,并运行以下命令,该命令生成unix二进制文件:

v -os linux hello.v

类似地,要生成macOS的可执行文件,请运行以下命令:

v -os macos hello.v

V 转换为 JavaScript

除了 C 作为主要后端之外,V 还具有 JavaScript 和 WASM 后端。V 程序可以转换为 JavaScript。要将 hello.v 转换为 JavaScript,可以运行以下命令:

v -o hello.js hello.v

与前面的命令一样简单。结果将生成一个名为 hello.js 的 JavaScript 文件,其中反映了 hello.v 程序中编写的功能。

分析

V 具有内置的分析工具,您可以使用它来分析程序的行为或每个调用函数的平均调用次数。您可能需要此信息来调试和优化应用程序代码。要针对 V 程序运行分析器,比如说 hello.v,运行以下命令:

v -profile profile.txt hello.v

注意使用 -profile 参数,后跟文本文件。运行前面的命令会生成 hello.v 的二进制文件。运行二进制文件会生成 profile.txt,其中包含所有函数调用的详细列表,其中每个文本文件中的列表示调用次数、每次调用的平均时间和每次调用的总时间。

V作为框架

随着 V 套件的包,它可以被认为是等同于框架。框架通常包括完全膨胀的编程功能的所有功能,以及平滑地插入和播放外部包的能力。使用 V,您可以编写企业级软件,即使它仍在开发中。在本章的以下部分中,我们将查看使用 V 编写和实现的各种库和功能套件,这将帮助我们构建强大的软件应用程序。

使用 autofree 引擎进行内存管理

V 提供了具有自动垃圾收集功能的强大内存管理。大多数对象都由 V 的 autofree 引擎释放。从 V 版本 0.3 开始,autofree 引擎默认启用。您还可以使用 -autofree 标志强制启用 autofree 引擎。

借助 autofree 引擎,V 编译器在编译期间调用必要的调用以自动释放对象。一小部分对象通过引用计数从内存中释放。V 还提供了关闭自动垃圾收集功能的能力,借助 -noautofree 标志。

内置 ORM

编程语言不太可能具有内置的对象关系映射器(ORM),但 V 具有。尽管在编写本书时 orm 库处于 alpha 状态,但它具有所有基本功能,足以实现具有关系数据库作为后端的数据驱动应用程序。

目前,orm 库支持 SQLite、MySQL 和 Postgres,并计划支持流行的关系数据库,如 MSSQL 和 Oracle。

内置 Web 服务器

vweb Web 服务器是一个内置库。尽管在编写本书时它处于 alpha 状态,但它在当前状态下提供了各种功能,包括以下功能:

  • 内置路由。

  • 处理参数。

  • 模板引擎。

  • 非常快的性能,例如 Web 上的 C。

  • 使用 vweb 编写的项目生成单个二进制文件,从而简化了部署。

您将学习如何使用 vweb 实现具有 RESTful 端点的微服务,以及其他库,如 orm 和 json,在第 14 章中构建微服务。

本机跨平台 GUI 库

V具有跨平台 ui 库。使用此库,您可以利用构建跨平台 GUI 应用程序的能力。ui 库可以在官方 GitHub 存储库中找到,网址为 https://github.com/vlang/ui,其许可证为 GPL 3.0。

V具有使用本地GUI工具包的ui模块:在Windows上使用WinAPI/GDI+,在macOS上使用Cocoa。在Linux上,使用自定义绘图。

Vinix - 用V编写的操作系统/内核

Vinix是编写现代,快速和有用的操作系统的努力,使用V编写。 Vinix是用V编写的操作系统/内核,旨在有助于编写低级软件。

Vinix操作系统的许可证为GPL 2.0,您可以在其官方GitHub存储库上找到其整个源代码 https://github.com/vlang/vinix。 您始终可以从官方链接 https://builds.vinix-os.org/repos/files/vinix/latest/vinix.iso 下载Vinix操作系统的最新版本。

Vinix旨在具有以下功能:

  • 制作可用的操作系统,可在模拟器,虚拟机和物理硬件上运行
  • 针对现代64位体系结构,CPU功能和多核计算
  • 保持与Linux的良好源级兼容性,有助于在Vinix和Linux之间移植程序
  • 探索V在裸机编程中的能力
  • 根据裸机编程的不寻常需求改进编译器

V支持的操作系统

V编程语言是跨平台兼容的。 V语言在几乎所有主要操作系统上运行。 V在所有版本的Windows上运行,在所有unix变体(如CentOS,Fedora和Ubuntu)上运行,也在macOS上运行。 V还在称为Android的流行移动操作系统上运行。 V在支持Windows子系统的所有Windows操作系统变体上运行。 V也可以用于物联网(IoT),因为它支持在物联网平台(如Raspberry Pi)上运行。

总结

在本章中,我们从简要介绍V编程开始。我们看了V的过去,现在和未来。

然后,我们探索了V语言,因为它是一种静态类型和编译的编程语言,并了解了它在编写代码方面提供的简单性。我们还了解到,即使V仍在开发和不断发展,它也提供了保证向后兼容性,稳定性和易于升级到未来版本的功能。

随后,我们了解了V编程的各种功能,使用V编写的操作系统/内核Vinix,并将V视为框架。

最后,我们了解了V支持的操作系统。

在下一章中,我们将学习如何在Windows和Ubuntu操作系统上安装V。我们还将学习如何将V可执行文件添加到环境变量中,以便可以从操作系统中的任何目录访问它。