新聞中心
ZeroTurnaround很榮耀地發(fā)布了Frostbyte ,一種新的基于JVM棧的語言。該語言在出于使用標(biāo)準(zhǔn)Java軟件棧與工具的無奈下產(chǎn)生的。此語言很有希望成為過去多年來大量的JVM語言的答案。我們有些許信心并相信Frostbyte將會(huì)一并解決軟件開發(fā)者處理的社會(huì)與工程問題。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),寶山企業(yè)網(wǎng)站建設(shè),寶山品牌網(wǎng)站建設(shè),網(wǎng)站定制,寶山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,寶山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Frostbyte作為一個(gè)基于棧的語言最關(guān)鍵的創(chuàng)新是使用了帶括號(hào)的波蘭表達(dá)式語法。取代了以往先將指令壓入棧然后再執(zhí)行一條命令的方式,我們讓你能夠使用另外一種方式編碼,一種讓你感覺更加自然的方式。
Frostbyte代碼映射非常接近Java字節(jié)碼,任何代碼的系統(tǒng)開銷都表現(xiàn)得非常明顯。我們擇優(yōu)的挑選了一些能夠兼顧語言簡潔與功能強(qiáng)健,讓你能夠替換了大多數(shù)的Java程序。
示例
先看看最基本的hello world例子:
- fun main :=
- (call echo ?Hello World!“)
Frostbyte允許你定義二進(jìn)制塊,它總是用內(nèi)聯(lián)方式調(diào)用。例如,以下就是一個(gè)使用標(biāo)準(zhǔn)庫echo二進(jìn)制塊的例子:
- chunk echo :=
- (with System (with (get out) (call println ...)))
擴(kuò)展hello world以后:
- fun main :=
- (with System (with (get out) (call println ?Hello World!“)))
Frostbyte使用Ropes作為主要的文本類型來取代String,但是Ropes會(huì)被轉(zhuǎn)換為String,例如實(shí)現(xiàn)已有的Java代碼:
- fun main (args: Rope[]) :=
- (echo (with ?Hello, “ (call concat (args head))))
如果上面的代碼保存為hello.fb文件,你可以用fb命令執(zhí)行它:
- > fb hello Jim
- Hello, Jim
Frostbyte語言是完全國際化的語言。事實(shí)上,內(nèi)建的默認(rèn)語言是Estonian(愛沙尼亞語),但是語言會(huì)被從每一個(gè)源文件中檢測(cè)到。其他的語言提供簡單的轉(zhuǎn)換文件--英語(英國)與俄語被默認(rèn)支持了。例如:
- K?is=Rope
- esik=main
- kaja=echo
- v?ttes=with
- kutsu=call
- j?tka=concat
- head=pea
Estonian(愛沙尼亞語)表達(dá)的hello.fb如下:
- fun esik(argumendid: K?is[]) :=
- (kaja (v?ttes ?Hello, “ (kutsu j?tka (v?ttes argumendid (kutsu pea)))))
你可以為你自己的代碼提供翻譯映射--轉(zhuǎn)義將會(huì)作為聲明存儲(chǔ)在.class文件中。Frostbyte IDE(即將推出)將會(huì)懂得這些轉(zhuǎn)義并根據(jù)你選擇的語言給與代碼自動(dòng)完成功能。
當(dāng)然,一個(gè)語言介紹沒有處理Fibonacci問題是不完整,一下我們有幾種方式可以處理。使用if語句與遞歸是一種方法。我們嘗試免去使用if語句,因?yàn)樗_實(shí)是一種退化的模式匹配形式。在Frostbyte一種模式匹配的方法是在函數(shù)參數(shù)中描述模式并為每一種情況提供分離的函數(shù)體。
- fun fib (0) := 0
- fib (1) := 1
- fib (n) := + (call fib (- n 1)) (call fib (- n 2))
正如你所看到的,例如+與*操作符需要call關(guān)鍵字。你也可以用op關(guān)鍵字穿件自己的操作符。
模式匹配也可以以表達(dá)式的方式出現(xiàn)在函數(shù)體內(nèi),一下是一個(gè)Estonian(愛沙尼亞語)的示例。我們將要介紹代碼塊,循環(huán)/閉包 和 let(olgu) 關(guān)鍵字。
- // get current time as Aeg (Time) type
- amps praegu: Aeg := p??ra (v?ttes System (kutsu currentTimeMillis)) Aeg
- // Funktsioon, mis leiab raamatukogust laenutatud raamatud,
- // mille tagastamisega on hilinetud v?i mis on rikutud
- fun leiaHilinenudRaamatud := (
- olgu raamatud := v?ttes Andmebaas (kutsu leiaLaenutatudRaamatud);
- v?ttes raamatud (kutsu koonda ( raamat ->
- ons? (< (v?ta t?htaeg) (kutsu praegu)) ->
- (uus Hilinemine raamat)
- ons? (v?ta rikutud?) ->
- (uus Rikkumine raamat)
- ))
- )
為了讓Estonian(愛沙尼亞語)能看懂,下面列出了翻譯映射:
- amps=chunk
- praegu=now
- Aeg=Time
- p??ra=convert
- olgu=let
- koonda=collect (filter + map)
- ons?=case (introduce a pattern)
- uus=new
- raamatud=books
- raamat=book
- t?htaeg=due date
- etc.
復(fù)雜示例
讓我們來看看更加復(fù)雜的關(guān)于類的介紹:
- class Vector2(x: Double, y: Double) :=
- // dot product
- op ?·(that: Vector2) :=
- + (* (get this x) (get that x)) (* (get this y) (get that y))
我們可以將(get this x)寫為(with this (get x)),但是我們也with關(guān)鍵字來縮短:
- op ?·(that: Vector2) :=
- (with this (
- + (* (get x) (get that x)) (* (get y) (get that y))
- ))
但更重要的是,如果我們編寫 with X or Y,那么X和Y的元組將被放入棧中,任何訪問這些域或者方法將會(huì)在X和Y兩者間交替。
- op ·(that: Vector2) :=
- (with this or that (
- + (* (get x) (get x)) (* (get y) (get y))
- ))
我們可以再看看一切循環(huán)的模式,然后將其循環(huán)減少:
- (with this or that (
- + (* dup (get x)) (* dup (get y))
- ))
dup 關(guān)鍵字將復(fù)制接下來的二進(jìn)制碼指令,但是結(jié)合this or that使用意味著***個(gè)(get x)將會(huì) 變成 this.x并且下一個(gè)(get x將會(huì)編程that.x),這是多么屌的特性啊。
二進(jìn)制碼
我敢打賭你一定對(duì)Frostbyte生成的二進(jìn)制碼很好奇。讓我們?cè)倏纯凑归_了的hello world吧。
- fun main := (with System (with (get out) (call println ?Hello World!“)))
javap將生成這些:
- 0: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
- 3: ldc #22; //String Hello World!
- 5: invokevirtual #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)
- 8: return
確實(shí)這個(gè)轉(zhuǎn)換相當(dāng)?shù)刂苯樱簑ith System(get out)在這種情況下轉(zhuǎn)換為getstatic。然后“Hello World”變成ldc,然后call invokevirtual。call總是被轉(zhuǎn)換為invokestatic,invokevirtual或者invokespecial ,除了當(dāng)它被用來擴(kuò)充一個(gè)chunk ,在這種情況下它會(huì)被chunk替換,任何的參數(shù)將會(huì)被插入到bitemarks(例如在echo chunk中,...便是一個(gè)bitmark)
- chunk echo := (with System.out (call println ...))
Frostbyte 1.0發(fā)展藍(lán)圖
該語言仍在發(fā)展壯大中,但是我們工作已經(jīng)很接近***個(gè)公測(cè)版了。為了做好1.0版,我們有一些很牛逼的計(jì)劃:
- First class co-monads
- Kabanov-Raudj?rv type inference
- Lazy chunks
- goto statement with labels
-
Dynamorphisms
然而,我們?nèi)栽诓粩嗯Φ臑楣冒鎶^斗著。以下是一些讓你能夠熟悉該語言以及大版本更新的一些鏈接:
- Frostbyte 1.0 Language Specification
- Documentation, Tutorials and Examples
-
API reference
英文:zeroturnaround.com
原文鏈接:http://www.oschina.net/question/89964_47121
【編輯推薦】
- Final關(guān)鍵字對(duì)JVM類加載器的影響
- JVM加載過程及異常
- 當(dāng)下主流JVM語言一覽
- JVM如何判斷類相同
- 基于 JVM 的新一代編程語言:Fantom
標(biāo)題名稱:Frostbyte:來自ZeroTurnaround的新JVM語言
文章分享:http://fisionsoft.com.cn/article/dhedggi.html


咨詢
建站咨詢
