作为一名刚接触 Vala 的程序员,你对刚接触这门语言的人的第一条建议是什么?
9 回答
这在很大程度上取决于您来自什么背景。如果您来自 C/C++/Java,最好的建议是学习函数式编程。Vala 支持真正的闭包,因此您应该(深入)学习如何使用 lambda 表达式。最好的资源是 Abelson 和 Sussman 的 Structure and Interpretation of Computer Programs。多年来,它一直是麻省理工学院计算机科学的入门教科书。它可在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(或如果支持,英特尔的编译器)进行部署。
我的第一条建议是了解 GObjects。它们是 Vala 功能和灵活性的支柱,学习如何使用 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
- 对于多个资源,这将是一个通用资源:Vala - GNOME Live!.
- 近距离接触 GObject:GObject 参考手册。
- 我不知道您来自什么背景,但您会发现这很有帮助:Vala Quick Intro for C# Programmers
无论如何,C 的知识将非常有用。我们的团队实际上正在考虑进行渐进式改造并移植到 Vala。我们的成员在 C#/C++ 方面拥有深厚的背景,这种方向的变化(随着时间的推移)将有利于我们产品的性能和灵活性。
提示:您可以通过使用 TinyCC 而不是 gcc 来显着加快构建时间。Vala 使用 CC 环境变量来选择后端编译器,所以“export CC=tcc”就可以了。
这是我给你的提示:阅读官方文档。:)
一般来说,Vala 非常好,但我发现的一个大问题是,与其他语言相比,它对数组的处理非常原始,或者它的文档中有一个非常大的漏洞。
尽管对文档、教程和 Google 进行了长时间的仔细查看,但我得出的结论是:
- 连接两个数组的唯一方法是退回到 C 风格的技巧
foreach
,或者使用手动将一个数组逐个元素添加到另一个数组+=
。 - 你可以做一个切片,
argv[1:-1]
但似乎没有相当于 Python 的语法argv[1:]
,所以你必须回退到更程序化的东西。 - Libgee对我来说没用,因为虽然 Gee 对象有类似 的方法
add_all
,但它们都没有采用 C 风格的数组,所以我又回到了使用add
withforeach
and+=
。
警告:我不熟悉 Vala,但希望我的回答适用于学习任何新语言。我只是想提供一些想法,以防他们有所帮助......我绝对不应该得到我的答案的赏金。
底线:这取决于你为什么要学习它......
如果您因为它是一种很酷的新语言而感兴趣,但您不确定如何在实践中使用它,请尝试重新创建/移植一些您非常熟悉的东西,看看它是如何比较的。
如果您学习它是因为您相信它可以解决您面临的特定问题,请确保它值得前期投资,因为学习任何新语言都可能非常耗时,并且可能有一个更熟悉的合理解决方案语言。
否则,一切都取决于你如何学得最好。您是需要了解语言内部原理的人,还是需要快速完成工作的人?(或者,像我一样,在中间的某个地方?)对于完成事情的方法,我只是寻找简单的教程,并尝试让一些基本的东西运行起来,看看感觉如何。如果我喜欢这种语言,那么我将开始阅读有关该语言的更深入的信息并了解幕后发生的事情。
无论您采用哪种方法,祝您好运!
我的建议是阅读文档,但我个人是通过查看 vala 代码示例来学习该语言的:
vala 教程帮助了我很多,文档页面包含了很多有用的示例,但对我帮助最大的一个网站现在仍然是 valadoc.org:
valadoc 将帮助您处理不同的类和函数以及其他库。
vala 与 c# 非常相似,但您也经常会看到类似 java 的接口。任何使用 C 的经验都很好,因为 vala 周围的所有库都是用 C 编写的,并且在调用函数时,您几乎可以看到表面之下的所有 C 代码。
对于那些说 vala 太年轻的人:vala 将继续像现在一样年轻,直到有人制作非常大的文档或开始像 QT 一样大的项目,每天都有成千上万的人提出问题。
由于糟糕的文档,vala 一开始有点难学,但不要放弃!当您了解它的基础知识时,它是一门很棒的语言。祝你好运!抱歉英语不好:)
如果您正在考虑使用 Vala 编写服务器应用程序,那么您可能会喜欢Aroop中的一些对象池功能(对象令牌功能) 。Aroop 是一个进行内存池的 Vala 分支。它有引用计数的垃圾收集器。您可以在此处找到功能列表。让我在列表中列出一些目标,
- 内存池
- 编写网络服务器、shotodol_net、shotodol_web。
- 基于无锁队列的消息传递
- 基于插件的开发,shotodol。
- 嵌入式开发