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
120
Nim LT
Nimって何?っていう紹介
medy
July 01, 2021
Tweet
Share
More Decks by medy
See All by medy
Nimで静的ファイルサーバーを作る
dumblepy
0
250
stapy79_Pythonistaに伝えたいNimの魅力
dumblepy
0
470
Masonote hands On in Tokyo Japan
dumblepy
0
140
Other Decks in Technology
See All in Technology
2人で作ったAIダッシュボードが、開発組織の次の一手を照らした話― Cursor × SpecKit × 可視化の実践 ― Qiita AI Summit
noalisaai
1
370
Meshy Proプラン課金した
henjin0
0
250
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
590
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
1
280
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
220
GCASアップデート(202510-202601)
techniczna
0
250
Tebiki Engineering Team Deck
tebiki
0
24k
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
180
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.6k
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
1
100
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
120
プロポーザルに込める段取り八分
shoheimitani
1
170
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
320
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Become a Pro
speakerdeck
PRO
31
5.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
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の拡張機能を使って、マークダウンで作りました。 おすすめです。