Nemerle,是微软公司提出的.NET平台上的新语言,由Wrocław大学的Kamil Skalski、Michał Moskal、Prof. Leszek Pacholski、Paweł Olszt等人发明。

Nemerle
编程范型多范型: 函数式, 指令式, 元编程, 面向对象
设计者Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta 于弗罗茨瓦夫大学
实作者JetBrains
发行时间2003年,​21年前​(2003
当前版本
  • 1.2.547.0(2017年9月1日)[1]
编辑维基数据链接
型态系统类型推论, 名称, 静态, 强类型
系统平台CLI
文件扩展名.n
网站nemerle.org
主要实作产品
Nemerle
启发语言
C#, Lisp, ML

范例

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

外部链接

  1. ^ http://nemerle.org/BuildHistory?major=1&minor=2.
  2. ^ Nemerle 1.2.507.0