【问题标题】:Vala: Gotchas, Tips and TricksVala:陷阱、提示和技巧
【发布时间】:2011-01-11 03:55:12
【问题描述】:

作为一名刚接触 Vala 的程序员,您对刚接触该语言的人的第一条建议是什么?

【问题讨论】:

  • 老实说,我认为这个问题有点早。 Vala 是一种全新的语言。提示和技巧只能通过目前任何人都难以掌握的经验来学习。
  • +1 我同意 Lucas 的观点,而且我认为您不会获得 550 声望值的答案(尽管我很想被证明是错误的!)所以这里是您对您选择的主题:)
  • 两年前太早了……现在呢?
  • 两年前可能还为时过早……现在呢?

标签: vala


【解决方案1】:

这在很大程度上取决于您的背景。如果您来自 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(或如果支持,英特尔的编译器)进行部署。

【讨论】:

  • @user274045:我不认为缺少不确定的 GC 是不利的一面,我也不认为 it's a C wrapper 是一个问题。编译为本机字节码并成为 C 库。它可能有一些 C 限制 - 但比 C# 更灵活。
  • @user274045:您在第 2 点和第 3 点之间有点自相矛盾。这是一种相当新的语言... 然后...请注意它有点过时了...。即使您正在讨论语言概念,它似乎也将一些最好的 C# 产品与 C 的强大功能融合在一起。
  • 没有矛盾。如果你要例如今天制作一种像 Fortran 这样的新语言,它既新又过时。 C 38 岁。它是为计算机设计的,速度比我输入的要慢 1000 倍,内存要少 1000 倍。处理器要简单得多;可以通过计算机器周期来手动优化代码。性能不受内存层次结构和多核的限制。您没有资源来实现优化编译器或 VM 和 JIT。我们现在处于一个新世界。编译的低级越来越无法与 VM 高级的功率和性能竞争。
【解决方案2】:

我的第一条建议是学习 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

【讨论】:

    【解决方案3】:
    1. 对于多个资源,这将是一个通用资源:Vala - GNOME Live!
    2. 与 GObject 亲密接触:GObject Reference Manual
    3. 我不知道你的背景是什么,但你会发现这很有帮助:Vala Quick Intro for C# Programmers

    在任何情况下,C 的知识都会有很大的用处。我们的团队实际上正在考虑进行渐进式改造并移植到 Vala。我们的成员在 C#/C++ 方面拥有深厚的背景,这种方向的变化(随着时间的推移)将有利于我们产品的性能和灵活性。

    【讨论】:

      【解决方案4】:

      提示:您可以通过使用 TinyCC 而不是 gcc 来显着加快构建时间。 Vala 使用 CC 环境变量来选择后端编译器,所以“export CC=tcc”就可以了。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • +1:如果让我重新回答,我想这就是我的答案。
        【解决方案6】:

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

        尽管仔细阅读了文档、教程和 Google,但我得出的结论是:

        • 连接两个数组的唯一方法是连接到fall back to C-style tricks 或使用foreach+=manually 将一个数组逐个元素添加到另一个数组。
        • 你可以做一个像argv[1:-1]这样的切片,但似乎没有相当于Python的argv[1:]的语法,所以你必须回退到more procedural
        • Libgee 对我来说没用,因为虽然 Gee 对象有 add_all 这样的方法,但它们都没有采用 C 样式的数组,所以我又回到使用 addforeach+=

        【讨论】:

          【解决方案7】:

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

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

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

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

          否则,一切都取决于你如何学得最好。您是需要了解语言内部原理的人,还是需要快速完成工作的人? (或者,像我一样,在中间的某个地方?)对于完成事情的方法,我只是寻找简单的教程,并尝试让一些基本的东西运行起来,看看感觉如何。如果我喜欢这种语言,那么我将开始阅读有关该语言的更深入的信息并了解其背后的原理。

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

          【讨论】:

            【解决方案8】:

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

            The official vala tutorial

            some documentation

            vala 教程对我有很大帮助,文档页面包含很多有用的示例,但对我帮助最大的一个网站过去和现在仍然是 valadoc.org:

            valadoc.org

            valadoc 将帮助您处理不同的类和函数以及其他库。

            vala 与 c# 非常相似,但您也经常会看到类似 java 的接口。任何使用 C 的经验都很好,因为 vala 周围的所有库都是用 C 编写的,并且在调用函数时,您几乎可以看到所有 C 代码就在表面之下。

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

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 2010-10-20
                • 1970-01-01
                • 2010-09-16
                • 2010-09-16
                • 1970-01-01
                • 1970-01-01
                • 2021-10-22
                • 2011-02-10
                相关资源
                最近更新 更多