`
梁利锋
  • 浏览: 81705 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

玩玩 Vala

阅读更多
  看了平繁介绍用 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 找到,不过主站被墙了,要看的需要翻翻翻。。。
分享到:
评论
3 楼 lifc 2009-12-02  
曾经业余时间用vala重写过一个项目,前后大概折腾了半年左右。个人感觉vala目前(用到08年8月)存在的各方面问题绝对比D1/D2要多,喜欢折腾但不想太折腾的朋友建议还是先去玩D吧。
2 楼 梁利锋 2009-11-21  
GObject是有这种命名方式,Vala没这个规定。
1 楼 betty_betty2008 2009-11-21  
玩过几天,不喜欢this_is_method()这种命名方式

相关推荐

    俄罗斯方块游戏Quadrapassel.zip

    《Vala语言构建的开源俄罗斯方块游戏:Quadrapassel》 在当今众多的游戏类型中,俄罗斯方块作为一款经典益智游戏,以其简洁而富有挑战性的玩法深受玩家喜爱。而今天我们要探讨的是一个名为“Quadrapassel”的开源...

    SeansLifeArchive_Images_Egg_Inc.:我的人生故事项目模块,其中包含我的Egg,Inc.游戏图像。 开始; 2021年3月5日

    《SeansLifeArchive_Images_Egg_Inc.:我的...借助Vala的高效编程,Markdown和文本文件的清晰记录,以及Android游戏截图的视觉呈现,该项目为观众提供了一个独特且互动的视角,让我们看到了游戏世界与现实生活的交织。

    wikidata-parser:解析Wikidata转储

    维基数据解析器 解析器 可以使用DumpElement从wikidata转储中解析一行(Wikidata项目及其声明) ...玩主题 import org . idio . wikidata . dump . element . _ val topic = DumpElement .parseElement(d

    用glade开发的一款象棋软件

    它可以生成XML描述文件,这些文件随后可以被编程语言如C、Python或Vala等读取,以构建实际的GUI。 2. **GTK+**:GTK+是跨平台的GUI工具包,支持多种操作系统,提供丰富的控件和布局管理功能。它是glade设计的GUI...

    基于yolov9实现的打电话、玩手机检测系统python源码+详细运行教程+训练好的模型+评估指标曲线.zip

    a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数...

    gahtzee-开源

    它是用C语言编写,但提供了多种编程语言的绑定,如Python、Java和Vala等。通过使用Gtk,gahtzee能够运行在Linux、Windows以及macOS等多种操作系统上,展现了开源软件的跨平台优势。 Gahtzee项目的核心价值在于它的...

    玩转Kotlin 彻底弄懂Lambda和高阶函数

    val view = findViewById(R.id.image) view.setOnClickListener { v -> viewClicked(v) } ``` 相比于传统的方式,使用Lambda表达式可以减少代码量,并且更易于阅读和维护。 Lambda表达式的类型可以用来表示函数的...

    PSNGAMESDIGITAIS 2014-crx插件

    Isso mesmo compre jogos de 200 reais por valre entre 60 e 80 reais。 E tudo isso com asegurançado PagSeguro,pagonãoreceber no prazopeçaseu dinheiro de volta,garantimos a entrega em 24 hrs nohorá...

    SeansLifeArchive_Images_Farm-Story:我的人生故事项目模块,其中包含我的农场故事游戏图像

    我目前正在玩有一个适用于iOS的版本。 它在下面列出 这些每周的图片将用于进度监控,但也可以用作库存图像。 我从2012年和2013年就开始玩《农场物语》。在2016年YouTube内容创作者阶段(直到2018年),我休息了一...

    VB课程设计俄罗斯方块

    For i = 19 To 20 - Val(txthard.Text) Step -1 For j = i * 10 To i * 10 + 9 If Rnd >= 0.5 Then cmdfang(j).Visible = True Next Next 可以根据你选择的难度系数在底层的每一行随机产生超过半数(即5个以上...

Global site tag (gtag.js) - Google Analytics