Nemerle

维基百科,自由的百科全书
跳转至: 导航搜索

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();
    }
}

外部連結[编辑]