fbpx
维基百科

Vala

Vala是一門面向对象编程语言,由自举英语Self-hosting_(compilers)編譯器產生C语言代碼和使用GObject系統,允许在GNOME运行时库的基础上使用大量现代的编程技巧。通过使用GLibGObject,Vala提供了动态类型系统和基于引用计数(reference counting)系统的記憶體管理的功能。

Vala
编程范型面向对象结构化指令式
實作者Jürg Billeter, Raffaele Sandrini
发行时间2006年,​17年前​(2006
当前版本
  • 0.57.0 (2023年4月11日;穩定版本)[1]
型態系統静态类型, 强类型
操作系统所有支持GLib的平台
許可證GNU宽通用公共许可证2.1+
文件扩展名.vala, .vapi
網站wiki.gnome.org/Projects/Vala
啟發語言
C, C++, C#, D, Java, BOO

描述 编辑

Vala是一门编程语言,结合了脚本语言的高级编程语言建造时间性能,与低级的编程语言运行时间性能。相较于用C写成的应用和库,它致力于将现代编程语言特征带给GNOME开发者,而不用强加任何额外的运行时间要求,并且不用使用不同的ABI。Vala的语法类似于C#,并为了更好的适应GObject类型系统而做了修改[2]

Vala由Jürg Billeter构想,并由他和Raffaele Sandrini实现,他希望开发GNOME应用能有对C语言的更高级替代者。他们的确喜欢C#的语法和语义,但不想使用Mono,故而他们在2006年5月完成了一个编译器。最初它使用C来引导英语Bootstrapping (compilers),一年后(在2007年7月的版本0.1.0发行中),Vala编译器实现了自宿主英语Self-hosting (compilers)

版本历史 编辑

版本 发行日期[3]
舊版本,不再支援: 0.0.1 2006-07-15
舊版本,不再支援: 0.1.0 2007-07-09
舊版本,不再支援: 0.10.0 2010-09-18
舊版本,不再支援: 0.20.0 2013-05-27
舊版本,不再支援: 0.30.0 2015-09-18
當前版本: 0.40.25 2021-01-11
舊版本,不再支援: 0.42.0 2018-09-01
舊版本,不再支援: 0.44.0 2019-05-09
舊版本,不再支援: 0.46.0 2019-09-05
當前版本: 0.48.23 2022-02-21
舊版本,不再支援: 0.50.0 2020-09-11
當前版本: 0.52.11 2022-02-21
當前版本: 0.54.7 2022-02-14
當前版本: 0.56.10 2023-08-05
格式:
舊版本
舊版本,仍被支援
当前版本
最新的预览版
未来版本
对于旧版本只列出最初发行

语言设计 编辑

特征 编辑

Vala使用GLib和它的子模块(GObject、GModule、GThread、GIO)作为核心库,它们支持多数操作系统,并提供:平台无关线程输入/输出文件管理网络套接字插件正则表达式等。Vala的语法目前支持如下现代语言特征:

图形用户界面可以使用GTK部件工具箱Glade GUI建造器英语Graphical user interface builder来开发。

内存管理 编辑

对于内存管理,GType或GObject系统提供引用计数。在C语言中,编程者必须手工管理增加和移除引用,而在Vala中,管理这种引用计数是自动化的,如果编程者使用语言内建引用类型而非普通指针的话。唯一需要当心的是避免生成引用环,因为在这种情况下内存管理系统不能正确工作,此时需要使用Vala自带的week关键字标注弱引用解决。[4]

对于不支持引用计数的类型,Vala也支持按照生命周期自动释放内存的非引用计数内存管理;Vala还可以通过指针手工内存管理。[5]

绑定 编辑

Vala意图提供但现存C库的运行时间访问,特别是基于GObject的库,而不需要运行时绑定。要通过Vala使用一个由C语言编写的库,全部所需就是一个API文件(.vapi),包含采用Vala语法的类和方法声明。但是不支持C++库。目前在Vala的每次发行中,都包括了GTK以及大部份的GNU项目和GNOME平台的vapi文件。还有用Vala写的一个库叫做Gee,为常用数据结构提供基于GObject的接口和类[6]

为从用其他语言比如C#写的应用访问Vala库,写绑定生成器也应当是容易的,因为Vala解析器被写为一个库,所以所有运行时信息在生成一个绑定的时候都是可获得到的。

工具 编辑

编辑器 编辑

Vala的开发工具近些年来有了显著改进。下面是具有支持Vala编程的插件的一些流行IDE文本编辑器

代码智能 编辑

目前,有两个活跃开发的语言服务器为Vala提供了代码智能

  • vala-lang/vala-language-server,设计用于支持LSP的任何编辑器,包括VSCode、vim和GNOME Builder[10]
  • esodan/gvls,目前是Vala在GNOME Builder中的缺省语言服务器,它对支持LSP的任何编辑器提供支持[11]

建造系统 编辑

目前,有一些建造系统支持Vala,包括AutomakeCMakeMeson[12]

调试 编辑

对Vala程序的调试可以使用GDBLLDB英语LLDB (debugger)。对于IDE

示范代码 编辑

一个简单的“Hello world”程序:

void main () {  print ("Hello World\n"); } 

面向对象 编辑

下面是更复杂的一个版本,表现了Vala的一些面向对象的特征:

class HelloWorld: Object {  private uint year = 0;    public HelloWorld () {  }    public HelloWorld.with_year (int year) {  if (year > 0)  this.year = year;  }  public void greeting () {  if (year == 0)  print ("Hello World\n");  else  /* Strings prefixed with '@' are string templates. */  print (@"Hello World, $(this.year)\n");   } } void main (string[] args) {  var helloworld = new HelloWorld.with_year (2021);  helloworld.greeting (); } 

因为在GObject库的情况下,Vala不支持多重继承,但是Vala中的类可以实现任何数量的接口,它可以包含它们的方法的缺省实现。下面一段代码展示具有缺省实现的Vala接口(有时称为mixin):

using GLib; interface Printable {  public abstract string print ();  public virtual string pretty_print () {  return "Please " + print ();  } } class NormalPrint: Object, Printable {  string print () {  return "don't forget about me";  } } class OverridePrint: Object, Printable {  string print () {  return "Mind the gap";  }  public override string pretty_print () {  return "Override";  } } void main (string[] args) {  var normal = new NormalPrint ();  var overridden = new OverridePrint ();  print (normal.pretty_print ());  print (overridden.pretty_print ()); } 

信号和回调 编辑

下面是基本例子,展示如何定义一个信号于非紧凑(compact)的一个类中,它拥有用Vala通过GLib建造的一个信号系统。接着注册回调函数到这个类的一个实例的这个信号。这个实例可以发送这个信号,而连接到这个实例的每个回调函数(也叫做处理器),将安它们连接上的次序来调用:

class Foo {  public signal void some_event (); // 定义一个信号  public void method () {  some_event (); // 发送这个信号(回调得以调用)  } } void callback_a () {  print ("Callback A\n"); } void callback_b () {  print ("Callback B\n"); } void main () {  var foo = new Foo ();  foo.some_event.connect (callback_a); // 连接回调函数  foo.some_event.connect (callback_b);  foo.method (); } 

线程 编辑

在Vala中新线程是代码的一部份,比如要求在运行时间并发执行的一个函数。新线程的创建和同步是用时GLib中的Thread类完成的,它在创建新线程时接受一个函数作为参数,如下面(非常简化的)例子所示:

int question(){  // 一些print操作   for (var i = 0; i < 3; i++){  print (".");  Thread.usleep (800000);  stdout.flush ();  }  return 42; } void main () {  if (!Thread.supported ()) {  printerr ("Cannot run without thread support.\n");  return;  }  print ("The Ultimate Question of Life, the Universe, and Everything");  // 泛型参数是返回值的类型  var thread = new Thread<int> ("question", question);  print(@" $(thread.join ())\n"); } 

图形用户界面 编辑

使用GTK来创建一个图形用户界面的"Hello, World!"程序:

int main (string[] args) {  var app = new Gtk.Application (  "com.example.App",  ApplicationFlags.DEFAULT_FLAGS  );    app.activate.connect (() => {  var win = new Gtk.ApplicationWindow (app) {  title = "Hello, World!",  default_width = 350,  default_height = 70  };    var label = new Gtk.Label ("Hello, World!");  win.child = label;  win.present ();  });  return app.run (args); } 

在GTK 4平台上,需要以下命令来编译这一示例:

valac --pkg gtk4 hellogtk.vala 

参见 编辑

  • Genie,基于Vala编译器的具有近似Python语法的一种语言。
  • Shotwell,用Vala写的图片组织器。
  • Geary英语Geary (e-mail client),用Vala写的邮件客户端。
  • elementary OS,具有大多用Vala编程的桌面环境的Linux发行版。
  • Budgie,大多用Vala编程的Linux桌面环境。

引用 编辑

  1. ^ Release 0.57.0. 2023年4月11日 [2023年5月4日]. 
  2. ^ . GNOME. [16 March 2021]. (原始内容存档于2022-05-08). 
  3. ^ . Vala Project. [2021-03-18]. (原始内容存档于2022-03-08). 
  4. ^ . [2022-03-08]. (原始内容存档于2022-05-05). 
  5. ^ Projects/Vala/ReferenceHandling - GNOME Wiki!. wiki.gnome.org. [2023-01-18]. (原始内容于2022-05-05). 
  6. ^ . [2022-03-08]. (原始内容存档于2022-03-24). 
  7. ^ 7.0 7.1 . [2021-03-17]. (原始内容存档于2022-03-08). 
  8. ^ . [2021-03-17]. (原始内容存档于2022-03-08). 
  9. ^ . [2021-03-17]. (原始内容存档于2021-05-12). 
  10. ^ 10.0 10.1 Vala Language Server, Vala, 2023-01-13 [2023-01-18], (原始内容于2022-09-25) 
  11. ^ . [2021-03-17]. (原始内容存档于2022-03-08). 
  12. ^ . [2021-03-29]. (原始内容存档于2022-01-06). 

外部链接 编辑

  • The Vala Programming Language(页面存档备份,存于互联网档案馆), on GNOME Live!
  • Vala 语言书籍《Introducing Vala Programming》 (Apress (页面存档备份,存于互联网档案馆) / Amazon (页面存档备份,存于互联网档案馆))
  • 面向 Java 开发者的Vala 特性介绍 (页面存档备份,存于互联网档案馆
  • 面向 C# 开发者的 Vala 特性介绍 (页面存档备份,存于互联网档案馆
  • Benchmark of Vala versus C# and C(页面存档备份,存于互联网档案馆
  • Vala 语言编程规范(Geary版) (页面存档备份,存于互联网档案馆
  • Vala 的语言服务器(Language Server Protocol)项目: VLS (页面存档备份,存于互联网档案馆), GVLS (页面存档备份,存于互联网档案馆
  • Vala 语言社区: The Vala community on GitHub (页面存档备份,存于互联网档案馆
  • Vala 语言案例列表 (页面存档备份,存于互联网档案馆
  • Vala 语言开发的数据库管理工具: DBKangaroo (页面存档备份,存于互联网档案馆
  • Vala 语言库:官方库
  • Vala 语言库:第三方库 (页面存档备份,存于互联网档案馆

vala, 是一門面向对象的编程语言, 由自举, 英语, self, hosting, compilers, 編譯器產生c语言代碼和使用gobject系統, 允许在gnome运行时库的基础上使用大量现代的编程技巧, 通过使用glib和gobject, 提供了动态类型系统和基于引用计数, reference, counting, 系统的記憶體管理的功能, 编程范型面向对象, 结构化, 指令式實作者jürg, billeter, raffaele, sandrini发行时间2006年, 17年前, 2006, 当前版本. Vala是一門面向对象的编程语言 由自举 英语 Self hosting compilers 編譯器產生C语言代碼和使用GObject系統 允许在GNOME运行时库的基础上使用大量现代的编程技巧 通过使用GLib和GObject Vala提供了动态类型系统和基于引用计数 reference counting 系统的記憶體管理的功能 Vala编程范型面向对象 结构化 指令式實作者Jurg Billeter Raffaele Sandrini发行时间2006年 17年前 2006 当前版本0 57 0 2023年4月11日 穩定版本 1 型態系統静态类型 强类型操作系统所有支持GLib的平台許可證GNU宽通用公共许可证2 1 文件扩展名 vala vapi網站wiki wbr gnome wbr org wbr Projects wbr Vala啟發語言C C C D Java BOO 目录 1 描述 2 版本历史 3 语言设计 3 1 特征 3 2 内存管理 3 3 绑定 4 工具 4 1 编辑器 4 2 代码智能 4 3 建造系统 4 4 调试 5 示范代码 5 1 面向对象 5 2 信号和回调 5 3 线程 5 4 图形用户界面 6 参见 7 引用 8 外部链接描述 编辑Vala是一门编程语言 结合了脚本语言的高级编程语言建造时间性能 与低级的编程语言运行时间性能 相较于用C写成的应用和库 它致力于将现代编程语言特征带给GNOME开发者 而不用强加任何额外的运行时间要求 并且不用使用不同的ABI Vala的语法类似于C 并为了更好的适应GObject类型系统而做了修改 2 Vala由Jurg Billeter构想 并由他和Raffaele Sandrini实现 他希望开发GNOME应用能有对C语言的更高级替代者 他们的确喜欢C 的语法和语义 但不想使用Mono 故而他们在2006年5月完成了一个编译器 最初它使用C来引导 英语 Bootstrapping compilers 一年后 在2007年7月的版本0 1 0发行中 Vala编译器实现了自宿主 英语 Self hosting compilers 版本历史 编辑此条目或章节需要時常更新 內容可能會隨著時間而有所變化或進展 未有可靠来源的臆測內容可能會被移除 若您發現有尚未更新的內容 歡迎您編輯更新 版本 发行日期 3 舊版本 不再支援 0 0 1 2006 07 15舊版本 不再支援 0 1 0 2007 07 09舊版本 不再支援 0 10 0 2010 09 18舊版本 不再支援 0 20 0 2013 05 27舊版本 不再支援 0 30 0 2015 09 18當前版本 0 40 25 2021 01 11舊版本 不再支援 0 42 0 2018 09 01舊版本 不再支援 0 44 0 2019 05 09舊版本 不再支援 0 46 0 2019 09 05當前版本 0 48 23 2022 02 21舊版本 不再支援 0 50 0 2020 09 11當前版本 0 52 11 2022 02 21當前版本 0 54 7 2022 02 14當前版本 0 56 10 2023 08 05格式 舊版本舊版本 仍被支援当前版本最新的预览版未来版本对于旧版本只列出最初发行语言设计 编辑特征 编辑 Vala使用GLib和它的子模块 GObject GModule GThread GIO 作为核心库 它们支持多数操作系统 并提供 平台无关线程 输入 输出 文件管理 网络套接字 插件 正则表达式等 Vala的语法目前支持如下现代语言特征 接口 属性 信号 英语 Signal programming Foreach lambda表达式 局部变量的类型推论 泛型 非空类型 英语 Void safety 辅助内存管理 异常处理图形用户界面可以使用GTK部件工具箱和Glade GUI建造器 英语 Graphical user interface builder 来开发 内存管理 编辑 对于内存管理 GType或GObject系统提供引用计数 在C语言中 编程者必须手工管理增加和移除引用 而在Vala中 管理这种引用计数是自动化的 如果编程者使用语言内建引用类型而非普通指针的话 唯一需要当心的是避免生成引用环 因为在这种情况下内存管理系统不能正确工作 此时需要使用Vala自带的week关键字标注弱引用解决 4 对于不支持引用计数的类型 Vala也支持按照生命周期自动释放内存的非引用计数内存管理 Vala还可以通过指针手工内存管理 5 绑定 编辑 Vala意图提供但现存C库的运行时间访问 特别是基于GObject的库 而不需要运行时绑定 要通过Vala使用一个由C语言编写的库 全部所需就是一个API文件 vapi 包含采用Vala语法的类和方法声明 但是不支持C 库 目前在Vala的每次发行中 都包括了GTK以及大部份的GNU项目和GNOME平台的vapi文件 还有用Vala写的一个库叫做Gee 为常用数据结构提供基于GObject的接口和类 6 为从用其他语言比如C 写的应用访问Vala库 写绑定生成器也应当是容易的 因为Vala解析器被写为一个库 所以所有运行时信息在生成一个绑定的时候都是可获得到的 工具 编辑编辑器 编辑 Vala的开发工具近些年来有了显著改进 下面是具有支持Vala编程的插件的一些流行IDE和文本编辑器 GNOME Builder Visual Studio Code 具有Vala插件 7 Vim 具有arrufat vala vim插件 8 Emacs 具有vala mode 9 Atom Geany Kate 10 代码智能 编辑 目前 有两个活跃开发的语言服务器为Vala提供了代码智能 vala lang vala language server 设计用于支持LSP的任何编辑器 包括VSCode vim和GNOME Builder 10 esodan gvls 目前是Vala在GNOME Builder中的缺省语言服务器 它对支持LSP的任何编辑器提供支持 11 建造系统 编辑 目前 有一些建造系统支持Vala 包括Automake CMake Meson等 12 调试 编辑 对Vala程序的调试可以使用GDB或LLDB 英语 LLDB debugger 对于IDE GNOME Builder拥有通过GDB的对Vala的内建调试支持 Visual Studio Code拥有对GDB和LLDB 英语 LLDB debugger 的扩展 比如cpptools和CodeLLDB 7 示范代码 编辑一个简单的 Hello world 程序 void main print Hello World n 面向对象 编辑 下面是更复杂的一个版本 表现了Vala的一些面向对象的特征 class HelloWorld Object private uint year 0 public HelloWorld public HelloWorld with year int year if year gt 0 this year year public void greeting if year 0 print Hello World n else Strings prefixed with are string templates print Hello World this year n void main string args var helloworld new HelloWorld with year 2021 helloworld greeting 因为在GObject库的情况下 Vala不支持多重继承 但是Vala中的类可以实现任何数量的接口 它可以包含它们的方法的缺省实现 下面一段代码展示具有缺省实现的Vala接口 有时称为mixin using GLib interface Printable public abstract string print public virtual string pretty print return Please print class NormalPrint Object Printable string print return don t forget about me class OverridePrint Object Printable string print return Mind the gap public override string pretty print return Override void main string args var normal new NormalPrint var overridden new OverridePrint print normal pretty print print overridden pretty print 信号和回调 编辑 下面是基本例子 展示如何定义一个信号于非紧凑 compact 的一个类中 它拥有用Vala通过GLib建造的一个信号系统 接着注册回调函数到这个类的一个实例的这个信号 这个实例可以发送这个信号 而连接到这个实例的每个回调函数 也叫做处理器 将安它们连接上的次序来调用 class Foo public signal void some event 定义一个信号 public void method some event 发送这个信号 回调得以调用 void callback a print Callback A n void callback b print Callback B n void main var foo new Foo foo some event connect callback a 连接回调函数 foo some event connect callback b foo method 线程 编辑 在Vala中新线程是代码的一部份 比如要求在运行时间并发执行的一个函数 新线程的创建和同步是用时GLib中的Thread类完成的 它在创建新线程时接受一个函数作为参数 如下面 非常简化的 例子所示 int question 一些print操作 for var i 0 i lt 3 i print Thread usleep 800000 stdout flush return 42 void main if Thread supported printerr Cannot run without thread support n return print The Ultimate Question of Life the Universe and Everything 泛型参数是返回值的类型 var thread new Thread lt int gt question question print thread join n 图形用户界面 编辑 使用GTK来创建一个图形用户界面的 Hello World 程序 int main string args var app new Gtk Application com example App ApplicationFlags DEFAULT FLAGS app activate connect gt var win new Gtk ApplicationWindow app title Hello World default width 350 default height 70 var label new Gtk Label Hello World win child label win present return app run args 在GTK 4平台上 需要以下命令来编译这一示例 valac pkg gtk4 hellogtk vala参见 编辑Genie 基于Vala编译器的具有近似Python语法的一种语言 Shotwell 用Vala写的图片组织器 Geary 英语 Geary e mail client 用Vala写的邮件客户端 elementary OS 具有大多用Vala编程的桌面环境的Linux发行版 Budgie 大多用Vala编程的Linux桌面环境 引用 编辑 Release 0 57 0 2023年4月11日 2023年5月4日 Vala GitLab GNOME 16 March 2021 原始内容存档于2022 05 08 Vala Releases Vala Project 2021 03 18 原始内容存档于2022 03 08 Vala s Memory Management Explained 2022 03 08 原始内容存档于2022 05 05 Projects Vala ReferenceHandling GNOME Wiki wiki gnome org 2023 01 18 原始内容存档于2022 05 05 Libgee on Gitlab 2022 03 08 原始内容存档于2022 03 24 7 0 7 1 Coding in Vala with Visual Studio Code 2021 03 17 原始内容存档于2022 03 08 Coding in Vala with the Vim Text Editor 2021 03 17 原始内容存档于2022 03 08 Enable Vala syntax highlighting and code browser support in GNU Emacs 2021 03 17 原始内容存档于2021 05 12 10 0 10 1 Vala Language Server Vala 2023 01 13 2023 01 18 原始内容存档于2022 09 25 esodan gvls on GitLab 2021 03 17 原始内容存档于2022 03 08 Vala Tools 2021 03 29 原始内容存档于2022 01 06 外部链接 编辑The Vala Programming Language 页面存档备份 存于互联网档案馆 on GNOME Live Vala 语言书籍 Introducing Vala Programming Apress 页面存档备份 存于互联网档案馆 Amazon 页面存档备份 存于互联网档案馆 面向 Java 开发者的Vala 特性介绍 页面存档备份 存于互联网档案馆 面向 C 开发者的 Vala 特性介绍 页面存档备份 存于互联网档案馆 Benchmark of Vala versus C and C 页面存档备份 存于互联网档案馆 Vala 语言编程规范 Geary版 页面存档备份 存于互联网档案馆 Vala 的语言服务器 Language Server Protocol 项目 VLS 页面存档备份 存于互联网档案馆 GVLS 页面存档备份 存于互联网档案馆 Vala 语言社区 The Vala community on GitHub 页面存档备份 存于互联网档案馆 Vala 语言案例列表 页面存档备份 存于互联网档案馆 Vala 语言开发的数据库管理工具 DBKangaroo 页面存档备份 存于互联网档案馆 Vala 语言库 官方库 Vala 语言库 第三方库 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Vala amp oldid 78442518, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。