Archive for the ‘Nemerle’ Category

  1. Hello, Connector/NET(Nemerle) World!

    Posted on 4月 12th, 2013 by cx20

    Connector/NET(Nemerle)

    Connector/NET は、.NET ベースの MySQL 接続用 API である。
    以下は Nemerle による Connector/NET ライブラリを使用した MySQL への接続例となっている。

    ソースコード(Nemerle + Connector/NET + MySQL)

    using System;
    using MySql.Data.MySqlClient;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "server=localhost;user id=root;password=P@ssW0rd";
            def sqlStr = "SELECT 'Hello, Connector/NET World!' AS Message";
     
            def con = MySqlConnection(conStr);
            def cmd = MySqlCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    コンパイル方法

    C:¥> ncc -o Hello.exe -r:MySql.Data Hello.n

    実行結果

    MESSAGE
    ---------------------
    Hello, Connector/NET World!
  2. Hello, ODP.NET(Nemerle) World!

    Posted on 2月 28th, 2013 by cx20

    ODP.NET(Nemerle)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(Nemerle + ODP.NET + Oracle)

    using System;
    using Oracle.DataAccess.Client;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "Data Source=ORCL;User ID=scott;Password=tiger";
            def sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL";
     
            def con = OracleConnection(conStr);
            def cmd = OracleCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    コンパイル方法

    C:¥> ncc -o Hello.exe -r:Oracle.DataAccess Hello.n

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  3. Hello, ADO.NET(Nemerle) World!

    Posted on 2月 27th, 2013 by cx20

    ADO.NET(Nemerle)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(Nemerle + ADO.NET + OLE DB + Jet データベース)

    using System;
    using System.Data.OleDb;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb";
            def sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            def con = OleDbConnection(conStr);
            def cmd = OleDbCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(Nemerle + ADO.NET + OLE DB + ACE データベース)

    using System;
    using System.Data.OleDb;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;";
            def sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            def con = OleDbConnection(conStr);
            def cmd = OleDbCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(Nemerle + ADO.NET + SQL Server)

    using System;
    using System.Data.SqlClient;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd";
            def sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            def con = SqlConnection(conStr);
            def cmd = SqlCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(Nemerle + ADO.NET + Oracle)

    using System;
    using System.Data.OracleClient;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "Data Source=ORCL;User ID=scott;Password=tiger";
            def sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL";
     
            def con = OracleConnection(conStr);
            def cmd = OracleCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(Nemerle + ADO.NET + ODBC + MySQL)

    using System;
    using System.Data.Odbc;
     
    class Hello
    {
        public static Main() : void {
            def conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd";
            def sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            def con = OdbcConnection(conStr);
            def cmd = OdbcCommand(sqlStr, con);
            con.Open();
            def reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    コンパイル方法(32bit OLE DB 使用時)

    C:¥> ncc -o Hello.exe -r:System.Data -platform:x86 Hello.n

    コンパイル方法(64bit OLE DB 使用時)

    C:¥> ncc -o Hello.exe -r:System.Data -platform:x86 Hello.n

    コンパイル方法(上記以外)

    C:¥> ncc -o Hello.exe -r:System.Data Hello.n

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  4. Hello, COM(Nemerle) World!

    Posted on 2月 9th, 2013 by cx20

    COM(Nemerle)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Nemerle による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    using System;
    using System.Reflection;
    using System.Runtime.InteropServices;
     
    class Hello {
        public static Main() : void {
            def objType = Type.GetTypeFromProgID("Shell.Application"); 
            def shell = Activator.CreateInstance(objType);
            def hwnd = 0;
            def title = "Hello, COM(Nemerle) World!" : object;
            def option = 0;
            def rootFolder = 36;
            def param = array[ hwnd, title, option, rootFolder ];
            def folder = shell.GetType().InvokeMember( 
                "BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param );
            when (folder != null)
            {
                _ = Marshal.ReleaseComObject(folder);
            }
            _ = Marshal.ReleaseComObject(shell);
        }
    }

    コンパイル方法(実行時バインディング)

    C:¥> ncc -o Hello.exe Hello.n

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Nemerle) Wolrd!             |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  5. Hello, Win32 API(Nemerle) World!

    Posted on 6月 25th, 2012 by cx20

    Win32 API(Nemerle)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Nemerle による Win32 API の呼出し例である。

    ソースコード

    using System;
    using System.Runtime.InteropServices;
     
    class Hello {
        [DllImport("user32.dll")]
        public extern static MessageBox(hwnd : int, text : string, caption : string, type : int) : int;
     
        public static Main() : void {
            _ = MessageBox( 0, "Hello, Win32 API(Nemerle) World!", "Hello, World!", 0);
        }
    }

    コンパイル方法

    C:¥> ncc -o hello hello.n

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(Nemerle) World!
    ---------------------------
    OK   
    ---------------------------
  6. Hello, Windows Forms(Nemerle) World!

    Posted on 6月 15th, 2012 by cx20

    Windows Forms(Nemerle)

    Windows フォーム(Windows Forms)は .NET Framework におけるユーザーインターフェイス基盤である。Windows アプリケーションにおけるウィンドウやダイアログに対応する。
    以下は Nemerle における Windows フォーム の例となっている。

    ソースコード

    using System.Drawing;
    using System.Windows.Forms;
     
    class HelloForm : Form {
       public this() {
           Size = Size( 640, 480 );
           Text = "Hello, World";
           def label1 = Label();
           label1.Size = Size( 320, 20 );
           label1.Text = "Hello, Windows Forms(Nemerle) World!";
           Controls.Add( label1 );
       }
     
       public static Main() : void {
           def form = HelloForm();
           Application.Run( form );
       }
    }

    実行方法

    C:¥> ncc -o hello -target:winexe -r:System.Windows.Forms hello.n

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Windows Forms(Nemerle) World!      |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. Hello, Nemerle World!

    Posted on 1月 28th, 2012 by cx20

    Nemerle

    Nemerle はオブジェクト指向言語と関数型言語の特徴をあわせ持ったハイブリッド言語である。構文は C# に似ており .NET Framework で動作する。名前の由来はゲド戦記の大賢人ネマール(Nemmerle)から。
    C# 同様に、UNIX 環境向けの .NET Framework 互換プロジェクト「Mono」により他の OS でも動作させることができる。

    ソースコード

    using System;
     
    class Hello
    {
        static Main() : void
        {
            Console.WriteLine("Hello, Nemerle World!");
        }
    }

    コンパイル&実行方法(Mono)

    $ mono ncc.exe -o hello hello.n
    $ mono ./hello.exe

    コンパイル&実行方法(.NET Framework)

    C:¥> ncc -o hello hello.n
    C:¥> hello

    実行結果

    Hello, Nemerle World!