Nimを触ってみる話

ブログ

こんにちはmkです。今回はNimっていう言語を触っていきます
fastapiを触ると言ったな、あれは嘘だ

スポンサーリンク

Nimとは

Pythonライクな静的言語です
C系やJSにトランスコンパイル出来るなかなかの変態言語

詳しくはググってくれ()

インストール

Ubuntu, Debian系

sudo apt install nim

Fedora, Serene系

sudo dnf install nim

Arch, Alter系

sudo pacman -S nim

Hello, World!

まずは定番
比較対象としてPython版も書きます

Python版

#!/usr/bin/python3
print("Hello, World!")

Nim版

echo "Hello, World!"

コンパイル

nim c hello_world.nim

実行

./hello_world

またはコンパイル&実行

nim c -r hello_world.nim

1行で終わるHello, World!
Python2.xを彷彿とさせる書き方ですね

FizzBuzz

これまた定番
Fizz Buzzって何? って人向けの解説↓

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字に1を足した数字を発言していく。ただし、3の倍数の場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5の倍数の場合は「Buzz」、3の倍数かつ5の倍数の場合(すなわち15の倍数の場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる

Wikipedia

Python版

#!/usr/bin/python3
for number in range(1, 101):
  if number % 15 == 0:
    print("FizzBuzz")
  elif number % 3 == 0:
    print("Fizz")
  elif number % 5 == 0:
    print("Buzz")
  else:
    print(number)

今回は1~100までの数字でFizz Buzzをします

Nim版

for number in 1..100:
  if (number mod 15) == 0:
    echo "FizzBuzz"
  elif (number mod 3) == 0:
    echo "Fizz"
  elif (number mod 5) == 0:
    echo "Buzz"
  else:
    echo number

ところどころ違うけどほぼほぼPythonですね

三角比

なんかいいネタ思いつかなかったので適当です
出力の整形とかもしています

Python版

#!/usr/bin/python3
from math import sin, cos, tan, radians

for number in range(361):
    rad = radians(number)

    if number % 90 == 0 and number % 360 != 0:
        print(f"{number: >3} sin: {sin(rad): >4.1f} cos: {cos(rad): >4.1f} tan:   N/A")
    else:
        print(f"{number: >3} sin: {sin(rad): >4.1f} cos: {cos(rad): >4.1f} tan: {tan(rad): >5.1f}")

Nim版

import math
import strutils
import strformat

for number in 0..360:
  var rad = degToRad(number.toFloat())
  
  if (number mod 90) == 0 and (number mod 360) != 0:
    echo &"{number: >3} sin: {sin(rad): >4.1f} cos: {cos(rad): >4.1f} tan:   N/A"
  else:
    echo &"{number: >3} sin: {sin(rad): >4.1f} cos: {cos(rad): >4.1f} tan: {tan(rad): >5.1f}"

PythonistaのためのC言語ですね
formatもPythonの書き方で使えます

速度比較

Hello, World!Fizz Buzz三角比
Pythonでの実行時間real 0m0.014s
user 0m0.007s
sys 0m0.007s
real 0m0.015s
user 0m0.016s
sys 0m0.000s
real 0m0.025s
user 0m0.015s
sys 0m0.010s
Nimでの実行時間real 0m0.002s
user 0m0.001s
sys 0m0.000s
real 0m0.002s
user 0m0.001s
sys 0m0.000s
real 0m0.010s
user 0m0.010s
sys 0m0.000s

結構差がありますね・・・

終わりに

Nimってこんな感じに書けるんだよ っていうPythonistaへの布教記事です
もっと知りたいって人は公式で比較しているのでそちらを見て下さい

nim-lang/Nim
Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design f...

おまけ

最近トウカイテイオーを逃げ育成しています
先行より安定しているのが謎()
モブロックが怖い・・・

ライスシャワーの育成も始めました
難易度が思ったより高かったです
おすすめは逃げ育成ですかね

スタミナにガン振りしないと天皇賞(春)がキツイ・・・

https://blog.fascode.net/2021/03/26/play_umamusume/

コメント

タイトルとURLをコピーしました