自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初探微軟多范型語言Nemerle

開發(fā) 開發(fā)工具
Nemerle是一種多范型語言,提供了與C#近似的語法和強大的元編程系統(tǒng);Nemerle是微軟的研究項目之一,目前最新版本是0.9.7。

Nemerle是微軟的研究項目之一,由 Wrocław 大學(xué)的Kamil Skalski、Michał Moskal、Prof. Leszek Pacholski、Paweł Olszt等人發(fā)明.

Nemerle是一種多范型語言(面向?qū)ο蠛秃瘮?shù)式),完全支持編譯器宏(后來更多的是Lisp的變種,而不是C++),以及許多其他的東西。Nemerla與VS2010里發(fā)布的F#不同,后者是純函數(shù)式語言。

Nemerle提供了與C#近似的語法和強大的元編程系統(tǒng)。有關(guān)meta-program可以參考:http://en.wikipedia.org/wiki/Metaprogramming

你可以在http://nemerle.org/Main_Page下載它的***發(fā)布,在發(fā)布包中還帶有與visual studio的集成的IDE,可以很方便地學(xué)習(xí)Nemerle這種多范型語言,***版本是0.9.7。

最傳統(tǒng)的"Hello,World"

  1. using System.Console;     
  2. class Hello {     
  3.   static Main () : void {     
  4.     WriteLine ("Hello, world!");     
  5.   }     
  6. }    

Nemerle語言具有與C#近似的語法,無疑這使得學(xué)習(xí)曲線大幅下降。這里有幾個與C#版"Hello,World"不同的地方:

1. void等返回類型都寫到了右邊的冒號后面

2. 在使用using的時候,引用的不單可以是命名空間(namespace),還可以引用類的成員,這樣使得我們的WriteLine()函數(shù)都可以直接的使用。

多范型語言

  1. using System;  
  2. using System.Console;  
  3. using Nemerle.Utility;  
  4. using System.IO;  
  5. module Program  
  6. {  
  7.     class LineCounter  
  8.     {  
  9.         public static Main():Void  
  10.         {  
  11.             def sr=StreamReader(@"c:\test.rb");    //  (1)     
  12.             mutable line_no = 0;                   //  (2)  
  13.             mutable line = sr.ReadLine ();  
  14.             while (line != null) {                         
  15.                 WriteLine (line);  
  16.                 line_no = line_no + 1;                
  17.                 line = sr.ReadLine ();     
  18.              };                                      
  19.              WriteLine ("Line count: {0}", line_no);  
  20.         }  
  21.     }  

這里和C#不同的地方,首先我們通過關(guān)鍵字def定義了一個值sr,我們并沒有聲明它的類型,編譯器會根據(jù)上下文自動賦予類型,我們稱之為類型推斷(Type Inference)。而且new關(guān)鍵字也不需要了。后面的方法與C#完全一樣,不再贅述。

在(2)的地方,我們用mutable(即:可變的)聲明了一個值line_no,它很像C#里的變量,必須初始化才能使用,并且還可以改變它的值。它與(1)處的"@"C:\test.rb"不同,后者是一個不可變的值。

我們前面提過Nemerle是種多范型的語言,所以我們可以在需要的地方采用函數(shù)式編程,其他地方采用面向?qū)ο缶幊蹋瑹o疑更具備靈活性。

上面的代碼可以修改成

  1. using System;  
  2. using System.Console;  
  3. using Nemerle.Utility;  
  4. using System.IO;  
  5. module Program  
  6. {  
  7.  class FunctionalLineCounter   
  8.  {     
  9.     public static Main () : void     
  10.     {    
  11.         def sr = System.IO.StreamReader (@"C:\test.rb");       
  12.         def read_lines (line_no : int) : int   
  13.         {    
  14.             def line = sr.ReadLine ();         
  15.             if (line == null)             
  16.               line_no           //here          
  17.               else {           
  18.               System.Console.WriteLine (line);            
  19.               read_lines (line_no + 1)                 
  20.                }       
  21.          };      
  22.         System.Console.WriteLine ("Line count: {0}", read_lines (0));     
  23.     }   
  24.   }  

這段程序從"http://here"處結(jié)束并返回結(jié)果,而參數(shù)的累加結(jié)果正是***輸出的line_no的值.

文本文件有多少行,read_lines()函數(shù)就要執(zhí)行幾次,像使用while循環(huán)一樣,只不過稍微換了一種思路。這時候可能您會考慮到使用遞歸而影響效率的問題,事實是當(dāng)一個函數(shù)主體在調(diào)用另一個函數(shù)后執(zhí)行完畢,沒有創(chuàng)建任何新的堆棧,這被稱作尾端調(diào)用(Tail Call),所以這段代碼和while循環(huán)在效率上一樣的。Nemerle尤其注重將循環(huán)寫成遞歸的深入的理解.

強大的宏

使用 Nemerle 宏(macros)可以產(chǎn)生新的語法。在Nemerler IDE中,添加一個macro project,并在你的程序里引用這個macro project.

  1.  
  2. using Nemerle.Compiler;  
  3. namespace Macro  
  4. {  
  5.     macro forp (i, n , m , body) //(1)  
  6.     syntax("forpermutation","(",i,"from", n,"to",m,")",body) //(2)  
  7.     {  
  8.         <[ for ($i = $n; $i <= $m; $i++) $body ]>  
  9.     }  
  10.    

在(1)處,我們定義了一個宏 forp,帶有四個參數(shù),參數(shù)默認(rèn)類型是Expr,即表達(dá)式。 接下來,我們通過syntax定義了調(diào)用這個宏的語法,然后在<[...]>里定義宏的內(nèi)容。

這個宏可以這樣被調(diào)用

  1. mutable i=0;     
  2. forpermutation(i from 3 to 4) printf("%d\r\n",i);   

這樣我們就創(chuàng)造了一個新的語法。奇怪的是,我將from換成in,Nemerle則會報錯,文檔中并未給出原因,個人覺得應(yīng)該避免用關(guān)鍵字來定義語法。

 

【編輯推薦】

  1. Java以外的選擇 Scala編程語言簡介
  2. 函數(shù)式編程語言F#:基于CLR的另一個頭等編程語言
  3. 淺析.NET平臺編程語言的未來走向
  4. 新型的編程語言:eC
  5. 程序員如何選擇合適的編程語言
責(zé)任編輯:佚名 來源: JavaEye
相關(guān)推薦

2009-08-11 08:55:28

Spec#微軟

2013-10-11 10:17:21

微軟開源市場

2024-11-06 15:39:19

2024-01-10 09:50:58

AI 寫作功能CoWriterChatGPT

2024-10-29 13:24:15

2022-09-15 12:41:43

微服務(wù)后端前端

2012-02-09 10:58:35

Java

2009-07-10 10:19:06

Java ME多模搜索

2023-11-08 13:17:00

Python解釋型語言

2022-07-11 09:46:43

Kubernetes開源Linux

2018-04-25 09:06:32

Chrome瀏覽器語言

2023-08-28 06:52:29

2019-12-17 11:40:44

Node.js模塊前端

2012-02-09 09:00:54

匯編語言

2022-09-30 15:28:05

BERT語言模型自然語言

2013-12-10 11:16:53

內(nèi)存數(shù)據(jù)庫TechEd2013

2024-10-28 00:40:49

Go語法版本

2018-02-27 09:32:13

神經(jīng)網(wǎng)絡(luò)自然語言初探

2011-07-21 09:25:41

2020-11-14 16:05:44

Python微軟
點贊
收藏

51CTO技術(shù)棧公眾號