Nemerle
Nemerle,是微软公司提出的.NET平台上的新语言,由Wrocław大学的Kamil Skalski、Michał Moskal、Prof. Leszek Pacholski、Paweł Olszt等人发明。
编程范型 | 多范型: 函数式, 指令式, 元编程, 面向对象 |
---|---|
设计者 | Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta 于弗罗茨瓦夫大学 |
实作者 | JetBrains |
发行时间 | 2003年 |
当前版本 |
|
型态系统 | 类型推论, 名称, 静态, 强类型 |
系统平台 | CLI |
文件扩展名 | .n |
网站 | nemerle |
主要实作产品 | |
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(); } }