Nemerle(ネマール)は、
.NETプラットフォーム上で動作する
静的型付けの高度なプログラミング言語です。この言語は、手続き型、
オブジェクト指向、そして関数型プログラミングのパラダイムを融合したハイブリッドな性質を持ち、開発者に多様なアプローチを提供します。
Nemerleの特徴
Nemerleの最も注目すべき特徴の一つは、
オブジェクト指向プログラミングと関数型プログラミングの両方をシームレスに組み合わせられる点です。プログラムの構造は
オブジェクト指向的に設計しながら、メソッドの中身は関数型スタイルで記述するといった柔軟な使い方が可能です。これにより、特定のタスクに対して最も適したプログラミングスタイルを選択できます。
Nemerleの機能詳細
- - 型推論: Nemerleの型推論システムは、変数や式の型を自動的に推論するため、コードを簡潔に保ちつつ、型安全性を確保します。
- - 全ては式: Nemerleでは、全てのコードが式として扱われるため、より関数型的なスタイルでプログラミングできます。
- - タプル: 複数の値をグループ化するのに便利なタプルを簡単に利用できます。
- - パターンマッチ: 複雑なデータ構造から特定のパターンを取り出すことができるパターンマッチングは、コードの可読性と簡潔性を高めます。
- - 関数型とローカル関数: 高階関数やローカル関数を自由に利用でき、コードの再利用性とモジュール性を向上させます。
- - バリアント: バリアント(代数的データ型)により、複数の異なる型の値を一つにまとめて扱うことができます。
メタプログラミング
Nemerleのマクロ機能は、コンパイル時にプログラムのコードを生成、解析、編集することを可能にします。マクロは通常のメソッド呼び出しのように使用できるほか、新しい構文を定義することも可能です。Nemerleの多くの構文(if、for、foreach、while、usingなど)は、実際にはマクロによって定義されています。
例として、`if`マクロは条件分岐の構文を定義し、開発者は新しい構文を定義して、言語を拡張できます。
統合開発環境
NemerleはVisual Studio 2008に統合できるほか、Visual Studio Shellをベースとした無料のIDEも提供されています。また、SharpDevelop用のプラグインも存在します。Visual Studio 2010以降のバージョンにもアドインを導入することで統合が可能です。
コード例
- - Hello, World!: C#風のスタイルで書く場合
nemerle
System.Console.WriteLine("Hello, World!");
よりシンプルな書き方
nemerle
WriteLine("Hello, World!");
- - 文字列フォーマット: `$`記号を用いて変数の値を文字列中に展開できます。
nemerle
def name = "Nemerle";
WriteLine($"Hello, {name}!");
- - コード生成: `StructuralEquality`, `Memoize`, ``, `with`などのマクロはコンパイル時にコードを生成します。`StructuralEquality`, `Memoize`のようなマクロはC#の属性のように見えますが、実際にはコンパイル時に適切なコードに変換されます。
- - データベースへのアクセス: Nemerleのマクロを使ってSQL文を簡単に実行できます。
nemerle
sql "select
from users where id = $(userId)" ExecuteReaderLoop(r =>
{ var name = r.GetString(0);
Console.WriteLine(name); });
これは、次のコードと同等の処理を行います。
csharp
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand("select from users where id = @userId", connection))
{
command.Parameters.AddWithValue("@userId", userId);
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var name = reader.GetString(0);
Console.WriteLine(name);
}
}
}
}
`ExecuteReaderLoop`マクロは、本来プログラマが記述する必要のあるコードを生成し、
SQL文が正しいかをコンパイル時に検査します。
- - 新しい構文の導入: Nemerleのマクロを使用することで、言語に新しい構文を導入できます。例えば、`ford`構文を定義して使用できます。
nemerle
macro ford ( x : EXPR ; y : EXPR ) z : EXPR
{
` for ($x; $y; $z) ;
}
ford( def i = 0; i < 10; i = i + 1 )
WriteLine(i)
NemerleとASP.NET
NemerleはASP
.NETに直接組み込むことも可能です。
html
<%@ Page Language="Nemerle" %>
また、外部ファイルにコードを記述してそれを呼び出すことも可能です。
html
<%@ Page Language="Nemerle" Src="test.n" Inherits="Test" %>
P/Invoke
Nemerleはネイティブのプラットフォームライブラリを呼び出すことができ、その構文はC#やその他の
.NET言語に非常に似ています。
参考情報
- - RSDN Magazineの記事
- - Michał Moskal氏による「Type Inference with Deferral」
- - Denis Rystsov氏によるプレゼンテーション「Nemerle is notable」
- - Andrey Adinetz氏による「Unconventional languages for unconventional supercomputers」
外部リンク
Nemerleは、その柔軟性と高度な機能により、多様な開発ニーズに応える強力な選択肢となるでしょう。