hisso.li
  • Login
Show Navigation
  • Public

    • Groups

Conversation

Notices

  1. まちカドおるみん御嬢様 (orumin@mstdn.maud.io)'s status on Friday, 30-Apr-2021 11:31:04 JST まちカドおるみん御嬢様 まちカドおるみん御嬢様

    ネイティブコンパイルEmacsの登場 | 日々、とんは語る。 https://blog.tomoya.dev/posts/hello-native-comp-emacs/

    In conversation Friday, 30-Apr-2021 11:31:04 JST from mstdn.maud.io permalink

    Attachments

    1. ネイティブコンパイルEmacsの登場
      日本時間の2021年4月26日午前3時6分、Emacsのmasterブランチにfeature/native-compブランチがマージされました(コミット:Merge branch ‘feature/native-comp’ into into trunk)。これにより、HEADのEmacsをビルドすると、Native compilation機能を兼ね備えたネイティブコンパイルEmacs、通称Gcc Emacsが使えるようになりました。 ネイティブコンパイルEmacsの機能 # ネイティブコンパイルEmacs(以下、Gcc Emacsと呼びます)は、Andrea Corallo、Luca Nassi、Nicola Mancaの3名によるBringing GNU Emacs to Native Code という論文で詳細が説明されています。 簡単に説明すると、これまでのEmacsは、Elispの読み込みを早くするため*.elファイルをバイトコンパイルして*.elcというバイトコードファイルを作成して読み込んでいましたが、Gcc Emacsでは*.elファイルをGCCを使ってコンパイル(これの工程をバイトコンパイルに対してネイティブコンパイルと呼んでいます)して*.elnというバイナリファイルを作成して読み込むことで、バイトコードと比べて2.3倍から42倍ほど高速化させたという話です。 ネイティブコンパイルされたElispファイルをEmacsで開いてみると、上図のようにバイナリファイルになっていることがわかります。 Emacsが早くなるという話であれば、飛び付かないわけにはいきません。そこで、早速試しにビルドしてみました。 macOSにおけるGcc Emacsのビルド # それでは、macOSでGcc Emacsをビルドしてみたいと思います。まずは、必要なライブラリをインストールしてビルド環境を整えましょう。 Windows on WSLの人はEmacsに来たnative compileを試す - ぐるっとぐりっどの記事を参考にしてみてください。 GCCでlibgccjitを使用する # Gcc EmacsはGCCとEmacsとのインターフェイスにlibgccjitを利用しています。そのため、Gcc Emacsをビルドするにはlibgccjitのインストールが必要です。僕はHomebrewでインストールしました。 $ brew install libgccjit libgccjitをインストールしたら、libgccjitを利用したコードをビルドできるか確認してみましょう。 Tutorial part 1: “Hello world”に書かれている通りにコードをビルドしてみます。 $ touch tut01-hello-world.c $ pbpaste > tut01-hello-world.c # ブラウザでコピーして、pbpasteでファイルに書き込む $ gcc tut01-hello-world.c -o tut01-hello-world -lgccjit ld: library not found for -lgccjit clang: error: linker command failed with exit code 1 (use -v to see invocation) 僕の環境では、libgccjitのライブラリが見つけられず、上記のエラーが表示されてしまいました。
    • Help
    • About
    • FAQ
    • Privacy
    • Source
    • Version
    • Contact

    hisso.li is a social network. It runs on GNU social, version 2.0.0-alpha0, available under the GNU Affero General Public License.

    Creative Commons Attribution 3.0 All hisso.li content and data are available under the Creative Commons Attribution 3.0 license.

    Switch to desktop site layout.