作为一个程序员谁是新的瓦拉,你有什么建议给别人的第一件谁是新的语言?瓦拉:陷阱,技巧和窍门
回答
它在很大程度上取决于你来自哪个背景。如果你来自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(或者如果支持,则使用英特尔的编译器)进行部署。
@ user274045:我没有看到缺少一个不确定的GC作为缺点,我也不认为*它是一个C封装*作为一个问题。编译为本地字节码并成为C库。它可能有一些C限制 - 但比C#更大的灵活性。 – IAbstract 2010-02-16 04:26:34
@ user274045:你有点与第2和第3点之间的矛盾。*这是一种相当新的语言... *然后* ...意识到它稍微过时了...... *。即使你正在讨论语言概念,它似乎将C#的一些最好的产品与C的功能融为一体。 – IAbstract 2010-02-16 04:31:33
没有矛盾。如果你要例如今天制作一个像Fortran这样的新语言,它既是新的,也是过时的。 C是38岁。它是为计算机设计的,比我打字时慢1000倍,内存少1000倍。处理器要简单得多。可以通过计算机器周期来手动优化代码。性能不受内存层次和多核的限制。您没有资源来实现优化编译器或VM和JIT。我们现在正处于一个新的世界。越来越低层的编译越来越不能与VM高层次的竞争力和性能。 – user274045 2010-02-25 04:44:27
提示:您可以通过使用TinyCC而不是gcc发展显著加速你的build时间。 Vala使用CC env变量来选择后端编译器,所以“export CC = tcc”就可以实现。
我的#1忠告是了解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 Reference Manual。
- 我不知道你来自什么背景,但你会发现这是很有帮助的:Vala Quick Intro for C# Programmers
在任何情况下,C的知识将是非常有用。我们的团队实际上正在考虑逐步改造并移植到Vala。我们拥有C#/ C++强大背景的成员,这种方向的变化(随着时间的推移)将有利于我们产品的性能和灵活性。
警告:我不熟悉Vala,但希望我的回答适用于学习任何新语言。我只是想提供一些想法,以防他们帮助...我绝对不应该得到我的答案的赏金。
底线:这要看你为什么学习它...
如果你是好奇,因为它是一个很酷的新的语言,但你不知道你怎么可能在实践中使用它,尝试重新创建/移植你熟悉的东西,看看它是如何比较的。
如果您正在学习它,因为您认为它解决了您所面临的特定问题,请确保它值得进行前期投资,因为学习任何新语言都会非常耗时,并且可能会有一个合理的解决方案以更熟悉的语言。
否则,这一切都是关于你如何学习最好的。你是否需要理解语言的内部,或者只是快速完成任务? (或者像我一样,在中间的某个地方?)为了完成任务,我只是寻找简单的教程,并试图让一些基本的东西运行起来,看看它的感觉。如果我很喜欢这门语言,那么我将开始阅读更深入的关于该语言的信息,并了解底层的情况。
无论您采取何种方式,祝您好运!
一般来说,Vala是优秀的,但我发现的一个大问题是,或者它的数组处理相对于其他语言来说是非常原始的,或者它的文档有一个非常大的漏洞。
尽管通过文档很长,很难看,教程和谷歌,我得出的结论是:
- 连接两个数组的唯一方法是要么fall back to C-style tricks或使用
foreach
和+=
到manually加一个数组到另一个元素的元素。 - 你可以像
argv[1:-1]
那样做一个切片,但似乎没有与Python的argv[1:]
等效的语法,所以你必须回退到more procedural那里。 - Libgee对我没用,因为虽然啧啧对象有像
add_all
方法,他们没有采取C风格的数组,所以我回来使用add
与foreach
和+=
。
我的建议是阅读的文档,但我个人通过观察VALA代码示例学到的语言:
的VALA教程帮助了我很多和文档页面包含了很多有用的例子,但帮助我最多的一个网站仍然是valadoc。组织:
valadoc将帮助你与不同类别和功能还包括其他图书馆的很多东西。
vala非常类似c#,但是您经常会看到类似于java的接口。任何使用C的经验都很好,因为vala周围的所有图书馆都是用C语言编写的,在调用函数时几乎可以看到表面下的所有C代码。
对于那些认为vala太年轻的人来说:vala会像现在一样年轻,直到有人做出非常大的文档或开始一个像QT那样大的项目,成千上万的人每天都会问问题。
vala在开始时有点难学,因为不好的文档,但不要放弃!当你了解它的基础知识时,它是一种伟大的语言。祝你好运! 和对不起英语:)
如果您正在考虑Vala编写服务器应用程序,那么您可能会喜欢Aroop中的一些对象池功能(对象令牌功能)。 Aroop是一个做内存池的Vala分支。它有引用计数垃圾收集器。你可以找到一个功能列表here。让我在列表名称一些目标在这里,
- 内存池
- 写作网络服务器,shotodol_net,shotodol_web。
- 基于锁定队列的消息传递
- 基于插件的开发,shotodol。
- 嵌入式开发
老实说,我认为它有点早,这个问题。 Vala是一种全新的语言。技巧和窍门只能通过经验来学习,而这一点对于任何人来说都很难。 – Kredns 2010-02-16 03:50:27
+1我同意卢卡斯的观点,我没有看到你获得了550个声誉值得回答的问题(尽管我希望被证明是错误的!)所以,这里是你对你选择的主题的真正和热衷兴趣的投票:) – Russell 2010-02-16 05:51:10
它两年前还为时过早......现在呢? – robru 2012-06-25 05:51:34