■
オードリーたんは、一ヶ月でHaskellマスターして一ヶ月でPugs書いたとか聞いたので、どんだけ仕事速いねんと思ったら、Pugs-6.0.0はすっごいシンプルだった。
http://search.cpan.org/src/AUTRIJUS/Perl6-Pugs-6.0.0/
これなら一ヶ月というのも理解できる。
______ /\ __ \ \ \ \/\ \ __ __ ______ ______ (P)erl6 \ \ __//\ \/\ \/\ __ \/\ ___\ (U)ser's \ \ \/ \ \ \_\ \ \ \/\ \ \___ \ (G)olfing \ \__\ \ \____/\ \____ \/\_____\ (S)ystem \/__/ \/___/ \/___/\ \/____/ /\____/ Version: 6.2.13 \/___/ Copyright 2005-2006, The Pugs Contributors -------------------------------------------------------------------- Web: http://pugscode.org/ Email: perl6-compiler@perl.org Welcome to Pugs -- Perl6 User's Golfing System Type :h for help.
Golfing Systemて。PerlはPolymorphic Existential Recursive Lambdasらしい
本題。WindowsでのPugsビルドリベンジ。正直こういう作業はちっとも楽しくないよな〜ほえー。適当に調べてると、cygwinでビルドできなくもないらしいけど、色々めんどくさそうなので、まあやめといた方がよさげ。
http://wiki.kn.vutbr.cz/mj/index.cgi?Pugs%20on%20MS%20Windows
を見ると、ActivePerlとnmake(とGHC)があればいけると書いてあったので、試したらあっさりできた。GHCのバージョンは6.6。Pugsのバージョンは6.2.13。一応インストールまでしておいた方がいいっぽい。Perlのライブラリの関係で
で、
C:\ghc\Perl6-Pugs-6.2.13>cp third-party\fps\Setup.hs third-party\filepath C:\ghc\Perl6-Pugs-6.2.13>cd third-party\filepath C:\ghc\Perl6-Pugs-6.2.13\third-party\filepath>runhaskell Setup.hs configure C:\ghc\Perl6-Pugs-6.2.13\third-party\filepath>runhaskell Setup.hs build C:\ghc\Perl6-Pugs-6.2.13\third-party\filepath>runhaskell Setup.hs install C:\ghc\Perl6-Pugs-6.2.13\third-party\filepath>cd ..\fps C:\ghc\Perl6-Pugs-6.2.13\third-party\fps>runhaskell Setup.hs configure C:\ghc\Perl6-Pugs-6.2.13\third-party\fps>runhaskell Setup.hs build C:\ghc\Perl6-Pugs-6.2.13\third-party\fps>runhaskell Setup.hs install C:\ghc\Perl6-Pugs-6.2.13\third-party\fps>cd ..\HsSyck C:\ghc\Perl6-Pugs-6.2.13\third-party\HsSyck>runhaskell Setup.hs configure C:\ghc\Perl6-Pugs-6.2.13\third-party\HsSyck>runhaskell Setup.hs build C:\ghc\Perl6-Pugs-6.2.13\third-party\HsSyck>runhaskell Setup.hs install C:\ghc\Perl6-Pugs-6.2.13\third-party\HsSyck>cd ..\.. C:\ghc\Perl6-Pugs-6.2.13>runhaskell Setup.lhs configure C:\ghc\Perl6-Pugs-6.2.13>runhaskell Setup.lhs build C:\ghc\Perl6-Pugs-6.2.13>runhaskell Setup.lhs install C:\ghc\Perl6-Pugs-6.2.13>ghc-pkg list C:/ghc/ghc-6.6\package.conf: Cabal-1.1.6, GLUT-2.0, HUnit-1.1, OpenGL-2.1, Pugs-6.2.13, QuickCheck-1.0, Win32-2.0, base-2.0, cgi-2006.9.6, fgl-5.2, (ghc-6.6), haskell-src-1.0, haskell98-1.0, html-1.0, mtl-1.0, network-2.0, objectio-1.0, parsec-2.0, pugs-HsSyck-0.2, pugs-filepath-0.1, pugs-fps-0.7, readline-1.0, regex-base-0.71, regex-compat-0.71, regex-posix-0.71, rts-1.0, stm-2.0, template-haskell-2.0, time-1.0, xhtml-2006.9.13
buildはいらん気もするけど、まあ一応。Pugs-6.2.13, pugs-HsSyck-0.2, pugs-filepath-0.1, pugs-fps-0.7が追加されてればOK
んで、
import Pugs main = eval "2+3;"
とかをコンパイルしようとすると、C:\ghc\ghc-6.4.1\include\HsBase.hの__hscore_d_nameがどーたらというエラーが出る。
http://folksonomy.sakura.ne.jp/perl/pugs_build.html
によると、これは使われてない関数なのでコメントアウトしていいらしい。あと、libperl58.aがないので、同じリンク先に書いてあるようにExtUtils::FakeConfigをダウンロードして展開してインストール(libperl58.aはghc6.6/gcc-libとかにいれとくといいかもしれない)。んで、あとは適当にpackageとライブラリ指定してコンパイルすればOKっぽい。んだけど、普通にlibperl58.a指定するとなんでかリンクがうまくいかない。何かすごいアホなことな気がするんだけど、なんだろうな〜
注意
・コンパイルが非常に時間かかる。
・cygwin-bash上ではうまく実行できない
・GHCiでインタラクティブに開発できない
1つ目と3つ目はものっそいやる気なくなる。
できれば、GHCi上で、":set -package Pugs"で使えるようにしたいんだけど、うまくいかない。ぬー、なんとかやりようはあるんじゃないかと思ったりするんだけど。 unknown symbol `__imp__Perl_win32_init`。しらべんのめんどくせ。Ubuntuの方も
>ghci -lperl DynaLoader.o Loading package base-1.0 ... linking ... done. Loading object (static) DynaLoader.o ... done Loading object (dynamic) perl ... done final link ... ghc-6.4.2: DynaLoader.o: unknown symbol `_GLOBAL_OFFSET_TABLE_' ghc-6.4.2: linking extra libraries/objects failed
Parrotとは。Parrotとか聞いたことすらなかった
http://www.namikilab.tuat.ac.jp/~sasada/prog/parrot-intro.html
第一に、とにもかくにも、Parrot って何? なんでみんなこれについて大騒ぎしてんの? えーと。もしあなたが箱の中で暮らしてでもいなければ、Perl コミュニティが新しい Perl のデザインと、その実装をしているのを知ってるよね。新バージョンのPerl、言語と実行処理系の両方。
すいません、箱の中で暮らしていたようです。まあ、Perl6のVMになるらしい。ふーん、どうでもいいや。なんかcompileがどうとかあるのは、要するにParrotのコード吐くのか。中間言語のJakoがいいな
で、Pugsのソースを眺めた。重要なのは、Exp,Val,Evalモナド(多分)。Expの定義はなんか2箇所にあるけど、Pugs.AST.Internalsにある方が本物っぽい
-- | Represents an expression tree. data Exp = Noop -- ^ No-op | App !Exp !(Maybe Exp) ![Exp] -- ^ Function application -- e.g. myfun($invocant: $arg) | Syn !String ![Exp] -- ^ Syntactic construct that cannot -- be represented by 'App'. | Ann !Ann !Exp -- ^ Annotation (see @Ann@) | Pad !Scope !Pad !Exp -- ^ Lexical pad | Sym !Scope !Var !Exp -- ^ Symbol declaration | Stmts !Exp !Exp -- ^ Multiple statements | Prim !([Val] -> Eval Val) -- ^ Primitive | Val !Val -- ^ Value | Var !Var -- ^ Variable | NonTerm !Pos -- ^ Parse error deriving (Show, Eq, Ord, Typeable) {-!derive: YAML_Pos!-}