看了
平繁介绍用 C 写 GObject 的文章,想起 Vala 貌似就是使用 GObject 的,而且是使用类似 C# 的语法,应该比用 C 写轻松的多。于是到
Vala 的主页看了一下,果然,Vala 编译的时候,会把 Vala 程序编译成 C 代码,然后再使用 C 编译器编译成本机代码,我最近觉得这种编译方式很好,因为现在而言,几乎任何一个系统,不论是 PC 的,还智能手机,抑或嵌入式设备,总会至少提供一个 C 的编译器,那么把程序先编译成 C 就等于在这些系统上都可以运行了。
另外,Vala 是所谓 self-hosting 的编译器,也就是说,Vala 的编译器是使用 Vala 编写的。这一点也是我喜欢的,我就一直没想明白,为什么 D 语言的编译器不用 D 来编写,难道是 WB 自己对 D 语言没信心?
很早就知道 Vala,不过,那个大大的 GNOME 使我误以为 Vala 只能为 Linux 编译程序,这次很高兴的知道,我错了,Vala 是可以在其它平台,甚至也是可以写嵌入式设备的程序的。
在 Vala 的主页,顺着链接找到 Val(a)IDE 的 Windows 版,下载,安装,同时选择了安装 Vala 编译器,期间自动下载了 Vala,目前最新版本是 0.7.8,安装完毕后,终于可以开始玩玩 Vala 了。
首先,我用 ValaIDE 新建了一个 GTK 的项目,尝试编译了一些 GTK 的例子,都运行的很好。
然后新建了一个 SDL 的项目,编译出错,说找不到头文件,看来 Vala 的安装包里没有包含 SDL,SDL 还是要自己安装。于是把 SDL 的头文件复制到 Vala 的 include 目录,静态库复制到 lib 目录,再编译,说找不到 SDL_Image,于是再找 SDL_Image 的头文件和库(这个库貌似要用 VC 编译)复制到相应位置,又是说一堆函数找不到,正好前一段用 C 写过一点儿 SDL 的程序,知道弯儿大概在哪里扭着,调整了一会儿参数,在项目属性里,Builder 中的 Other options: 修改为 -X '-lmingw32' -X '-lSDLmain' -X '-lSDL' -X '-lSDL_image',终于正常编译,并正常运行了,感觉很好。
目前简单的测试就是这样。
Vala 编译出的程序比较小,不过链接了几个 dll:glib 和 gobject,glib 有 1M 左右,gobject 300K 左右,稍有点儿大,不过还能接受。
我比较关心的是,它是怎么解决垃圾回收的,看了它的文档,发现,GObject 并没有使用垃圾回收器,而是使用的引用计数的方式,需要显式的使用“弱”引用来解决循环引用的问题,这一点稍显遗憾。更多的细节,大家可以看看
Vala's Memory Management Explained
另外,在使用 ValaIDE 的时候,发现它还支持一种叫
Genie 的语言,查了一下,原来也是类似 Vala,使用 GObject 的语言,只是语法比较类似 boo。
在 MonoDeveloper 的 Vala 绑定说明文件中,发现 Vala 也可以支持单元测试,使用的是 GTest,以后有空也要看看。
关于调试,我发现在 ValaIDE 里有生成调试信息的选项,而且平繁在留言里也证实,确实是可以使用 GDB 来进行调试的。不过,我个人还是倾向于使用 C# 在 VS 里调试好,然后再使用 Vala 编译,毕竟需要修改的地方很少。
类似这种把代码编译成 C,而且也是 self-hosting 的语言的,最近还有一个 Vim 的作者的 ZimBu,也可以参考一下,不过,ZimBu 的语法对我来说,还是有点儿别扭,ZimBu 的代码可以在 Google Code 找到,不过主站被墙了,要看的需要翻翻翻。。。
分享到:
相关推荐
VALA编程手册——学习VALA语言的简明手册,是VALA的简易入门教程。希望大家喜欢。
Vala_CMake 包含 CMake 的宏,用来构建和管理 Vala 项目。 标签:ValaCMake
vala的内存管理机制说明的上半部分翻译,主要分析了vala中循环引用的问题
vala初步翻译教程,没有时间整理,哪位仁兄有兴趣可以整理一下。
Atom-language-vala-modern.zip,对atom的vala语言支持。atom中的vala语言支持,atom是一个用web技术构建的开源文本编辑器。
Deepin Terminal,深度终端2.0,是Deepin操作系统的默认终端应用,使用Vala语言编写。 特点: 毫秒级启动,享受速度感 响应速度在200毫秒之内,真正做到毫秒级启动,同时优化内存占用率,系统资源消耗更小。
Arch Linux(通过 AUR): yay -S vala-language-server或yay -S vala-language-server-git Ubuntu、Fedora、Debian、openSUSE 和 Mageia:从安装elementOS: sudo apt install vala-language-server Alpine Linux:...
zmq-vala (libzmq.vapi) 是 ZeroMQ 的 Vala 客户端开发包。 标签:zmqvala
瓦拉面板应用菜单Vala Panel Application Menu是一个全局菜单小程序,可与Vala Panel,xfce4-panel和mate-panel一起使用(还计划使用Budgie 10.x)。 unity-gtk-module用作后端,因此也必须安装(请参阅下面的说明)...
检查Vala代码文件中的代码样式错误 小型命令行工具和库,用于检查Vala代码文件中的代码样式错误。 基于。 建造,测试和安装 您将需要以下依赖项: meson gio-2.0 valac 运行介子构建以配置构建环境。 转到构建...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
我的First_Vala_App 我将开发此应用程序作为学习vala_app的一种方式 如何运行应用程序? 首先确保您的系统上安装了,然后运行以下命令 :backhand_index_pointing_down: valac --pkg gtk-+ main_app.vala 什么是瓦拉...
vala 游乐场通过教程学习 Vala 编程语言: : 在使用 Vala 0.16.1 运行早期 Raspbian 发行版的 Raspberry Pi 上编码。 通过安装以下软件包来设置开发环境: sudo apt-get install valasudo apt-get install ...
vala中文手册,有在gnome下开发的可以看看,vala资源很少,中文的更少, 分享给大家,大家不要错过
离线安装包,亲测可用
当您的 vala 应用程序崩溃(如果它发生)时,此库会显示堆栈跟踪。 只需让Stacktrace注册处理程序: int main (string[] args) { // register the handler Stacktrace . register_handlers () ; stdout . ...
单站点浏览器-vala Vala 中的一个简单的网络浏览器。 应该用mingw32编译。 该软件的最终目标是制作一个用于访问网站的葡萄酒友好型单一用途浏览器。 这对于分发单个站点浏览器也很有用。
维罗妮卡外汇概念Vala 的非独立 Web 框架。 为幸福而优化。地位这仍处于试验阶段。 该代码创建了一个 SCGI 应用程序。 Apache 可以配置为将请求转发到该应用程序并将响应发送回客户端。 这主要是为了证明这样的事情...
vala 片段 Yasnippet 与 Vala 一起使用 信息 这样做是因为 Vala 真的没有任何东西。 我也是 Vala 的新手,所以我制作了一些片段,虽然对我和其他人来说很方便。 当然,我可能会遗漏一些您可能认为很方便的重要片段,...
该项目旨在将现有的Vala编译器移植到C# 到目前为止,编译器可以像valac一样构建工作程序,但是尚未经过广泛的测试。 较长期的目标是通过利用(到目前为止)更好的.NET开发工具来进行改进并添加新功能。 然后可以...