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

初探微軟多范型語言Nemerle

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

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

Nemerle是一種多范型語言(面向對象和函數式),完全支持編譯器宏(后來更多的是Lisp的變種,而不是C++),以及許多其他的東西。Nemerla與VS2010里發布的F#不同,后者是純函數式語言。

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

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

最傳統的"Hello,World"

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

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

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

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

多范型語言

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

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

我們前面提過Nemerle是種多范型的語言,所以我們可以在需要的地方采用函數式編程,其他地方采用面向對象編程,無疑更具備靈活性。

上面的代碼可以修改成

  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"處結束并返回結果,而參數的累加結果正是***輸出的line_no的值.

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

強大的宏

使用 Nemerle 宏(macros)可以產生新的語法。在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,帶有四個參數,參數默認類型是Expr,即表達式。 接下來,我們通過syntax定義了調用這個宏的語法,然后在<[...]>里定義宏的內容。

這個宏可以這樣被調用

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

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

 

【編輯推薦】

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

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

微服務后端前端

2012-02-09 10:58:35

Java

2009-07-10 10:19:06

Java ME多模搜索

2023-11-08 13:17:00

Python解釋型語言

2019-12-17 11:40:44

Node.js模塊前端

2022-07-11 09:46:43

Kubernetes開源Linux

2018-04-25 09:06:32

Chrome瀏覽器語言

2023-08-28 06:52:29

2012-02-09 09:00:54

匯編語言

2013-12-10 11:16:53

內存數據庫TechEd2013

2014-03-28 10:43:32

iPad

2022-09-30 15:28:05

BERT語言模型自然語言

2009-05-13 15:38:45

微軟并行語言Axum

2024-10-28 00:40:49

Go語法版本

2020-11-14 16:05:44

Python微軟
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久了 | 日韩视频中文字幕 | 日韩av在线免费 | 天天综合天天 | 日韩中文在线视频 | 亚洲永久| 欧美成视频 | 精品国产伦一区二区三区观看说明 | 波多野结衣二区 | 999精品在线 | 国产99久久精品 | 午夜免费网站 | 国产精品99久久久久久宅男 | 亚洲第一天堂 | 伊人春色在线 | 91天堂网| 男人的天堂在线视频 | 天堂免费 | 久久成人精品视频 | 欧美黄色大片在线观看 | 国产精品美女www爽爽爽视频 | 91在线观看网址 | 久久99国产精一区二区三区 | 天天躁日日躁狠狠的躁天龙影院 | 欧美激情视频网站 | 成人高潮片免费视频欧美 | 国产免费av在线 | 在线视频国产一区 | 国产精品久久久久久久免费观看 | 一级毛片免费看 | 在线精品观看 | 精品96久久久久久中文字幕无 | 99精品欧美一区二区蜜桃免费 | 亚洲午夜精品一区二区三区他趣 | 亚洲一区久久 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 大陆一级毛片免费视频观看 | 精品国产精品 | 国产又爽又黄的视频 | 日韩在线视频一区 | 91文字幕巨乱亚洲香蕉 |