Nemerle

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Nemerle
编程范型多范型: 函数式, 指令式, 元编程, 面向对象
设计者Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta 于弗罗茨瓦夫大学
实现者JetBrains
发行时间2003年,​23年前​(2003
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    类型系统类型推论, 名称, 静态, 强类型
    系统平台CLI
    文件扩展名.n
    网站nemerle.org
    主要实现产品
    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();
        }
    }
    

    外部链接[编辑]