スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

Erlang のインストール(Windows)と Emacs モードの設定

今回は関数型言語である Erlang の Windows へのインストールと簡単な使用法、および Emacs の erlang 用モードの設定についての記事です。

Erlang

Erlang とは

Erlang(アーラン)は大手通信機器メーカーであるエリクソン(Ericsson)が開発した関数型プログラミング言語です。 名前は数学者のアグナー・アーランからとられていますが、 ERicsson LANGuage の意味も兼ねているそうです。

Java アプリが JVM の仮想マシン上で動作するように Erlang のプログラムは BEAM といわれる仮想マシン上で動作します。 電話会社の言語だけあって、速度よりも並列性や耐障害性を重視したものになっています。 開発のとっかかりは Prolog を改造して作ったということで、かなり Prolog 風の構文です。
7つの言語 7つの世界7つの言語 7つの世界
(2011/07/23)
Bruce A. Tate

商品詳細を見る

インストール

Erlang のサイトのダウンロードページからインストーラーをダウンロードします。 lang_erlang_dl.png

日本語のミラーサイトもあります。こちらからもダウンロード可能です。

ダウンロードしたインストーラーを起動し、ウィザードに従っていけばインストールは完了します。
インストール後、 bin フォルダー( C:\Program Files\erl5.10.1\bin など) を環境変数 Path に追加してください。

使い方

Erlang は 3 つの方法で使用することができます。
  1. 対話モード(Eshell)
  2. コンパイル
  3. スクリプト

ソースファイル

使用法の前にサンプル用のソースファイルを挙げておきます。

hello.erl :
-module(hello).
-export([start/0]).

start() -> 
        io:format("Hello world!~n").
test.erl :
%% 階乗の計算

-module(test).
-export([fac/1]).
-export([print_fac/1]).
-export([print_fac_from_str/1]).

fac(0) -> 1;
fac(N) -> N * fac(N-1).

print_fac(N) ->
    io:format("~p factorial : ~p~n", [N, fac(N)]).

%% リストの先頭を取り出して、文字列を整数に変換してから計算
print_fac_from_str(Str) ->
    print_fac(list_to_integer(hd(Str))).        
拡張子は erl または hrl を使用します。
hrl はヘッダーファイルにあたるもので、 include するファイルに使われます。 コメントには日本語が使えます。 UTF-8 でも Shift-JIS でも問題ありません。
文字列としては Shift-JIS で保存してあれば、一応使えます。 ただし、次の werl.exe では文字化けします。

対話モード (Eshell)

[スタート] メニューから Erlang(werl.exe) を起動するか、 コマンドライン上で erl コマンドを実行すると Erlang の対話モードである Eshell (Erlang shell) が起動します。
lang_erlang_werl.png

Emacs を使う人間にとっては eshell (Emacs shell) と名前がかぶって、ちょっとわかりづらいです。
ただ、対話モードは eshell 上では動かない言語が多い中、 Erlang の erl は eshell 上でもちゃんと動作します。


この対話シェルは 1 行ずつ実行することもできますし、 Prolog のようにソースファイルを読み込む(コンパイルする)こともできます。
シェル内でのコンパイルには次のコマンドを実行します。この際、パス区切りは / で、 拡張子は取り除いて指定します。
  c("ファイルパス").
終了する場合にはメニューや [X] ボタンで終了するか、 q(). または halt(). と入力します。
そのほかのコマンドは help(). で確認してください。

コンパイル

Java の class ファイルのように、コンパイルして中間ファイルを作成し、実行することができます。 中間ファイルの拡張子は beam です。
手順は次のようになります。
  1. erlc でコンパイルして、 beam ファイルを作成
  2. erl にモジュール名、開始関数名等を渡して起動する。
