成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ceylon:新的編程利器或只是另一種語言?

開發 前端 開發工具
Ceylon是一個出自Red Hat的新項目,由Gavin King領導。King是Hibernate項目的創始人,該項目是一個Java語言內部的持久化解決方案。

計算機科學的道路上布滿了什么將成為“下一個大事件”這樣的軀殼。盡管許多的小生境語言確實在腳本或是特定應 用中找到了一些用武之地,但C(及其衍生工具)和Java語言是難以被取代的。不過Red Hat的Ceylon似乎是一些語言功能的一個很有意思的組合,其使用了大家熟知的C風格的語法,但是除了強調簡潔之外,其還提供面向對象和一些很有用的 函數方面的支持。研究一下Ceylon,看看這一未來的VM語言是否能夠在企業級的軟件開發中找到自己的位置。

Linux和開源通常會與最前沿的語言設計之間存在著一定的關系,其可能是可用來支持語言開發的工具,或者是平臺的開放性促進了語言設計的進步。或者可能 是這樣的情況,基于開源技術的那些開放式語言(比如說GNU Compiler Collection系列、Ruby、Python和Perl)非常的優秀,因為它們歡迎和鼓勵試驗使用(更不用提Red Hat就是Ceylon背后的公司)。無論是出于何種原因,Linux開發者可以使用大量的各種語言,從較少被用到已有了一定年頭的語言到最新最先進的產 品。

但在一個有著C/C++、Java™語言、Scala、Ruby、Python、Perl、Erlang、Lua、Scheme以及其他許多 語言的世界中,我們還有必要關心一種致力于面向業務的企業級軟件開發的新語言的宣告出現嗎?在許多情況下,回答是否定的。不過讓我們來研究一下Red Hat為未來提供的一種名為Ceylon的語言,看一看它是否能夠上升到當今最受歡迎語言的行列中來。

Ceylon并不是Java

“Ceylon不是Java,它是一種深受Java影響的新語言,是由一些Java愛好者設計出來的,他們不覺得有什么不對,Java并不會馬上過氣,所以不存在誰殺死它的問題。”——Gavin King

Ceylon的介紹

Ceylon是一個出自Red Hat的新項目,由Gavin King領導。King是Hibernate項目的創始人,該項目是一個Java語言內部的持久化解決方案。盡管King是Java技術的愛好者——該技 術是首個適用于大規模開發的語言——但按照他的話來講,該語言有著一些令人受挫的地方(其中包括泛型一類的語言復雜性、設計輕率和晦澀的Standard Edition SDk、笨拙的注解語法、破碎的塊結構、XML依賴性等等)。

因此,King提出了一個問題,在從Java語言和SDK的優勢和劣勢中學到一些教訓之后,語言應該具備什么樣的形式才對?他的答案是 Ceylon,一種靜態類型語言,保留了Java語言的一些最好的功能特性(也運行在JVM上),但在語言的可讀性、內置的模塊化以及諸如高階函數一類的 函數式語言特征的納入方面做了改進。Ceylon還采用了C和Smalltalk的一些特性,不過它更像Java語言,這一新語言專注在業務計算上,但它 也很靈活,可用在其他領域中。

有些人把Ceylon稱作“Java 殺手”(可能是因為Java語言的前途問題),但實際上Ceylon運行在JVM上,因此它是Java技術的一種延伸而不是替代。使用JVM來支持 Ceylon的執行是一種理想的模式,因為這意味著Ceylon(像Java一樣)是可跨多種目前支持JVM的架構移植的。

Ceylon的語言特性

當今大多數的語言都不再遵從某種簡單的分類,代以體現的是多樣化的編程風格,Ceylon并沒有什么不同。Ceylon是一種靜態類型語言(statically typed language)(即 類型檢查是在編譯時進行的,相對應的是諸如Lisp一類的動態類型語言,這些語言的類型檢查是在運行時進行的)。Ceylon是一種面向對象的語言,類似 Java語言,其還使用典型的C語法風格來支持高階函數(higher-order function)(即函數可以使用其他函數來作為輸入和輸出)。Java語言并不直接支持高階函數,因此這一功能特性代表了這兩種語言之間獨特的不同之 處。

