Nemerle
出会い最短記録!!
B分で即アポHも可

[Wikipedia|▼Menu]

Nemerle
パラダイムマルチパラダイム: 関数型オブジェクト指向命令型
設計者Kamil Skalski、Micha? Moskal、Prof. Leszek Pacholski、Pawe? Olszta
最新リリース0.9.3 / 2006年
型付け強い静的型付け型推論あり
主な処理系.NET FrameworkMono
影響を受けた言語MLC#
ライセンスGPL
ウェブサイトwww.nemerle.org
 ・編・歴 

Nemerle(ネマール)は.NETプラットフォーム上で動作する静的型付け高級言語である。

Wroc?aw University(ポーランド)のKamil Skalski、Micha? Moskal、Prof. Leszek Pacholski、Pawe? Olsztaらによって開発された。手続き型、オブジェクト指向、関数型言語の機能を取り込んだハイブリッド言語である。

C#によく似た構文構造と強力なメタプログラミング機能が特徴となっている。



目次

1 特徴

2 例

2.1 Hello, World!

2.2 マクロの例

2.2.1 データベースへのアクセス

2.2.2 新しい言語の実装


2.3 NemerleとASP.NET

2.4 P/Invoke


3 外部リンク

//


特徴

おそらくNemerleの最も重要な特徴は、オブジェクト指向プログラミングと関数型プログラミングの両方を混在可能であるということであろう。プログラムのトップレベルではオブジェクト指向の構造を用いるが、メソッド本体には関数型のスタイルを用いることもできる。これは幾つかのプログラムにおいて非常に便利に機能する。またデリゲートやバリアント型、パターンマッチングなどの機能を含む。

別の特徴として、プログラマの負担を軽減するためにハイレベルなアプローチを取っていることも挙げられる。マクロ型推論などの特徴がそれに該当する。

関数型言語の世界から取り入れられた機能は、バリアント(代数的データ型)、パターンマッチング、型推論、そしてパラメータ的多態(ジェネリクス)などである。メタプログラミングシステムは高度なコンパイラ拡張、ドメイン固有言語の組み込み、部分評価アスペクト指向プログラミングなどを許容する。

また、.NETの機能をC#と同じくらい(あるいはそれ以上に)簡単に扱うことも可能である。



Hello, World!

伝統的なHello worldは、次のようにC#ライクなスタイルで書くことができる。class Hello { static Main () : void { System.Console.WriteLine ("Hello, world!"); }}

あるいは、よりシンプルにSystem.Console.WriteLine("Hello, world!");

とも書ける。


マクロの例

マクロは、プログラム中に繰り返し出現するコードをコンパイル直前に生成する機能である。


データベースへのアクセス

例えば、Nemerleのマクロを用いて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();

これは、ライブラリ中の幾つかの動作を隠すだけでなく、クエリ文字列や変数、データベースから返されたコラムがコンパイラによって理解され実行されるということを表している。ExecuteReaderLoopマクロは、プログラマが記述しなければならないコードと同等のコードを生成させることができる。またSQL文が正しいかどうかをコンパイル時に検査することも可能である。


新しい言語の実装

Nemerleのマクロを用いると、言語に新しい構文を導入することも可能である。macro ReverseFor (i, begin, body) syntax ("ford", "(", i, ";", begin, ")", body){ <[ for ($i = $begin; $i >= 0; $i--) $body ]>}

この例ではford ( EXPR ; EXPR ) EXPR構文を定義していて、この構文は次のように用いることができる。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" %>


P/Invoke

Nemerleはネイティブのプラットフォームライブラリを呼び出すことができる。その構文はC#やその他の.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(); }}


■可愛い娘探セル■
■18歳以上「入口」■

[次ページ]
[オプション/リンク一覧]
[記事の検索]
[おまかせ表示]
[トップページ]
[ニュースをチェック!]
[列車運行情報]
Size:12 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:Mamenoki