サンプルの実行 :
~/seven/erlang/sample $ ls 
hello.erl  test.erl
~/seven/erlang/sample $ erlc hello.erl 
~/seven/erlang/sample $ ls 
hello.beam  hello.erl  test.erl
~/seven/erlang/sample $ erl -noshell -run hello -run init stop
Hello world!
~/seven/erlang/sample $ erlc test.erl 
~/seven/erlang/sample $ erl -noshell -run test print_fac_from_str 5 -run init stop
5 factorial : 120
コンパイルした beam ファイルを使用する場合には -run のオプションを使用します。
-run モジュール名 [関数名 [引数 ...] ]
関数名を省略した場合は start がデフォルトで使用されます。

init は Erlang の標準モジュールです。 そのままだとプロセスが終了しないので、 stop 関数を呼び出しています。
また、 -noshell はシェルモードにしないためのオプションです。

erl のその他のオプションについては、ヘルプのオプションが無いので、以下のページを見て下さい。
(man 表示のオプションはありますが、 Windows では使えません) erlc は -help でヘルプを表示することができます。

スクリプト

escript を使うと、コンパイルなしでソースファイルを実行させることができます。
ただし、 スクリプトとして実行するためのファイルは今までのものと少し違いがあります。
  • 先頭行は シェバン行 もしくは 空行
  • エントリーポイントとなる main の関数が必要
    • コマンド引数が main の引数
  • モジュール定義(-module)が不要
シェバン行というのは、 スクリプトを渡すコマンドのパスを書く行です。 Unix では、これでスクリプトファイルを直接実行できるようになります。
Windows では意味がありませんが、詰めて書くとエラーです。 適当に書いておくか、空行にしておいて 2 行目から書き始める必要があります。

以下はスクリプト用のサンプルです。

hello_script.erl
#!/usr/bin/env escript
main(Args) ->
    io:format("Hello world!~n"),
    %% コマンド引数を表示
    lists:foreach(fun(Arg) ->
                          io:format("~p~n", [Arg])
                  end,
                  Args).
実行結果 :
~/seven/erlang $ escript.exe hello_script.erl foo bar
Hello world!
"foo"
"bar"
escript もヘルプが見れないようなので、オプションは以下のページを参考にして下さい。

Emacs モード

続いて Erlang 編集用の Emacs モードのインストールと使用方法です。

インストールと設定

Erlang 用のモード(erlang-mode) はパッケージが用意されているので、 簡単にインストールすることができます。

[Option] -> [Manage Emacs Packages] メニューでパッケージのモードを開き、 erlang のパッケージをインストールします。
これだけで、 *.erl, *.hrl のファイルを開くと、 erlang-mode となります。
Emacs から Erlang の対話シェルを呼び出す場合も、 環境変数の Path さえ設定しておけば、そのまま使えます。

ただし、追加しておいた方がいい設定が 1 つあります。
erlang-mode ではコードのハイライトにレベルがあるのですが、 モードを開いた時にはレベル 0 の OFF 状態になっています。
そこで ~/emacs.d/init.el にレベルを指定する記述を追加します。
;; Erlang
(add-hook 'erlang-mode-hook 'erlang-font-lock-level-4)
レベルは 4 で問題ないと思いますが、変えたい場合は 4 の部分を 1, 2, 3 のどれかにして下さい。

使い方

よく使用しそうなコマンドをいくつか紹介します。
erlang-mode では [Erlang] のメニューがでるので、そのほかの機能はそちらで確認して下さい。

tags 機能
etags コマンドで Erlang 用の TAGS ファイルを作成することができます。
      ~/seven/erlang $ etags *.hrl *.erl 
tags 機能の使い方に関しては前回の記事をご覧下さい。
対話シェルの呼び出しとコンパイル
C-c C-l で対話シェルを Emacs 内で起動させることができます。
C-c C-k では対話シェルを起動させ、編集中のバッファーをコンパイルします。
lang_erlang_emacs.png


関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
28位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
4位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

07月 | 2017年08月 | 09月
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。