2010-01-30 71 views
41

作为一个程序员谁是新的瓦拉,你有什么建议给别人的第一件谁是新的语言?瓦拉:陷阱,技巧和窍门

+9

老实说,我认为它有点早,这个问题。 Vala是一种全新的语言。技巧和窍门只能通过经验来学习,而这一点对于任何人来说都很难。 – Kredns 2010-02-16 03:50:27

+0

+1我同意卢卡斯的观点,我没有看到你获得了550个声誉值得回答的问题(尽管我希望被证明是错误的!)所以,这里是你对你选择的主题的真正和热衷兴趣的投票:) – Russell 2010-02-16 05:51:10

+4

它两年前还为时过早......现在呢? – robru 2012-06-25 05:51:34

回答

33

它在很大程度上取决于你来自哪个背景。如果你来自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仍在开发中。这是一种相当新的语言,并没有达到1.0。您现在编写的代码可能会在未来破解。
  • 如果选择学习Vala,请注意,就编程语言概念而言,它已经略微过时。它没有做任何事情来帮助多核编程。它并没有做任何事情来帮助内存管理(代码性能主要基于缓存一致性 - 好的垃圾回收语言可以重新组织内存以帮助这里)。这是一个围绕C的包装,并伴随着C的许多限制(尽管它确实添加了闭包)。

而且,海报的一个建议tinycc。这对于开发来说是一个合理的选择,但是您应该使用优化的编译器,如gcc(或者如果支持,则使用英特尔的编译器)进行部署。

+8

@ user274045:我没有看到缺少一个不确定的GC作为缺点,我也不认为*它是一个C封装*作为一个问题。编译为本地字节码并成为C库。它可能有一些C限制 - 但比C#更大的灵活性。 – IAbstract 2010-02-16 04:26:34

+6

@ user274045:你有点与第2和第3点之间的矛盾。*这是一种相当新的语言... *然后* ...意识到它稍微过时了...... *。即使你正在讨论语言概念,它似乎将C#的一些最好的产品与C的功能融为一体。 – IAbstract 2010-02-16 04:31:33

+8

没有矛盾。如果你要例如今天制作一个像Fortran这样的新语言,它既是新的,也是过时的。 C是38岁。它是为计算机设计的,比我打字时慢1000倍,内存少1000倍。处理器要简单得多。可以通过计算机器周期来手动优化代码。性能不受内存层次和多核的限制。您没有资源来实现优化编译器或VM和JIT。我们现在正处于一个新的世界。越来越低层的编译越来越不能与VM高层次的竞争力和性能。 – user274045 2010-02-25 04:44:27

8

提示:您可以通过使用TinyCC而不是gcc发展显著加速你的build时间。 Vala使用CC env变量来选择后端编译器,所以“export CC = tcc”就可以实现。

14
  1. 多资源,这将是一个普通的位资源:Vala - GNOME Live!
  2. 与GObject亲密接触:GObject Reference Manual
  3. 我不知道你来自什么背景,但你会发现这是很有帮助的:Vala Quick Intro for C# Programmers

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

2

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

底线:这要看你为什么学习它...

如果你是好奇,因为它是一个很酷的新的语言,但你不知道你怎么可能在实践中使用它,尝试重新创建/移植你熟悉的东西,看看它是如何比较的。

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

否则,这一切都是关于你如何学习最好的。你是否需要理解语言的内部,或者只是快速完成任务? (或者像我一样,在中间的某个地方?)为了完成任务,我只是寻找简单的教程,并试图让一些基本的东西运行起来,看看它的感觉。如果我很喜欢这门语言,那么我将开始阅读更深入的关于该语言的信息,并了解底层的情况。

无论您采取何种方式,祝您好运!

5

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

+2

+1:如果我再一次回答,我认为这应该是我的答案。 – IAbstract 2010-02-24 15:44:11

3

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

尽管通过文档很长,很难看,教程和谷歌,我得出的结论是:

  • 连接两个数组的唯一方法是要么fall back to C-style tricks或使用foreach+=manually加一个数组到另一个元素的元素。
  • 你可以像argv[1:-1]那样做一个切片,但似乎没有与Python的argv[1:]等效的语法,所以你必须回退到more procedural那里。
  • Libgee对我没用,因为虽然啧啧对象有像add_all方法,他们没有采取C风格的数组,所以我回来使用addforeach+=
1

我的建议是阅读的文档,但我个人通过观察VALA代码示例学到的语言:

The official vala tutorial

some documentation

的VALA教程帮助了我很多和文档页面包含了很多有用的例子,但帮助我最多的一个网站仍然是valadoc。组织:

valadoc.org

valadoc将帮助你与不同类别和功能还包括其他图书馆的很多东西。

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

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

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

0

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