Hatena::Groupocaml-nagoya

Happy OCaml!!

2009-09-27

_xを使えば、unused variable警告を抑制できるよ

| はてなブックマーク - _xを使えば、unused variable警告を抑制できるよ - Happy OCaml!!

みなさん、コンパイルするときに"-w A -warn-error A"つけてますか? わりと適切な警告がでて便利ですよ。

例えば、こんなコード書くと警告してくれます。

# let f x = ();;
Warning Z: unused variable x.
val f : 'a -> unit = <fun>

うん、うん、xを使ってないことを教えてくれたんだね、ありがとう。

で、普段はなんの問題もないんだけど、コードを自動生成したときとかは、この警告がうざいこともある。

そんなときは、先頭に_をつければ、警告を抑制できるよ。

# let f _x = ();;
val f : 'a -> unit = <fun>

ワイルドカード・パターン(_)とは違うから、ちゃんと変数を使うこともできる。

# let f _x = _x +1;;
val f : int -> int = <fun>

JeffJeff2012/04/10 00:02Deep thought! Thanks for contbriutnig.

suhixtsuhixt2012/04/11 03:54BSueQK , [url=http://julmwqvgqxbd.com/]julmwqvgqxbd[/url], [link=http://ojovhfygosjw.com/]ojovhfygosjw[/link], http://ebsqzkhxclfi.com/

pyaavdpyaavd2012/04/14 00:411XqumQ , [url=http://vinxudtgwvnq.com/]vinxudtgwvnq[/url], [link=http://prbmlajygpsu.com/]prbmlajygpsu[/link], http://udmahctyaqoo.com/

2009-09-02

SnowLeopardでOCamlは動くよ。しかも64bitで

| はてなブックマーク - SnowLeopardでOCamlは動くよ。しかも64bitで - Happy OCaml!!

生協にジュースを買いに行ったら、なぜかSnowLeopardを買ってしまいました。

とりあえず最新のMacPortsを入れてport install ocamlをしたら、あっさりocamlがインストールできました。

しかも64bitでビルドされていました。

$ ocaml
        Objective Caml version 3.11.1

# Sys.word_size;;
- : int = 64

f:id:mzp:20090902203631p:image

これで、31bitのintに苦しめられることもありません。やったね!

MafrapaMafrapa2012/04/15 00:41I spupsoe that sounds and smells just about right.

jfbmokdjewjfbmokdjew2012/04/16 20:16XHXo3s , [url=http://nnqycehppvhh.com/]nnqycehppvhh[/url], [link=http://gglviieziarp.com/]gglviieziarp[/link], http://gfpfgeltcirt.com/

2009-08-02

Macでxml-lightを使おう

| はてなブックマーク - Macでxml-lightを使おう - Happy OCaml!!

xml-light便利ですよね。厳密なスキーマのチェックとかが要らなくて、とりあえずXMLを扱いたいときとかにぴったり。

でもMacPortsxml-lightをインストールしても、ocamlfindから見えなくて結構不便です。

なんとかしましょう。

何が問題なの?

# xml-lightをインストールした!
$ sudo port install xml-light
....
# でもocamlfindからは見えない><
$ ocamlfind list | grep xml-light

なぜocamlfindから見えないかというと、xml-lightのMakefileがocamlfindに対応していないからです。

ここで解決方法は2つあります。

  1. 自分でxml-lightをビルドする
  2. ボクの作ったPortfileを使う

方法1:自分でxml-lightをビルドする

普通にビルドする。うっかりmake installしちゃわないように注意してください。

$ wget http://tech.motion-twin.com/zip/xml-light-2.2.zip
$ unzip xml-light-2.2.zip
$ cd xml-light
$ make all
$ make opt

適当にMETAファイルを作ってやる。ボクは以下の内容をMETAというファイルに保存して使ってます。

name="xml-light"
version="2.2"
description="minimal XML parser & printer"
requires=""
archive(byte) = "xml-light.cma"
archive(native) = "xml-light.cmxa"

ocamlfindを使ってインストールする。

$ vi META
# 上記の内容を保存する
....

$ ocamlfind install xml-light META xml-light.a xml-light.cma xml-light.cmxa *.cmo *.cmi *.cmx *.cmx"

これでocamlfindから使えるようになりました。

$ ocamlfind list | grep xml-light
xml-light           (version: 2.2)

方法2: ボクの作ったPortfileを使う

上で書いた内容をやってくれるPortfileを作りました。

port installするだけでxml-lightをインストールできます。

$ wget http://howdyworld.org/patches/Portfile
$ sudo port install
$ ocamlfind list | grep xml-light
xml-light           (version: 2.2)
Portfile

念のためPortfileの中身をここにも貼っておきますね。META.zipは、上記のMETAファイルをzipで圧縮しただけのファイルです。

続きを読む

propellapropella2009/08/08 08:32書いてある通りにしたら上手く行きました。ありがとうございます!

2009-07-05

imenu.elで、関数定義にジャンプ

| はてなブックマーク - imenu.elで、関数定義にジャンプ - Happy OCaml!!

f:id:mzp:20090705192713p:image

imenu.elを使うと、バッファ内の関数定義一覧を出して、そこにジャンプすることができるよ。TAGSと違って、ファイルの更新が不要だから、お手軽だよ。

インストール方法

imenu.el の使い方と応用 — ありえるえりあ を参考に、imenu.elとanything.elを設定する。

tuareg-imenu.elからtuareg-imenu.elをダウンロードして、load-pathの通ってるディレクトリに置く。

.emacsに設定を追加する。

(autoload 'tuareg-imenu-set-imenu "tuareg-imenu" "Configuration of imenu for tuareg" t)
(add-hook 'tuareg-mode-hook
	  (lambda ()
	    (tuareg-imenu-set-imenu))

omakeをインストールしよう

| はてなブックマーク - omakeをインストールしよう - Happy OCaml!!

MacPortsomakeをインストールしようとすると、 omakeがインストールできない - そんな話はいつでもできるって怒られてしまいます。

OCaml3.11でomakeをビルドすると、発生するらしいです。

そんなときは慌てず騒がず、/opt/local/src/exec/omake_exec.mlからsyncをコメントアウトしましょう。

(* external sync : unit -> unit = "caml_sync" *)

パッチが、もうでてるんで、そのうち直るでしょう。

LenLen2012/04/15 03:12Articles like this just make me want to visit your wesbite even more.

xkfedqyptxkfedqypt2012/04/15 13:00Q7HOHE <a href="http://bnqleelrubpe.com/">bnqleelrubpe</a>

2009-03-11

ocamloptでユニバーサルバイナリが作りたい

| はてなブックマーク - ocamloptでユニバーサルバイナリが作りたい - Happy OCaml!!

何が問題なの?

ocamloptで実行ファイルを作っても、単一のアーキテクチャでしか動かない><。

$ ocamlopt hello.ml -o hello
$ file hello
hello-i386: Mach-O executable i386

"-ccopt"で-archを複数指定してやればいいと思いきや、それでもうまく動かない><。

$ ocamlopt -ccopt "-arch i386 -arch ppc" hello.ml
ld warning: in /var/folders/ER/ERpTAvKHGAeST-apMbQus++++TI/-Tmp-/camlstartup73a88f.o, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/std_exit.o, file is not of required architecture
ld warning: in hello.o, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/stdlib.a, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/libasmrun.a, file is not of required architecture
Undefined symbols for architecture ppc:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found for architecture ppc
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/ER/ERpTAvKHGAeST-apMbQus++++TI/-Tmp-//ccwCVSY5.out (No such file or directory)
File "caml_startup", line 1, characters 0-1:
Error: Error during linking

で、どうすればいいの?

  1. Re: [Caml-list] Re: Building a universal binary on OS X?を参考にして、PPC用ocamloptとi386用ocamloptを作ってやる
  2. PPC用とi386用のバイナリをコンパイルする
  3. lipoで結合する

手順

PPC用のOCamlをビルドする。

$ ./configure -cc "gcc -mmacosx-version-min=10.4 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk" -prefix /opt/ppc -host powerpc-apple-darwin8.11.0
$ make world
$ make opt
$ sudo make install

いったんcleanする。

$ make clean

i386用のOCamlをインストールする。

$ ./configure -cc "gcc -mmacosx-version-min=10.4 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" -prefix /opt/i386
$ make world
$ make opt
$ sudo make install

じゃあ、コンパイルしてみよう。

$ /opt/ppc/bin/ocamlopt -o hello-ppc hello.ml
$ /opt/i386/bin/ocamlopt -o hello-i386 hello.ml
$ lipo -create -output hello -arch ppc hello-ppc -arch i386 hello-i386
$ file hello
hello: Mach-O universal binary with 2 architectures
hello (for architecture ppc):   Mach-O executable ppc
hello (for architecture i386):  Mach-O executable i386

やった! できた!!

ついでだから、ocamlopt-pccみたいなシンボリックリンクを作っておくと便利だよ!

謝辞

@banjunにいろいろ教えてもらいました。ありがとう!

PradeepPradeep2012/07/08 21:08Weeeee, what a quick and easy slotouin.

lollugklollugk2012/07/10 02:21AJTAt6 , [url=http://otgfehdhfbzi.com/]otgfehdhfbzi[/url], [link=http://njpgyhjylsno.com/]njpgyhjylsno[/link], http://mhptlaemahff.com/

rezmbzyrezmbzy2012/07/11 02:01Ew6S95 <a href="http://czvhptympwka.com/">czvhptympwka</a>

ihtejkihtejk2012/07/11 05:391V0aPO , [url=http://chexpyesofal.com/]chexpyesofal[/url], [link=http://rejdptzqbmvw.com/]rejdptzqbmvw[/link], http://holgbxjkkwom.com/

quianbyxppquianbyxpp2014/03/18 17:16krcowpdbnm.obhpzb, <a href="http://www.wiiijrioxz.com/">qfcldeaozd</a> , [url=http://www.wqgllhygxa.com/]cjmurdgrdm[/url], http://www.teflvcdhpj.com/ qfcldeaozd