# 経済性、表現力、優美

## Nim は静的型付けを採用したコンパイラ方式のシステムプログラミング言語です。 Python, Ada や Modula など洗練された言語で定評のある思想を取り入れています。

### 経済性

- Nim は依存性のないネイティブ動作の実行可能ファイルを生成します。 生成ファイルは仮想マシンへの依存性がなく、小型軽量であるため簡単に配布できます
- Nim コンパイラと生成された実行可能ファイルは Windows, Linux, BSD および macOS など主要なプラットホームにすべて対応しています。
- リアルタイムシステムに対応した高速遅延参照カウント方式によるメモリ管理。
- オーバーヘッドのないイテレーターとユーザ定義関数のコンパイル時の評価、 値ベースのデータ型の優先的スタック割り当てなどモダンな概念を併用することで、 究極の高性能コードを実現します。
- 各種バックエンドへの対応: C, C++ または JavaScript へコンパイルします。 Nim は必要に応じて、さまざまなバックエンドとフロントエンドを使用できます。

### 表現力

- Nim は自己完結型です: コンパイラと標準ライブラリは Nim で実装してあります。
- Nim には抽象構文木 (AST) を直接操作できる無限の可能性を秘めた強力なマクロシステムがあります。

### 優美

- 必要性がないため Nim のシンタックスはマクロによる変更はできません — シンタックスは十分柔軟です。
- 局所型推論、タプル、ジェネリックと総和型によるモダンな型システム。
- ステートメントはインデントでまとめますが、複数行をまたがることもできます。

インストール Nim を学ぶ

    import strformat

    type
      Person = object
        name: string
        age: Natural # 正数として age を確保します。

    let people = [
      Person(name: "John", age: 45),
      Person(name: "Kate", age: 30)
    ]

    for person in people:
      # コンパイル時に評価される、
      # 型安全の文字列補完
      echo(fmt"{person.name} is {person.age} years old")

    # Nim の 'iterator' と 'yield' コンストラクトにより、
    # イテレータは普通の関数と同じように簡単に記述できます。
    # コンパイル時はインラインループとして展開します。
    iterator oddNumbers[Idx, T](a: array[Idx, T]): T =
      for x in a:
        if x mod 2 == 1:
          yield x

    for odd in oddNumbers([3, 6, 9, 12, 15, 18]):
      echo odd

    # データ処理を中心とする難解な
    # x86 インストラクションの記述において、
    # アセンブラと JIT で使う参照テーブルの変換で
    # Nim のマクロシステムを使用します。
    import macros, strutils

    macro toLookupTable(data: static[string]): untyped =
      result = newTree(nnkBracket)
      for w in data.split(';'):
        result.add newLit(w)

    const
      data = "mov;btc;cli;xor"
      opcodes = toLookupTable(data)

    for o in opcodes:
      echo o

続きは RosettaCode で…

# 新着情報

2019年11月26日

## Version 1.0.4 released

The Nim team is happy to announce version 1.0.4, our second patch release following Nim 1.0.0.

2019年10月23日

## Version 1.0.2 released

The Nim team is happy to announce version 1.0.2, our first patch release following Nim 1.0.0.

過去の新着情報

# 注目のプロジェクト

## Karax

SPA フレームワーク

Karax は Nim でシングルページ・アプリケーションを開発するためのフレームワークです。 ボイラープレートのいらないアプリケーション開発ができるフレームワークであり Nim のマクロ生成システムを活用して作りました。

## Nimbus

Ethereum クライアント

Nimbus は Ethereum 2.0 のブロックチェーン用に開発されたシャーディング・クライアントです。 Ethereum は組み込み機器で今後使われる可能性があるため、 IoT と個人向けモバイル機器で動作するように設計してあります。

プロジェクトを探す

# モダンな Nim を学びましょう

### コマンドラインアプリケーション、ゲーム、ウェブサーバー、 カーネルなどありとあらゆるものが作れます。 Nim は習得しやすく、主流プログラミング言語にはない強力な機能があります。

はじめる

# Nim in Action

### Nim 史上初となる公式解説書「Nim(ニム) in(イン) Action(アクション)」は好評発売中です (英語版のみ)。 電子書籍版、または製本版 (ソフトカバー) を購入できます。 Nim のシンタックスなどの基礎とマクロなどの高度な機能を学び、 豊富なアプリケーション開発の例題で言語の実務経験を会得しましょう。

- Nim のシンタックスなどの基礎を解説してあります。
- Nimble パッケージマネージャーの使用方法を解説してあります。
- チャットプログラム、 Twitter クローンなど多岐にわたるアプリケーション開発方法について手順を追って詳しく解説してあります。

くわしく

# Nim のサポート

## Nim のサポートには 100 以上の企業と個人が参加しています。

### Nim プロジェクトは世界中の篤(とく)志(し)家(か)らにより開発が続けられています。 もっと精力的に Nim の活動に励(はげ)めるよう、 寄付の定期継続を歓迎します。

寄付する

# トップスポンサー

+$19000/month

Status

+$250/month

Xored Software, Inc.

確認する

# コミュニティ

## チャット

#FreeNode#nim

Gitter/Nim

Discord/Nim

m#nim:matrix.org

#IRC ログ

Telegram/nim_lang

## フォーラム

forum.nim-lang.org

r/nim

StackOverflow

## 不具合の報告

nim-lang/Nim

## Twitter

@nim_lang

コミュニティへ参加する

# GitHub リポジトリをお探しですか？

### Nim のコンパイラとツールはすべて Nim で記述されており、利用条件は MIT ライセンスです。 なお、 開発作業は GitHub で行っています。 Nim の開発に関する更新情報を受け取るには、リポジトリの参照、 またはスターによる評価をお願いします。

ソースコード