Vala:陷阱,提示和技巧

时间:2010-01-30 09:22:20

标签: vala

作为Vala新手的程序员,对于不熟悉该语言的人,您的第一条建议是什么?

9 个答案:

答案 0 :(得分:35)

这在很大程度上取决于你来自哪个背景。如果您来自C / C ++ / Java,最好的建议是学习函数式编程。 Vala支持真正的闭包,因此你应该(深入地)学习如何使用lambda表达式。最好的资源是Abelson和Sussman的计算机程序结构和解释。这是多年来麻省理工学院CS的入门教材。它可以在http://mitpress.mit.edu/sicp/full-text/book/book.html免费在线获得,但纸质版本更具可读性。视频讲座可在http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/获得。问题集可在http://icampustutor.csail.mit.edu/6.001-public/免费获得。

除此之外,我通常只是尝试很好地学习C#编程风格。它与Vala类似,但有很多关于该主题的书籍。

抓住:

  • 请注意Vala没有垃圾回收。它确实引用计数。
  • 请注意Vala仍在开发中。它是一种相当新的语言,并没有达到1.0。您现在编写的代码将来可能会中断。
  • 如果选择学习Vala,请注意,就编程语言概念而言,它有点过时了。它对多核编程没有任何帮助。它对内存管理没有任何帮助(代码性能主要基于缓存一致性 - 好的垃圾收集语言可以重新组织内存以帮助这里)。它是C的包装器,并且带有许多C的限制(尽管它确实添加了闭包)。

另外,其中一张海报推荐使用tinycc。这是开发的合理选择,但您应该使用优化的编译器(如gcc(或支持,Intel的编译器))进行部署。

答案 1 :(得分:22)

我的第一条建议是了解GObjects。它们是Vala强大功能和灵活性的支柱,学习如何使用GObject包装各种库使您的Vala程序可以访问所有可以链接的内容(这很多!)。

以下是一些可能感兴趣的链接:
 * http://library.gnome.org/devel/gobject/stable/
 * http://fosswire.com/post/2009/7/gobject-vala/
 * http://developer.gnome.org/doc/tutorials/#gobject
 * http://en.wikipedia.org/wiki/GObject

答案 2 :(得分:15)

  1. 对于多个资源,这将是一个通用资源:Vala - GNOME Live!
  2. 与GObject近距离接触:GObject Reference Manual
  3. 我不知道你的背景是什么,但你会发现这有用:Vala Quick Intro for C# Programmers
  4. 无论如何,对C的了解将会非常有用。我们的团队实际上正在考虑逐步改造并移植到Vala。我们的成员具有C#/ C ++的强大背景,这种方向的改变(随着时间的推移)将有利于我们产品的性能和灵活性。

答案 3 :(得分:9)

提示:通过使用TinyCC代替gcc进行开发,可以显着加快构建时间。 Vala使用CC env变量来选择后端编译器,因此“export CC = tcc”就可以了。

答案 4 :(得分:6)

这是我的提示:阅读官方文档。 :)

答案 5 :(得分:4)

一般来说,Vala非常出色,但我发现的一个重要问题是,与其他语言相比,它对数组的处理是非常原始的,或者它的文档中有一个非常大的漏洞。

尽管对文档,教程和Google进行了长时间的严格审查,但我得出结论:

  • 连接两个数组的唯一方法是fall back to C-style tricks或使用foreach+=manually将一个数组添加到另一个元素中。< / LI>
  • 您可以像argv[1:-1]那样进行切片,但似乎没有相当于Python argv[1:]的语法,因此您必须回归more procedural
  • Libgee对我来说没用,因为虽然Gee对象有add_all之类的方法,但它们都没有采用C风格的数组,所以我回到add使用{{{ 1}}和foreach

答案 6 :(得分:3)

警告:我对Vala不熟悉,但希望我的回答适用于学习任何新语言。我只想提供一些想法,以防他们帮忙......我绝对不应该得到我的答案的赏金。

底线:这取决于你学习它的原因......

如果您对它很感兴趣,因为它是一种很酷的新语言,但您不确定如何在实践中使用它,请尝试重新创建/移植您熟悉的内容,看看它是如何比较的。

如果您正在学习它,因为您认为它解决了您所面临的特定问题,请确保前期投资是值得的,因为学习任何新语言可能非常耗时,并且可能有合理的解决方案一种更熟悉的语言。

否则,这就是你如何最好地学习。您是否需要了解语言的内部,或者只是快速完成工作? (或者,像我一样,在中间的某个地方?)为了完成任务,我只是寻找简单的教程并尝试获得基本的东西并运行以了解它的感受。如果我喜欢这种语言,那么我将开始阅读有关该语言的更多深入信息,并了解幕后发生的事情。

无论你采取什么方法,祝你好运!

答案 7 :(得分:2)

我的建议是阅读文档,但我个人通过查看vala代码示例来学习语言:

The official vala tutorial

some documentation

vala教程帮了我很多,文档页面包含了很多有用的例子,但是最帮助我的网站是valadoc.org并且仍然是:

valadoc.org

valadoc将帮助您完成不同的类和功能以及其他图书馆。

vala非常类似于c#但你经常会看到类似java的接口。任何使用C的经验都是好的,因为vala周围的所有库都是用C语言编写的,当调用函数时,你几乎可以看到表面下的所有C代码。

对于那些认为vala太年轻的人:vala将继续像现在一样年轻,直到有人制作非常大的文档或开始像QT一样大的项目,成千上万的人每天都会提问。

由于文档不好,vala在开始时有点难学,但不要放弃!当你学会了它的基础知识时,这是一门很棒的语言。祝好运! 抱歉英语不好:)

答案 8 :(得分:1)

如果您正在考虑使用Vala编写服务器应用程序,那么您可能会喜欢Aroop中的一些对象池功能(对象令牌功能)。 Aroop是一个Vala fork,用于执行内存池。它有参考计数垃圾收集器。您可以找到功能列表here。让我在列表中列出一些目标,