ユーザ用ツール

サイト用ツール


tutorial:nim:modules

文書の過去の版を表示しています。


モジュール

このチュートリアルでは数行程度の僅かなコードのプログラムしか作ってきませんでした。現実的なプログラムではもっと多くのコードが必要になります。多くの場合は一つのファイルに全てのコードを詰め込むよりも、そのコードの特性によって複数のファイルに分割したほうが管理しやすくなります。それぞれのファイルは独立したコンパイル単位、つまり、別々にコンパイルされます。そして、通常は、一つのファイルが一つのモジュールになります。

インポート

モジュールはインポートして使用します。

例えば、myAppというプログラムがあったとして、次のような構成になっていたとします。

myApp/
├── main.nim
├── moduleA.nim
├── moduleB.nim
└── other/
    ├── moduleA.nim
    └── moduleB.nim

そして、main.nimはmoduleAとmoduleBを使用し、moduleAはotherのmoduleAを、moduleBはotherのmoduleBを使用していたとします。このような依存関係があるとき、各ファイルでimport文を使用して、それぞれ必要とするモジュールをインポートします。

<codeprism lang=nim> # main.nim import moduleA import moduleB …

# moduleA.nim import other/moduleA …

# moduleB.nim import other/moduleA

# other/moduleA.nim …

# other/moduleB.nim … </codeprism>

このプログラムをビルドするには、トップレベルのソースファイルであるmain.nimだけをコンパイルに渡します。依存するモジュールの解決とソースファイルのコンパイルは自動的に行われます。

$ cd /path/to/myApp
$ nim compile --out:myApp main.nim 
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/nim.cfg' [Conf]
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/config.nims' [Conf]
........................................................................
Hint:  [Link]
Hint: mm: orc; threads: on; opt: none (DEBUG BUILD, `-d:release` generates faster code)
27620 lines; 0.120s; 30.332MiB peakmem; proj: /home/freemikan/code/NimTutorial/myApp/main.nim; out: /home/freemikan/code/NimTutorial/myApp/myApp [SuccessX]

メッセージに含まれる“out: /home/freemikan/code/NimTutorial/myApp/myApp [SuccessX]”の部分から、正常にmain.rsがコンパイルされて、myAppが生成されたことが確認できます。1)

エクスポート

1)
コンパイラは中身が空のモジュールに対して警告が出力しますが、今は重要ではありません。
tutorial/nim/modules.1710166257.txt.gz · 最終更新: 2024/03/11 23:10 by freemikan

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki