Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nim LT

Avatar for medy medy
July 01, 2021

Nim LT

Nimって何?っていう紹介

Avatar for medy

medy

July 01, 2021
Tweet

More Decks by medy

Other Decks in Technology

Transcript

  1. Nimの何が良いの? アジェンダ 1. 速い 2. 軽い 3. 書きやすく読みやすい 4. 整った環境

    5. どこでも動く 6. C言語と連携が簡単 7. 何でもできる 8. 私がNimで作ったライブラリ
  2. フィボナッチ数列の例 proc fib(n: int): int = if n < 2:

    return n else: return fib(n - 1) + fib(n - 2) echo(fib(30))
  3. 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
  4. 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" ライブラリ内の独自の型に対してメソッドを後から追加できる
  5. 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"]
  6. # 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を扱うことができる
  7. iOS

  8. 各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|)"
  9. C言語のドキュメント通りに関数定義作れば、 C言語の関数をNimから呼べる PPGconn* = ptr PGconn PPGresult* = ptr PGresult

    proc pqexec*(conn: PPGconn, query: cstring): PPGresult{.cdecl, dynlib: dllName, importc: "PQexec".}