Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nim LT
Search
medy
July 01, 2021
Technology
0
110
Nim LT
Nimって何?っていう紹介
medy
July 01, 2021
Tweet
Share
More Decks by medy
See All by medy
Nimで静的ファイルサーバーを作る
dumblepy
0
240
stapy79_Pythonistaに伝えたいNimの魅力
dumblepy
0
450
Masonote hands On in Tokyo Japan
dumblepy
0
140
Other Decks in Technology
See All in Technology
Perlアプリケーションで トレースを実装するまでの 工夫と苦労話
masayoshi
1
320
AI コードレビューが面倒すぎるのでテスト駆動開発で解決しようとして読んだら、根本的に俺の勘違いだった
mutsumix
0
140
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
410
Microsoft Clarityでインサイトを見つけよう
nakasho
0
110
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
2.3k
隙間時間で爆速開発! Claude Code × Vibe Coding で作るマニュアル自動生成サービス
akitomonam
2
240
株式会社島津製作所_研究開発(集団協業と知的生産)の現場を支える、OSS知識基盤システムの導入
akahane92
1
1.3k
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
140
メモ整理が苦手な者による頑張らないObsidian活用術
optim
1
170
robocopy の怖い話/scary-story-about-robocopy
emiki
0
430
猫でもわかるQ_CLI(CDK開発編)+ちょっとだけKiro
kentapapa
0
180
2025新卒研修・HTML/CSS #弁護士ドットコム
bengo4com
3
4.5k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
BBQ
matthewcrist
89
9.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Music & Morning Musume
bryan
46
6.7k
Site-Speed That Sticks
csswizardry
10
730
Bash Introduction
62gerente
613
210k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
For a Future-Friendly Web
brad_frost
179
9.8k
GitHub's CSS Performance
jonrohan
1031
460k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Making Projects Easy
brettharned
117
6.3k
Transcript
Nimについて 発表者: medy (@dumblepytech1)
Nimって何よ? 2008年から開発が始まった新しいプログラミング言語 GoやRustが競合です
Nimの何が良いの? アジェンダ 1. 速い 2. 軽い 3. 書きやすく読みやすい 4. 整った環境
5. どこでも動く 6. C言語と連携が簡単 7. 何でもできる 8. 私がNimで作ったライブラリ
速い
Nimはコンパイルすると最適化されたC言語を出力し、C言語をgccや clangを使ってバイナリにコンパイルします。 Nim→C言語→実行可能バイナリ Nimの実行速度≒C言語の実行速度
軽い
C言語を「最適化」してコンパイルするので、バイナリを非常に小さくでき ます。
動的型付き言語であるPHP、 JavaScript、Python、Rubyより速く、C 言語、Go、Rustと遜色ないパフォーマン スなことがわかります。 メモリ消費もGoよりも少ないことがわか ります。 https://github.com/frol/completely- unscientific-benchmarks
Webフレームワークで比較 NimのJesterというフレームワークは圧倒的爆速です
書きやすく読みやすい
フィボナッチ数列の例 proc fib(n: int): int = if n < 2:
return n else: return fib(n - 1) + fib(n - 2) echo(fib(30))
FizzBuzzの例 let n = 600_000 for i in 1..n: if
i mod 3 == 0 and i mod 5 == 0: echo "FizzBuzz" elif i mod 3 == 0: echo "Fizz" elif i mod 5 == 0: echo "Buzz" else: echo i
GoやRustのようにmain関数は不要 ファイルにズラズラ書けばそれで動く Pythonのようなオフサイドルールで読みやすい!
UFCS 関数の第一引数を前に持ってきてメソッドチェーンのようにできる記法 これによってオブジェクト指向のメソッドを表現する D言語から取り入れられた機能
type Customer = ref object name: string email: string proc
getName(self:Customer):string = return self.name let taro = Customer(name: "taro") echo taro.getName() >> "taro" echo getName(taro) >> "taro" ライブラリ内の独自の型に対してメソッドを後から追加できる
JSONパースが楽 import json, os # ファイルを開く let file = readFile("./file.json")
# 文字列をJsonNode型に変換 let node = file.parseJson echo node >> {"key1":{"id":20,"name":"takahashi"},"key2":["val1","val2"]} echo node["key1"]["id"].getInt >> 20 echo node["key1"]["name"].getStr >> "takahashi" echo node["key2"] >> ["val1","val2"]
# key1に要素を追加 node["key1"]["email"] = %"
[email protected]
" echo node["key1"]["email"].getStr >> "
[email protected]
" #
key2に要素を追加 node["key2"].add(%"val3") echo node["key2"] >> ["val1","val2","val3"] Goのように構造体を用意する必要がない 動的型付け言語の連想配列ようにJSONを扱うことができる
整った環境
環境構築 https://github.com/dom96/choosenim
MacOS、Linuxなら1行で環境構築が完了 curl https://nim-lang.org/choosenim/init.sh -sSf | sh WindowsでもGithubのリリースページからZipをダウンロードし 解凍して中の runme.bat を実行するだけ
もちろんDockerイメージもDockerhubにあります
標準ライブラリ 標準ライブラリの全ての関数とサンプ ル、型一覧や関数の引数の型は何かが まとめられている Pythonの「battery included」の思想を 受け継いでおり、めちゃくちゃ標準ライブ ラリが豊富
外部ライブラリ 検索すればライブラリが見つかる nimble install コマンドでインストールできる( npm install みたいな) https://nimble.directory
VSCodeの拡張機能 シンタックスハイライト 補完 マウスオーバーで関数定義の表示 定義元ジャンプ
どこでも動く
Windows
Android
iOS
Nintendo Switch
IoT http://mpu.seesaa.net/article/463328035.html
C言語と連携が簡単
各OS毎のdllやsoファイルをロードして when defined(nimHasStyleChecks): {.push styleChecks: off.} when defined(windows): const dllName
= "libpq.dll" elif defined(macosx): const dllName = "libpq.dylib" else: const dllName = "libpq.so(.5|)"
C言語のドキュメント通りに関数定義作れば、 C言語の関数をNimから呼べる PPGconn* = ptr PGconn PPGresult* = ptr PGresult
proc pqexec*(conn: PPGconn, query: cstring): PPGresult{.cdecl, dynlib: dllName, importc: "PQexec".}
何でもできる
Web https://github.com/dom96/jester
デスクトップアプリ https://github.com/status-im/status-desktop
2Dゲーム https://vladar4.github.io/nimgame2/
3Dゲーム https://github.com/pragmagic/godot- nim https://qiita.com/NabeKz/items/f952e 43d7807935734d0
コンテナエンジン https://github.com/fox0430/nicoru
OS https://twitter.com/uchan_nos/status/1359014828090683393
私がNimで作ったライブラリ
Basolato LaravelライクなフルスタックWebフレー ムワーク
allographer Laravelライクなクエリビルダ
interface-implements Nimで インターフェースの実装 を表現でき るようになるライブラリ
最後に
今日のスライドはMarpというVSCodeの拡張機能を使って、マークダウンで作りました。 おすすめです。