読者です 読者をやめる 読者になる 読者になる

技術memo

関数型ゴースト

Macでプログラミング環境を作った話

FSharp SML Scheme Emacs env

Mac初心者です。 今までプログラミングは仕事でも趣味でもWindows機を使っていたのですが、せっかくMBAを買ってしまったので、そろそろ開発環境を本気出して作ってみようかと思い立ち、あれこれインストールしてみました。 その辺りのメモ書きです。

Xamarin Studioを入れてみる

もちろんF# 用です。公式: Advanced IDE For iOS & Android Programming - Xamarin Studio ホットなニュース(MSの今回の発表で何が起こるのか、の私的感想 - 亀岡的プログラマ日記等参照)によれば、待っていれば公式サポートが入りそうな気配もありますが、まあそれはそれ。

キーボードショートカット等慣れないところもありましたが、順調に使い出せています。 (「インタラクティブで実行」のキーが^+returnと書かれていて何かと思ったらcontrolキー+エンターキーでした。Macの特殊キー事情はよくわかりません。)

MacPortsを入れてみる

意外と大変でした。主にバージョン違い等により。

  • Xcodeは今ではAppStoreから入手可能になっていたので、その点では問題ありません。
  • XcodeをインストールしてからOSを更新(->Yosemite)したのが悪いのか、portコマンドに「darwinのバージョンが違う」などと怒られます。仕方がないのでMacPortsをバージョンアップしました。

SML# 2.0.0を入れてみる

SML#, 熱いですよね、言語設計が。 前に少し触った時はWindows7+MinGW環境だったため、特に苦労は……ありましたが……(シグネチャファイルの書き方がわからない、など)。まあそれはそれとして。

公式(SML# - SML#のダウンロード)から落とすと、Portfileなるファイルが展開されます。 どうやらそれは上記のMacPortsの物であるらしい、ということで、解説ページ(Portfile の作り方 - MacPorts-JP)を見ながら導入します。

  • ~/ports/devel/smlsharp/PortFileに配置
    • 後から見直してみるとdevelじゃなくてlangカテゴリにしたほうがよかったのかもしれません。
  • /opt/local/etc/macports/sources.conf をsudo付けて編集。
    • file:///Users/{ユーザ名}/portsを追加。
  • portindexコマンド実行
  • port search smlsharpとして存在が認識されていることを確認して、sudo port install smlsharpでインストール実行。LLVMなども同時に落ちてくるので待機時間が結構ありました。

インストールが終わったらsmlsharpコマンドで対話環境を立ち上げて、稼動確認します。

SML# 2.0.0 (2014-04-04 11:47:08 JST) for i686-apple-darwin14.0.0 with LLVM 3.4
# "hello world";; 
val it = "hello world" : string
# 

Gauche(Scheme処理系)を入れてみる

そろそろLisp(Scheme)も何か一つはやっておきたい感情から、ついでに導入してみます。

  • せっかくMacPortsを使えるようにしたのだからと、port search gaucheコマンドで検索してみると、本体と、パッケージ系の情報が出てきます
  • sudo port install gaucheコマンドでインストール実行します。

goshコマンドで対話環境を立ち上げてハローワールドしてみます。

gosh> (print "Hello World!")
Hello World!
#<undef>
gosh> 

Emacsを導入してモードを設定してみる

私は今まで(殆ど)WindowsGUIエディタばかり使っていましたし、Vimもサーバでの作業が何とかできる程度の初心者です。 ですが、世の中ではLISPといえばEmacs, MLといえばEmacsというような風潮です。 仕方がないのでこの機会にEmacsも触ってみることにします。

Schemeの設定

Scheme用の設定はこのあたり(僕と契約してLisperになってよ!-Gaucheの開発環境を整えよう- - (define -ayalog '()))を参考にしました。

  • ~/.emacs.d/init.el内、goshのインストールパスだけ変更しました
(setq scheme-program-name "/opt/local/bin/gosh -i")

SMLの設定

sml-modeは……絶望的に…日本語情報が…無いような……厳しい……。

;;sml-modeの展開先ディレクトリにパスを通す
(add-to-list 'load-path "~/.emacs.d/els/sml-mode-5.0")
;;smlsharpのコマンド実体
(setq sml-program-name "/opt/local/bin/smlsharp")
;;モードの関連付け
(setq auto-mode-alist 
      (append auto-mode-alist 
              '(
                ("\\.sml$" . sml-mode)
                ("\\.sig$" . sml-mode)
                ("\\.ML$"  . sml-mode))))
;;ロード
(autoload 'sml-mode "sml-mode" "Major mode for editing SML." t)
(autoload 'run-sml "sml-proc" "Run an inferior SML process." t)
  • 基本操作は以下のような感じ。しばらく試して様子見したいところです。
    • M-x sml-modeか.sml等ファイル開くとsml-mode
    • C-c C-sでinteractive起動
    • C-c C-bでバッファの中身をinteractiveに送信

しばらくはEmacsに慣れながら入門書の写経でもしていたいと思います。