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

外部連結
----

* Language Homepage\*（页面存档备份，存于）

* Nemerle at 99 Bottles of Beer（页面存档备份，存于）
* Interesting entries about Nemerle from akiramei's diary (in Japanese)（页面存档备份，存于）

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
.NET |
| --- |
|  |
|  | 
* .NET(.NET CORE) 3
* .NET框架
* Mono
* Compact Framework
* Micro Framework
* Silverlight
* SSCLI
* DotGNU(Portable.NET)

 |
|  |
| 架構 | 
* 基礎類別庫
* 共同語言執行期元件
* 碼存取安全性
* 組件
* 中介資料
* COM互通性
* .NET標準

 |
|  |
| 共同語言基礎架構 | 
* 共同語言基礎架構（CLI）
* 共同型別系統
* 共同中介語言
* 虛擬執行系統

 |
|  |
| CLI語言 | 

|  |  |
| --- | --- |
| 共同語言1 | 
* C#
* Visual Basic .NET
* C++/CLI（Managed）
* F#
* J#
* JScript .NET
* PowerShell

 |
|  |
| 其他語言2 | 
* Axum
* A#
* Boo
* Oxygene
* IronLisp
* IronPython
* IronRuby
* Nemerle
* Phalanger
* P#

 |

 |
|  |
| Core家族3 | 
* ASP.NET Core (
* Entity Framework Core
* ASP.NET Core MVC )

 |
|  |
| 元件 | 
* ADO.NET (Entity Framework
* Data Services)
* ASP.NET (AJAX
* Dynamic Data
* MVC
* Razor)
* ClickOnce
* 动态语言运行时
* LINQ
* MAUI
* Parallel FX Library (PLINQ
* TPL)
* WCF
* Windows Forms
* WPF
* Windows CardSpace
* WF（WWF）
* Remoting
* XAML

 |
|  |
| 比較 | 
* C#与Java
* C#与Visual Basic .NET
* Java与.NET平台

 |
|  |
| 即將推出 | 
* "Acropolis"
* "Jasper"

 |
|  |
| 1微软在Visual Studio或.NET Framework中提供了或者将提供支持的语言2被多數使用者使用，且非教學或研究型的語言。3具有跨平台（Windows, Mac OSX, Linux）能力的開發框架。 |

 |

1. ↑  .