瓦拉:难题,技巧和窍门

作为Vala新手的程序员,对于刚刚接触这门语言的人来说,您有什么build议?

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

除此之外,我通常只会尝试学习C#编程风格。 这和Vala很相似,但是关于这个话题的书很多。

渔获:

  • 注意Vala没有垃圾收集。 它确实引用了计数。
  • 请注意,Vala仍在开发中。 这是一个相当新的语言,并没有达到1.0。 你现在写的代码可能会在未来破解。
  • 如果select学习Vala,请注意,就编程语言概念而言,它已经略微过时了。 它没有做任何事情来帮助多核编程。 它并没有做任何事情来帮助内存pipe理(代码性能主要基于caching一致性 – 好的垃圾收集语言可以重新组织内存来帮助这里)。 这是一个围绕C的包装,并伴随着C的许多限制(尽pipe它增加了闭包)。

另外,其中一张海报推荐tinycc。 这是一个合理的开发select,但是你应该使用一个优化的编译器,如gcc(或者如果支持的话,英特尔的编译器)来部署。

我的第一条build议是了解GObjects。 他们是Vala强大的function和灵活性的中坚力量,学习如何用GObject包装各种图书馆,让Vala程序能够访问c可以链接的所有东西(这是很多的!)。

以下是一些可能感兴趣的链接:
* 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

  1. 对于多个资源,这将是一个普通的资源: Vala – GNOME Live! 。
  2. GObject: GObject参考手册 。
  3. 我不知道你来自哪个背景,但是你会发现这有帮助: Vala快速介绍C#程序员

无论如何,C的知识将会非常有用。 我们的团队实际上正在考虑逐步改造并移植到Vala。 我们有C#/ C ++的强大背景的成员,这个方向的变化(随着时间的推移)将有利于我们的产品的性能和灵活性。

提示:通过使用TinyCC而不是gcc进行开发,可以显着加快构build时间。 Vala使用CC envvariables来select后端编译器,所以“export CC = tcc”就可以做到。

以下是我的小费:阅读官方文档。 🙂

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

尽pipe通过文档,教程和Google长时间的仔细研究,我得出的结论是:

  • 连接两个数组的唯一方法是退回到C风格的技巧或使用foreach+= 手动添加一个数组到另一个元素。
  • 你可以像argv[1:-1]那样做一个切片,但是似乎没有相当于Python的argv[1:]语法,所以你必须回到更为程序化的地步。
  • Libgee对我来说是没用的,因为Gee对象有像add_all这样的方法,但是没有一个使用C风格的数组,所以我回到了使用foreach+= add

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

底线:这取决于你为什么学习它…

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

如果你正在学习它,因为你相信它解决了你正面临的一个具体问题,确保它是值得的前期投资,因为学习任何新的语言可以是非常耗时的,并且可能有一个合理的解决scheme在一个更熟悉语言。

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

无论你的方法,祝你好运!

我的build议是阅读文档,但我个人通过查看vala代码示例了解了语言:

官方vala教程

一些文件

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

valadoc.org

valadoc将帮助你很多与其他图书馆的不同类别和function。

VALL是非常类似C#,但你也经常会看到像界面的Java也。 用C语言的任何经验都是好的,因为vala周围的所有库都是用C语言编写的,调用函数的时候几乎可以看到表面下的所有C代码。

对于那些说vala太年轻的人来说,vala会像现在一样年轻,直到有人做出非常大的文档,或者开始一个像QT那样大的项目,每天都有成千上万的人提问。

因为糟糕的文档,vala在开始时有点难学,但是不要放弃! 当你了解它的基础知识时,这是一种很好的语言。 祝你好运! 对不起的英语感到抱歉:)

如果您正在考虑使用Vala来编写服务器应用程序,那么您可能会喜欢Aroop中的一些对象池function(对象令牌function)。 Aroop是做内存池的Vala fork。 它有引用计数的垃圾收集器。 你可以在这里find一个function列表。 让我列出这里列出的一些目标,

  • 内存池
  • 编写networking服务器, shotodol_net , shotodol_web 。
  • 基于locking队列的消息传递
  • 基于插件的开发, shotodol 。
  • embedded式开发