LoginSignup
3
3

新言語「Mojo🔥」に触れてみた

Posted at

この記事の読者

  • 新しい技術に触れてみたい方
  • Mojoに興味のある方

きっかけ

先日、Qiitaのトレンドを見ていると以下のような記事を発見しましたので、試さずにはいられないと思い、試してみました1

実際に試してみた🔥

インストール

Mojoのホームページに則ってインストールを行いました。
なお、Mojoのインストールにはどうやらユーザー認証が必要だそうで…。
下記リンクを貼っているページからダウンロードを行ってみてください:)

Visual Studio Code の拡張機能をインストール

下記のリンクよりダウンロードいただくか、「Mojo」で検索してみてください!

実行🔥!

拡張子は.mojoもしくは.🔥だそうです。拡張子に絵文字があるのはなんだか新鮮ですね。ちなみに、実行する内容はmain()内に記述する必要があります。

test01.mojo
fn main():
    print("Hello World!")
実行結果
Hello World!

ちなみに、Pythonのコードも実行できるそうです!

ということで、試してみたら本当に実行できました!

test02.mojo
def main():
    from python import Python
    let np = Python.import_module("numpy")
    array = np.array([1, 2, 3])
    print(array)
実行結果
[1 2 3]

ということで、これで実際何ができるかなと思って試しで半径から体積を計算できるプログラム作ってみました!

test03.mojo
def main():
    from python import Python
    let py = Python.import_module("builtins")
    let np = Python.import_module('numpy')
    user_inp = py.input("Enter the rudius of ball: ")
    let radius = py.float(user_inp)
    let volume = radius * radius * 4 * np.pi / 3
    print("Volume is ", volume)

(てかほとんどPythonで書いてもーてるから意味なくね…?)

ビルド

ビルドは、mojo build ファイル名です。とっても簡単ですね!

mojo build test03.mojo

すると、実行ファイルが出来上がりますので、実行してみましょう!

./test03

すると、こんなエラーが、、、

Mojo/Python interoperability error: Unable to locate a suitable libpython, please set `MOJO_PYTHON_LIBRARY`
zsh: segmentation fault  ./test03

エラーが出てるので直そうと思って調べてみると、どうやらMojoがPythonのバージョンをバイナリに埋め込んでないことが原因だそうです:(

ということで、GitHubのIssue通りにこのバグを直していきたいと思います。

バグ修正

1.Pythonライブラリのパスの取得

python3 -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))'
実行結果
/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib

2.共有ライブラリファイルの取得

ls $(python3 -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))') | grep libpython
実行結果
libpython3.11.dylib

ここで、GitHubのIssueには'''.so'''ファイルを検索するように書いてありますが、実際検索して出てきたファイルの拡張子は.dylibです。が、この違いはどうやら問題がないようです。

3.環境変数を設定

ちなみに、

.~/zshrc
export MOJO_PYTHON_LIBRARY="/opt/homebrew/opt/python@3.11/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib"

さあ、もう一回ファイルを実行してみると、

./test03
実行結果
Enter the rudius of ball: 2
Volume is  16.755160819145562

今度はうまくいきましたね!!やった!

感想

  • まだまだ完成までの道のりは遠いけど、確かにDjangoしか触ったことのないレベルの僕でも違いがわかるぐらいなので、完成した時の使い道がかなり広そう!
  • 絵文字の拡張子はやっぱあたらs(ry
  • Pythonを勉強せなあかんなあって思いました。(もっとはよ気づけ)

最後に

InstagramやThreadsで何気ない日常やについて投稿してますので、ぜひフォローの方よろしくお願いします:)

3
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
3
3