Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nim LT
Search
medy
July 01, 2021
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nim LT
Nimって何?っていう紹介
medy
July 01, 2021
More Decks by medy
See All by medy
Nimで静的ファイルサーバーを作る
dumblepy
0
270
stapy79_Pythonistaに伝えたいNimの魅力
dumblepy
0
510
Masonote hands On in Tokyo Japan
dumblepy
0
150
Other Decks in Technology
See All in Technology
Metadata - Section 1: HTML Basics
mohab1
0
120
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
480
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
160
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
440
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.3k
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
100
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
210
go-sqletch
moznion
0
140
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
A Soul's Torment
seathinner
8
3.8k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Leo the Paperboy
mayatellez
10
2.4k
Thoughts on Productivity
jonyablonski
76
5.4k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Statistics for Hackers
jakevdp
799
230k
Raft: Consensus for Rubyists
vanstee
142
7.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
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の拡張機能を使って、マークダウンで作りました。 おすすめです。