8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

多勢は勢ひをたのみ、少数は一つの心に動く

Advent Calendar 2022 6日目1です。
私のAdvent Calendar 2022 一覧

はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:
Zigを楽しんでいますか:bangbang::bangbang::bangbang:

ElixirからZigを使ってみます。
ZiglerというHexを利用することで簡単に使えます。

Zigの事始めは下記の記事をご参照ください。

$\huge{All\ your\ codebase\ are\ belong\ to\ us.}$

前提

ElixirZigをインストールしておいてください。

Zigのインストールは下記をご参照ください。

macOS Catalinaでは動きました。

  • Elixirは、1.13.1-otp-24
  • Erlangは、24.2

macOS Montereyでは動かせていません :sob::sob::sob:

2台のmacのうち、1台のmacでは動きませんでしたというのが事実です。
何が原因なのかは、はっきりとはわかっていません。
macOS Montereyでは現状、動かないと言っているわけではなく、私の環境の方に問題があるような気がしています。
動かなかったmacのOSが、macOS Montereyでしたというだけの話です。
OSの違いのせいなのか、なにか環境構築に差異があるのか。
分かり次第、追って更新します。

== Compilation error in file lib/example_zig2.ex ==
** (CompileError)  this zig compiler warning hasn't been incorporated into the parser.
Please file a report at:
https://github.com/ityonemo/zigler/issues 
warning(link): unexpected LD stderr: ld: dynamic main executables must link with libSystem.dylib for architecture x86_64

error(link): ld: dynamic main executables must link with libSystem.dylib for architecture x86_64

error: LDReportedFailure
Elixir.ExampleZig2...The following command exited with error code 1:
/Users/yamauchi/Documents/13_Elixir/hello_zigler/deps/zigler/zig/zig-macos-x86_64-0.8.1/zig build-lib /var/folders/q6/5rpg5x9n6rx6357m9vztp_w00000gp/T/.zigler_compiler/dev/Elixir.ExampleZig2/Elixir.ExampleZig2.zig -lc --cache-dir /private/var/folders/q6/5rpg5x9n6rx6357m9vztp_w00000gp/T/.zigler_compiler/dev/Elixir.ExampleZig2/zig-cache --global-cache-dir /Users/yamauchi/.cache/zig --name Elixir.ExampleZig2 --version 0.1 -dynamic -target x86_64-macos-gnu -isystem /Users/yamauchi/.asdf/installs/erlang/24.2/erts-12.2/include --enable-cache 
error: the following build command failed with exit code 1: 
/private/var/folders/q6/5rpg5x9n6rx6357m9vztp_w00000gp/T/.zigler_compiler/dev/Elixir.ExampleZig2/zig-cache/o/8c3e0f616e375fbbe7a75842e9d66c5a/build /Users/yamauchi/Documents/13_Elixir/hello_zigler/deps/zigler/zig/zig-macos-x86_64-0.8.1/zig /private/var/folders/q6/5rpg5x9n6rx6357m9vztp_w00000gp/T/.zigler_compiler/dev/Elixir.ExampleZig2 /private/var/folders/q6/5rpg5x9n6rx6357m9vztp_w00000gp/T/.zigler_compiler/dev/Elixir.ExampleZig2/zig-cache /Users/yamauchi/.cache/zig

    (zigler 0.8.1) lib/zig/parser/error.ex:54: Zig.Parser.Error.parse/2
    (zigler 0.8.1) lib/zig/command.ex:30: Zig.Command.compile/2
    (zigler 0.8.1) lib/zig/compiler.ex:99: Zig.Compiler.compilation/2
    (zigler 0.8.1) expanding macro: Zig.Compiler.__before_compile__/1
    lib/example_zig2.ex:1: ExampleZig2 (module)

役に立つかどうかは不明ですが、同じログのIssueをみつけたのでコメントを追記しておきました。

サンプル

$ mix new hello_zigler

Ziglerを使えるようにします。

mix.exs
  defp deps do
    [
      {:zigler, "~> 0.8.1", runtime: false}
    ]
  end
$ mix deps.get

Zigで書いたプログラムをElixirで使えるようにします。

lib/example_zig.ex
defmodule ExampleZig do
  use Zig
  ~Z"""
  /// nif: example_fun/2
  fn example_fun(value1: f64, value2: f64) bool {
    return value1 > value2;
  }
  """
end

たったこれだけです :tada:

Run

$ iex -S mix
iex> ExampleZig.example_fun(0.8, -0.8)
true

iex> ExampleZig.example_fun(0.1, 0.4)
false

Wrapping up :lgtm::lgtm::lgtm::lgtm:

この記事ではZigで作った大小比較をする関数をElixirから呼び出しているだけです。

千里の道も一歩から。
Zig力の向上とともにあんなことやこんなことを楽しめる気がしています。

Enjoy Elixir:bangbang::bangbang::bangbang:

2022年に流行る技術予想 ーー それは、Zigです:rocket::rocket::rocket:

  1. @kaizen_nagoya さんの「「@e99h2121 アドベントカレンダーではありますまいか Advent Calendar 2020」の改訂版ではありますまいか Advent Calendar 2022 1日目 Most Breakthrough Generator」から着想を得て、模倣いたしました。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?