然而,有時候,改進更多指的是語言刪減了什么而不是添加了什么。Ceylon簡化并刪減了Java語言的一些元素,使用更簡單的方案來代替它們。 簡化的一個例子是public、protected和private關鍵字的去除,Ceylon的替代做法是只包含一個shared注解,該注解定義了類 的哪一個元素是外部可見的。Ceylon還刪除了重載功能,但使用更簡單的語法來提供了一些這一功能的變通做法(比如說默認的和有序的參數)。

Ceylon包含了對繼承、序列(數組(array)或是列表(list)構造)、泛型、命名參數等的支持,它包含了運行時類型管理的一些功能(我們會在下一節中研究一個這樣的例子)。該語言目前正處在積極的開發階段,因此其最終的功能依然處于一種開放的狀態中。

Ceylon的例子說明

盡管在寫這篇文章的時候,一個公開可用的編譯器還不存在,但是Ceylon語言的結構已被定義出來,以便能夠通過開發一些簡單應用來研究和考慮它的用法和可讀性。本節著眼于一些用Ceylon編寫的樣例應用,以此來說明它的結構。

Hello World

我會使用一個“Hello World”程序來說明一個簡單程序的創建,該程序在顯示界面上給出一個簡單的文本串。清單1中給出的這一例子展示了一個頂層的名為hello的方法,該方法使用writeLine方法來發出一個串到標準輸出上。

清單1. 使用Ceylon編寫的Hello World程序

  1. doc "Hello World Program"  
  2. by "Gavin King"  
  3. void hello() {  
  4.   writeLine( "Hello World." );  

需要注意的一點是,注解也會用于API文檔(類似于doxygen一類的工具),其允許你說明方法和作者(分別是doc和by注解)。

Ceylon的類型

Ceylon采用了一組傳統的類型,它們被實現成普通的類,這些類型包括:

  1. Natural:無符號整數,包括零
  2. Integer:有符號整數
  3. Float:浮點數
  4. Whole:任意精度的有符號整數
  5. Decimal:任意精度和任意位小數的十進制數

默認情況下,Natural、Integer和Float類型是64位的,但你可以使用small來注解它們,以指明是32位精度的。

Ceylon的類

Ceylon是一種面向對象的語言,你使用類的概念來編寫代碼。在Ceylon中class(類)是一種類型,其封裝了一組操作(稱作方法(method))和狀態(state),而且要定義在類的對象被初始化時狀態是如何被初始化的(類初始化器(class initializer),類似于構造函數)。

一個簡單的例子會有助于你理解Ceylon的做法。清單2為一個計數器類提供了一個簡單的類,清單2使用一個可選值來定義類,這意味著用戶可以提供該值也可以不提供,它使用Type?(類型?)這 種模式來標明。類主體包含的是類初始化器而非構造函數,這一代碼定義私有變量(除非注解成shared,否則不可見),然后定義初始化邏輯。你先從查看 start變量是否存在開始,如果存在的話,其就被用作計數的初始值。你的第一個方法,被注解成shared,因此是從類外部可見的,其定義了增量器。在 調用時,這一方法簡單地遞增你的計數器。

最后,定義一個getter方法來給用戶返回當前的計數器值,以及定義一個setter方法來把調用者提供的值設置當前的計數器值。需要注意的 是,這里使用了assign這一關鍵字來創建一個變量屬性以用于計數器值的設置。除了構造函數的處理不同之外(代碼內嵌在類內部),類也不存在析構函數, 也不提供實現多個構造函數的方式(這僅是不同于Java語言之處之一)。

清單2. 使用Ceylon編寫的一個簡單的類

  1. doc "Simple Counting Class"  
  2. class Counter( Natural? start ) {  
  3.  
  4.   doc "Class Initializer"  
  5.   variable Natural count :0;  
  6.   if (exists start) {  
  7.     count :start;  
  8.   }  
  9.  
  10.   doc "The incrementer"  
  11.   shared void increment() {  
  12.     count++;  
  13.   }  
  14.  
  15.   doc "The getter"  
  16.   shared Natural currentValue {  
  17.     return count;  
  18.   }  
  19.  
  20.   doc "The setter"  
  21.   shared assign currentValue {  
  22.     count :currentValue;  
  23.   }  
  24.  

定義了這個簡單的類后,讓我們來看看如何在Ceylon中使用該類。清單3提供了一段使用Counter類的代碼。其開始先實例化類的一個cnt 對象,可以注意到Ceylon中沒有new這一關鍵字。新的Counter對象定義了之后,調用increment方法,然后使用getter方法來輸出 Counter的值。需要注意的是,在Ceylon中,=和:=運算符是不同的:=這一限定符只能用于不可變的值,而變量賦值則是使用:=運算符來進行 的。

清單3. 使用Counter類

  1. Counter cnt = Counter(1);  
  2. cnt.increment();  
  3. writeLine( c.currentValue ); 

Ceylon鼓勵盡可能使用不變的屬性,這意味著一個對象使用某個值初始化后不會再次被賦值。要指明一個命名變量是可變的(在初始化之后可改變),其必須要使用variable注解,如清單2中第5行所展示的那樣。

最后要研究的一項是Ceylon在控制結構方面的一個主要區別。你應該有注意在許多的語言中,條件表達式后面的花括號({})可省略,比如說如果只出現單條語句的話:

  1. if (cnt > 10) statement(); 

Ceylon不允許這種語法,其要求給出花括號,即上面顯示的示例代碼在Ceylon中要這樣寫:

  1. if (cnt > 100) { statement(); } 

因為這代表了C中最常見的一種錯誤,因此特別地強制使用這一正確風格是可讓人接受的。

#p#

高階函數

Ceylon包括了被稱作一階函數(first-order function)的 函數式編程風格,這簡單地意味著函數被視為第一類對象(first class object),其可被用作函數的參數,以及可以從函數中返回。拿King為repeat方法的定義所提供的演示例子(參見清單4)來看好了。在這種情況 下,方法用到了兩個參數:作為重復次數的Natural,以及要調用的一個函數的方法參數。repeat方法的方法體內部簡單地創建了一個for循環(使 用了一個范圍運算),然后調用作為函數參數傳進來的方法。

清單4. Ceylon中的高階函數

  1. void repeat( Natural times, void hfunction() ) {  
  2.      for (Natural n in 1..times) {  
  3.         hfunction();  
  4.      }  
  5.   } 

這一方法的用法很簡單,如清單5中的第7行所示,使用了不帶參數的方法名。

清單5. 在Ceylon中使用高階函數

  1. void sayhello() {  
  2.      writeLine( "Hello World." );  
  3.     }  
  4.    ...  
  5.      repeat( 10, sayhello ); 

不像其他語言所提供的函數支持,Ceylon不支持匿名函數(直接出現在表達式中的無名函數),但它支持閉包(closure)(其本質上是能夠引用另一個函數中的狀態的函數)

類型窄化

Ceylon不包含出現在Java語言中的instanceof運算符;其也不包含諸如可在C中找到的那種類型轉換,Ceylon的替代做法是,其實現了所謂的類型窄化(type narrowing), 這種做法被用來在一步中測試并縮窄對象引用的類型。考慮一下下面清單6中的代碼段,該段代碼使用了一個特殊的(is ...)構造來測試一個對象引用是否為給定的類型,如果類型被確定的話,類型特定的方法接著就會被調用。這一構造類似于你之前在用于說明可選參數的清單2 中見到的(exists ...)這一構造。

清單6. Ceylon中的類型窄化

  1. Object obj = <some object>;  
  2.      
  3.    switch (obj)  
  4.       
  5.       case (is Counter) {  
  6.        obj.increment();  
  7.       }  
  8.      case (is ComplexCounter) {  
  9.       obj.incrementBy(1);  
  10.      }  
  11.     else {  
  12.        stream.writeLine("Unknown object");  
  13.     } 

Ceylon包含了另一種類似的定義成(nonempty ...)的構造,你可以把該構造應用在序列(數組或列表)上,以確定序列中是否是不包含有元素的,這樣就可以不用在其之上執行操作。

最后要注意的一點是,Ceylon的switch語句的語法,其不同于C和Java語言兩者。這兩種語言中的這一語句都很容易出錯,Ceylon 在case上強制使用塊結構,并去除了default這種情況,代以else塊。Ceylon還(在編譯時)確保switch語句包含了一個詳盡的實例測 試清單,或者至少有一個else語句提供完整的覆蓋。編譯器自動檢查這些switch語句并且如果有實例沒被覆蓋到的話就產生一個錯誤。

其他的控制結構

Ceylon實現了傳統的if...else語句,正如你所期望的那樣,它也實現了Java語言的異常處理功能(try、catch、 finally)。Ceylon還創建了所謂的fail塊,其和for循環一起使用以識別循環何時被提早打斷。考慮一下清單7中展示的例子。

清單7. 說明Ceylon的fail塊

  1. for (Instrument i in instruments) {  
  2.     if (i.failing()) {  
  3.        break;  
  4.      }  
  5.    }  
  6.    fail {  
  7.     // Take some action...  
  8.   } 

這在C和Java語言中都是常見的設計模式,因此對Ceylon來說是一個有益的補充。

Ceylon的前景

正如King所說的那樣,Ceylon是社區的努力成果,因此需要軟件工程師和測試人員來幫助設計、構建和驗證語言和SDK。這一號召能夠鼓勵 Java語言用戶做出反饋,這有助于支持他們從該語言到Ceylon的遷移。King依然對Ceylon的當前狀態保持適當的沉默,只是說語言規范以及 ANTLR(Another Tool for Language Recognition)語法都已存在了。

展望未來

盡管有些人會質疑一種新語言的必要性,不過另一種看待語言的觀點是把它們作為用來解決問題的一系列工具。并非每一種語言都是任何指定問題的適 合的或是理想的解決工具的,但某些語言本身能夠很好的適用于某些特定的解決方案領域;因此,有多種語言可用是一種福氣,而非禍端。因為Ceylon仍處于 開發階段,因此其是否能夠在目前正在使用的主流語言行列中找到一個位置還是未知的。不過該語言捕捉了足夠多的興趣點,因此等其最終出現時,對其進行進一步 的研究將會是一件很有趣的事情。

原文:http://www.ibm.com/developerworks/cn/linux/l-ceylon/

【編輯推薦】

  1. Perl、PHP、Python、Java和Ruby的比較
  2. C++程序員必讀:讓你的代碼更強大
  3. 各大主流.Net的IOC框架性能測試比較
  4. Ruby之父出任Heroku首席架構師 推進Ruby云計算應用
  5. 漢語編程:程序員你們等不到了
責任編輯:陳貽新 來源: IBM developerWorks
相關推薦

2013-05-22 15:31:07

AOP的CGlib實現

2014-09-17 14:37:06

2018-04-18 07:34:58

2016-03-03 10:29:31

用戶信息改進

2010-07-21 16:23:09

運行telnet程序

2011-12-29 21:28:31

Metro UI

2023-06-18 23:19:17

ChatGPTPPT方式

2016-07-11 16:18:26

互聯網

2014-01-13 10:36:53

C++錯誤

2020-10-20 09:45:28

Facebook AI翻譯

2019-01-02 08:04:29

GAN損失函數神經網絡

2013-09-30 10:13:08

IT女程序員

2013-03-12 14:07:06

Java編程

2016-09-30 12:49:14

區塊鏈安全

2009-06-17 12:01:21

Linux

2013-10-21 15:11:15

OrmsqlOrm設計

2015-07-28 13:36:04

2009-06-17 09:05:05

Linux隱藏網絡鏈接命令

2010-09-02 09:14:35

CSS浮動

2021-03-17 10:00:37

物聯網安全漏洞物聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区电影 | 亚洲精品一区中文字幕乱码 | 婷婷综合久久 | 中文字幕综合 | 精品国产第一区二区三区 | 亚洲欧美日韩在线不卡 | 日本黄色免费片 | 欧美日韩精品 | 五月综合激情在线 | 精品一区二区三区在线观看国产 | 欧美日韩福利视频 | 国产伦精品一区二区 | 蜜桃一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 国产超碰人人爽人人做人人爱 | 久久久久国产一区二区三区四区 | 欧州一区二区 | 中文字幕亚洲免费 | 91在线精品视频 | 偷拍自拍网址 | 天天精品综合 | 夜操 | av网站在线播放 | 国产高清一区 | 国产精品日韩 | 日韩精品无码一区二区三区 | 久久精品国产一区 | 丁香久久 | 成人在线免费视频 | 91精品国产综合久久久久久丝袜 | 超碰成人免费 | 一道本视频 | 农夫在线精品视频免费观看 | 九九热九九 | avav在线看 | 天天操,夜夜爽 | 午夜精品久久久久久久久久久久久 | 日日干夜夜操 | 野狼在线社区2017入口 | 久久一区 | 国产在线97 |