Nemerle
編程範型 | 多範式: 函數式, 指令式, 元程式設計, 物件導向 |
---|---|
設計者 | Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta 於弗羅茨瓦夫大學 |
實作者 | JetBrains |
釋出時間 | 2003年 |
目前版本 |
|
型態系統 | 類型推論, 名稱, 靜態, 強型別 |
系統平台 | CLI |
副檔名 | .n |
網站 | nemerle |
主要實作產品 | |
Nemerle | |
啟發語言 | |
C#, Lisp, ML |
Nemerle,是微軟公司提出的.NET平台上的新語言,由Wrocław大學的Kamil Skalski、Michał Moskal、Prof. Leszek Pacholski、Paweł Olszt等人發明。
範例
Hello, World!
一個傳統的"Hello World!"可以被寫成C#-like的風格:
class Hello { static Main () : void { System.Console.WriteLine("Hello, world!"); } }
或更簡捷:
System.Console.WriteLine("Hello, world!");
巨集的例子
巨集可以讓你擁有自己的模板(boilerplate),具有靜態檢查功能。
資料庫存取
例如,使用Nemerle macros可以將SQL可成:
ExecuteReaderLoop ("SELECT firstname, lastname FROM employee WHERE firstname = $myparm", dbcon, { System.Console.WriteLine ("Name: {0} {1}", firstname, lastname) });
取代
string sql = "SELECT firstname, lastname FROM employee WHERE firstname = :a"; NpgsqlCommand dbcmd = new NpgsqlCommand(sql, dbcon, dbtran); dbcmd.Parameters.Add("a", myparm); NpgsqlReader reader = dbcmd.ExecuteReader(); while(reader.Read()) { string firstname = reader.GetString (0); string lastname = reader.GetString (1); System.Console.WriteLine ("Name: {0} {1}", firstname, lastname) } reader.Close(); dbcmd.Dispose();
上述的程式碼不僅只是隱藏部份的動作,更可增加編譯器在查詢字串上的效率。這裏使用的變數,由資料庫回傳行資料(columns)。ExecuteReaderLoop巨集會產生一些你想要的粗略的程式碼。而且,連結資料庫並檢查SQL語法是否合法。
新語言建構
使用Nemerle巨集(macros)可以產生更新式的語法(syntax):
macro ReverseFor(i, begin, body) syntax("ford", "(", i, ";", begin, ")", body) { <[ for($i = $begin; $i >= 0; $i--)$body ]> }
定義一個巨集ford(EXPR ; EXPR)EXPR syntax可被寫成
ford(i ; n)print (i);
Nemerle結合ASP.NET
Nemerle可以被直接嵌入ASP.NET:
<%@ Page Language="Nemerle" %> <script runat="server"> Page_Load(_ : object, _ : EventArgs): void { Message.Text = $"You last accessed this page at: $(DateTime.Now)"; } EnterBtn_Click(_ : object, _ : EventArgs): void { Message.Text = $"Hi $(Name.Text), welcome to ASP.NET!"; } </script> <html> <body> <form runat="server"> Please enter your name: <asp:TextBox ID="Name" runat="server" /> <asp:Button OnClick="EnterBtn_Click" Text="Enter" runat="server" /> <p><asp:Label ID="Message" runat="server" /></p> </form> </body> </html>
...或者儲成單一檔案格式,一行完成:
<%@ Page Language="Nemerle" Src="test.n" Inherits="Test" %>
PInvoke
Nemerle有更多原生平台函式庫(native platform libraries)。風格非常類似C#'s和其它.NET平台上的語言。下面是最簡單的例子:
using System; using System.Runtime.InteropServices; class PlatformInvokeTest { [DllImport("msvcrt.dll")] public extern static puts(c : string): int; [DllImport("msvcrt.dll")] internal extern static _flushall() : int; public static Main() : void { _ = puts("Test"); _ = _flushall(); } }