./index.html ../index.html

MercuryとCygwinに挑戦

論理型言語のくせにexeが作れるMercuryを試みてみます。

だいぶ前から見つけつつも、Cygwin入れたく無いなあ、と躊躇していたMercuryです。 Cygwinを(他の目的のためですが)入れてしまったので、ついでにこれも挑戦しておきます。 いつものように、さわりだけやって飽きる可能性は大です。

最終リリース日時が、旬を過ぎてしまったみたいで寂しい上に、Googleの日本語のページからの検索ではio__write_stringすら0件…

導入

MinGW版を落としてきました。

Cygwinのデフォルトインストールでは、必要なunzipとmakeが入りません。 同名のexeが既にHDDに入ってPATHが通ってたりしますが、Cygwinとは無関係なやつですので上手く動きません。 なので追加で入れてやります。

で、ダウンロードページに書かれていた方法で解凍して…

$ unzip -d / mercury-compiler-0.11.0.i686-pc-mingw.zip

色々パスが通って無いので、リンクを貼ります。 試行錯誤の結果、c2init, mercury_update_interface, mgnuc, mkinit, ml, mmake, mmcの計7つ、/bin/にリンクを貼れば、hello_world.mのコンパイルは出来ます。

まずこのサンプルをコンパイルしようと、ソースファイルhello.mを用意して、失敗。 中に書かれたモジュール名とファイル名を合わせないとだめな様です。 で、hello_world.mで…

シンボリックリンクはln -s 元 先で作れます。 /usr/bin/に作ろうとしても/bin/に作られてしまいます。 (そういう風にマウントされているようです。Thanks to CyberX.)

で、環境変数もいろいろ試行錯誤して…

@echo off

set CYGWIN=ntsec
set HOME=/home/yt
set MAKE_MODE=UNIX
set SHELL=/bin/bash
SET C_INCLUDE_PATH=C:\Progra~1\cygwin\usr\local\mercury-0.11.0-mingw\lib\mercury\inc;C:\Progra~1\Mingw32\include
SET LIBRARY_PATH=C:\Progra~1\Cygwin;C:\Progra~1\Mingw32\lib ←こっちは無駄でした(T_T)

C:
chdir C:\progra~1\cygwin\bin

bash --login -i

最後のリンクの段階で、Windowsネイティブ版MinGWのgccがCygwinパスを理解しないので、手動で。

C:\Program Files\cygwin\home\yt\mercury>gcc hello_world_init.o hello_world.o C:\
Progra~1\cygwin\usr\local\mercury-0.11.0-mingw\lib\mercury\lib\i686-pc-cygwin\li
bgc.a C:\Progra~1\cygwin\usr\local\mercury-0.11.0-mingw\lib\mercury\lib\asm_fast
.gc\i686-pc-cygwin\libmer_std.a C:\Progra~1\cygwin\usr\local\mercury-0.11.0-ming
w\lib\mercury\lib\asm_fast.gc\i686-pc-cygwin\libmer_rt.a C:\Progra~1\cygwin\usr\
local\mercury-0.11.0-mingw\lib\mercury\lib\i686-pc-cygwin\libgc.a

C:\Program Files\cygwin\home\yt\mercury>a
Hello, World!

C:\Program Files\cygwin\home\yt\mercury>

多分、Cygwin版MinGWならそのままいけるんでしょう。 既にAdaのためにネイティブ版gccを入れていたので、まあDLし直す必要は無いか、とか思ったのが間違いだったようです。

今日の総括。
Cygwinなんて嫌いだー!!

Cygwin版MinGW版gcc

…を、インストールしました。 別にXのライブラリやWin32APIのヘッダーなんて要らないのに、インストーラのはずみで入れる事になってしまって、AirH"でたらたら10M近く落としました。 しかも、Win32ネイティブ版MinGWは既に入ってるというのに…激しく無駄な気分です。

結果、mmakeがばっちり動くようになりました。 でも出てきたhello_world.exeは2.6M…どうすればスマートリンクを指示できるのでしょうね?