2010-01-30 69 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。讓我在列表名稱一些目標在這裏,