Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cmm #286

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Cmm #286

wants to merge 6 commits into from

Conversation

mitsuji
Copy link
Contributor

@mitsuji mitsuji commented Sep 18, 2023

Haskell コンパイラ GHC が使っている 中間言語 Cmm です。
C-- という言語を元にかなり変更されているようです。
C-- 自体は現役の処理系がなかったので、こっちでやってみました。
Cから呼ぶ必要があるのでCのコードも付けています。

これもポータブルなはずですが、もし動かなかったら言ってください。
詳細を確認します。

@mitsuji
Copy link
Contributor Author

mitsuji commented Sep 19, 2023

手元の環境だと、Linux, Windows, Mac は大丈夫でした。

@mitsuji
Copy link
Contributor Author

mitsuji commented Sep 20, 2023

最新 master で rebase しました!

because define a variable with the type name
@taisukef
Copy link
Owner

おもしろい言語がありますね
callの替わりにjumpができて、末尾最適が記述しやすいんですね!

M1 Mac、コンパイル後、動かそうとすると、bus error と出ました

zsh: bus error  ./a.out

@mitsuji
Copy link
Contributor Author

mitsuji commented Sep 22, 2023

ですね。関数型言語用の中間表現なので末尾再帰とか表しやすくしているようです。

自分では確認できてないのですが、下記で別バージョンのghcを試していただきたいです。

$ brew install [email protected]

GHCが数値計算で依存してるGMPがCPUレジスタの使い方でAppleとちょっともめてて、問題あるコードがリリースされちゃってるみたいで、その影響で実行時に失敗するという話がありました。
https://gitlab.haskell.org/ghc/ghc/-/issues/22497#note_472557

GHC 9.6.1, 9.4.5, 9.2.6 でパッチ済みのGMPを使うようになって修正されたようなのですが、brew の ghc はデフォルトが 9.4.4 でそれより新しいものはまだ指定できないみたいです。ただ、9.2.8が使えるようなのでそれで試していただきたく。
https://formulae.brew.sh/formula/ghc

ghc 9.2.6
https://downloads.haskell.org/~ghc/9.2.6/docs/html/users_guide/9.2.6-notes.html#build-system-and-packaging

ghc 9.4.5
https://downloads.haskell.org/~ghc/9.4.5/docs/users_guide/9.4.5-notes.html#build-system-and-packaging

@taisukef
Copy link
Owner

ありがとうございます
残念ながら、9.2 でも同様に bus error でした
8.10 だと、コンパイルできず

また別の環境で試してみます

@mitsuji
Copy link
Contributor Author

mitsuji commented Sep 22, 2023

ありがとうございます。
こちらも M1/M2 Mac 探して試してみます。

@mitsuji
Copy link
Contributor Author

mitsuji commented Sep 27, 2023

Apple Silicon な Mac で試して現象の再現できました。
一旦ミニマムなコードで試して Hello, World! はいけました。
ただ下記の課題があり、解決に少し時間かかりそうです。

  • C の printf が正しく動作しない。(%lf とか %d で表示する数値がまったく違う)
  • 別ソースファイルの関数を呼ぶと bus error になる。

何か根本的なところが違ってそうなので、基本的なところからさらっていこうと思います。
少し時間いただきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants