Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SWEST22「Nimです、こんばんは」

 SWEST22「Nimです、こんばんは」

Mutsuha Asada

September 02, 2022
Tweet

More Decks by Mutsuha Asada

Other Decks in Technology

Transcript

  1. 21  Nimで出来ること  ・生ポインタ操作が可能でスタンドアロンなバイナリを生成できるのでOSを開発できる 4. OS開発  ・NimでOS開発したいねという話 by sksatさん(2017)   ・main関数をブートローダーから呼び出してQEMUで動作させた  ・Nimによるmikanosの移植

    by Double-oxygeNさん (2021)   ・Nimによるmikanosの移植 by momeemt(2021)    ・@uchan_nos さんが開発した教育用OS mikanosを      FFIで呼び出して叩いてインクリメンタルに置き換え ▲ 動作したがNim onlyではない  ・Nimで開発された実験的なカーネル(2013-)   ・https://github.com/dom96/nimkernel
  2. 23  Nimで出来ること  ・スタンドアロンなバイナリが生成できるので理屈ではNimでも組込みプログラミングができる   ・C/C++とのFFIが洗練されており導入は他言語に比べればしやすい 5. 組込み開発  ・ArduinoにNimを導入する実験は何人かの先人により行われている   ・Nim言語:AVR:Arduino Uno/Nano用にコンパイルしたときのメモ 2019/01

       ・http://mpu.seesaa.net/article/463862262.html   ・Nim on Arduino    ・https://disconnected.systems/blog/nim-on-adruino/ ◀︎ @EmbeddedNim    ・Raspberry PiのNimラッパーやドライバなど組込み関連のライブラリを多く管理している  ・https://github.com/EmbeddedNim
  3. 24  Nimで出来ること  ・スタンドアロンなバイナリが生成できるので理屈ではNimでも組込みプログラミングができる   ・C/C++とのFFIが洗練されており導入は他言語に比べればしやすい 5. 組込み開発  ・ArduinoにNimを導入する実験は何人かの先人により行われている   ・Nim言語:AVR:Arduino Uno/Nano用にコンパイルしたときのメモ 2019/01

       ・http://mpu.seesaa.net/article/463862262.html   ・Nim on Arduino    ・https://disconnected.systems/blog/nim-on-adruino/  ・C99が出力される + Rustほど高い学習コストを要しないので良いと考える意見もある ◀︎ @EmbeddedNim    ・Raspberry PiのNimラッパーやドライバなど組込み関連のライブラリを多く管理している  ・https://github.com/EmbeddedNim
  4. 31  基本文法 Nimを書けるようになりましょう! seq[T]型とは 動的配列型: 実行時に配列サイズを変更可能 要素が増えるたびにポインタを確保している Tは 型引数 で任意の型を入れることができる

    seq[T]型は ジェネリクス と呼ばれる抽象型 array[I; T]型とは 静的配列型: コンパイル時に配列サイズが確定 Tは 型引数 で任意の型を入れることができる Iも 型引数 で整数のコンパイル時定数が入る
  5. 46  Nimの型 整数型 / 浮動小数点数型 int8型 int16型 int32型 int64型 int型

    符号付き整数 符号なし整数 uint8型 uint16型 uint32型 uint64型 uint型 float32型 float型 float64型 浮動小数点数
  6. 47  Nimの型 真偽値 (bool型) >, >= ==, != <, <=

    関係演算子 論理演算子 or xor not and
  7. 66  ARC / ORC ARC: Nimにおける決定論的な参照カウンタ 3行目でsomeNumbersがreallocされるので、otherがダングリングポインタにならないようにする Nimは通常、ディープコピーすることでダングリングポインタを回避  → 右辺値をmoveすることで

    someNumbers からの参照を無効にする  → これはC+11における move semantics と同等 Rustは所有権によりsomeNumbersを無効にしてアクセスするとコンパイルエラーを発生させる  → Nimは参照のみ無効にすることを選んだ。3行目のアクセスは有効で someNumbers == @[3] となる
  8. 69  ARC / ORC ARC: Nimにおける決定論的な参照カウンタ Nimは明示的なmoveを嫌ったので、ARCは次のような状況で暗黙にmoveする  ・fn() の結果を参照するのは value

    のみなので、value に直接 move される  ・value1がfn2プロシージャの呼び出し以外に使われていないとき、   fn1() を fn2 に move して fn2 の戻り値を value2 に move することができる
  9. 98  項書き換えマクロ コンパイル時最適化を目的にパターンマッチに基づいて抽象構文木を置換する機能 最適化を定義してコンパイルパイプラインを拡張するインターフェース 引数制約式におけるパターンマッチ演算子  ・ `|`演算子 ... 順序付きの選択肢の作成  ・`{}`演算子

    ... 式を引数にバインドする  ・`~`演算子 ... パターンの否定  ・`*`演算子 ... 式を平坦化する  ・`**`演算子 ... 式を逆ポーランド記法の順序で収集する ▲ 単位行列との行列積は計算を省略する最適化
  10.  参考文献 ・Nim Manual  ・https://nim-lang.org/docs/manual.html ・Nim Experimental Features  ・https://nim-lang.org/docs/manual_experimental.html ・Nim Compiler

    User Guide  ・https://nim-lang.org/docs/nimc.html ・std/macros  ・https://nim-lang.org/docs/macros.html ・Introduction to ARC/ORC in Nim  ・https://nim-lang.org/blog/2020/10/15/introduction-to-arc-orc-in-nim.html ・Move semantics for Nim  ・https://youtu.be/yA32Wxl59wo 109