ラベル Nim の投稿を表示しています。 すべての投稿を表示
ラベル Nim の投稿を表示しています。 すべての投稿を表示

2021/02/24

Nimで加減算のできるコンパイラの作成

元ネタ

今回の元ネタになっているのは、Rui Ueyamaさんの「低レイヤを知りたい人のためのCコンパイラ作成入門」であります。

なぜNimなのか?

C言語でそのままやってしまうと、私の場合、丸写しになってしまい、何となく理解したような気分になってしまうからです。またNimの場合、C言語のヘッダーファイルや関数を直接使うことが可能なので、後々便利かな?なんて素人の考えでNimにしました。

ということで、現在ステップ2までやったので、そこまでを記事にしようと思います。


2021/01/15

新年のご挨拶とマージソート

ご挨拶

もう新年を迎えて2週間も経ってしまいましたが、新年あけまして、おめでたくないですが、皆様にとって良い一年になりますように。

当ブログは去年の末におかげさまで閲覧数が10000を超えました。一般的なブログの閲覧数とは雲泥の差ではありますが、なんとなく嬉しいです。今後もバタバタしながらも、時間を見つけて記事を書いていこうと思います。

新年早々に感染爆発・緊急事態宣言とえげつない状況となってしまいましたが、我々ができることは手洗い、うがい、目洗い、マスク、自粛のみ。それ以外はどうしようもできないことなので、自分でできることは全てやって、だめならだめでしょうがない、という気持ちで生きていきましょう。

今年もどうぞよろしくお願いいたします。


2020/03/09

Nimのポインタと参照

修正版

以前ポインタと参照に関する記事を書いていましたが、内容が雑だったため改めて書き直しました。
NimではCライクなポインタと参照が用意されています。Cライクなポインタはアンセーフなもので、ガベージコレクタの管理外となっており、自身で管理しなければなりません。一方、参照はガベージコレクタの管理の対象となっているため、管理をガベージコレクタに任せることができます。

2020/01/18

SDL2に入門してみた(C, Nim)

SDL2とは

SDL2とは、C言語で書かれたクロスプラットフォームなマルチメディアライブラリで、グラフィックの描画・サウンドの再生などを扱うことができるようになります。C言語で書かれておりますが、他の言語にも移植されています。
今回はC言語とNimでSDL2を使ってみようかと思いますが、その前にC言語のSDl2ライブラリが必要なので予めインストールが必要です。Nimのほうはそのライブラリのラッパーとなります。私の場合はManjaro Linuxを使っておりますので、sdl2はもともと入っておりました。したがって、残りのgfx、ttf、mixer、net、imageを追加でインストールしました。sdl2_gfxは図形などを描く際に、sdl2_mixerは音声を扱う際に、sdl2_imageは画像を扱う際に、sdl2_netはネットワークのサポート、sdl2_ttfはTrueTypeフォントのサポート、に必要なものです。
NimでSDL2を使う場合、実はsdl2とsdl2nimの2種類があります。

2019/12/03

Nimで列挙型と構造体を上手く組み合わせて使う

Nimの列挙型と構造体

Nimでは列挙型も構造体も共にtypeを使って以下のように作成します。

------
列挙型
------
type
  MyEnum = enum
    A, B, C
    
------
構造体
------
type
  MyStruct = ref object
    fieldA: int
    fieldB: string

そしてこれらは組み合わせて使うことも可能で、ちょっと複雑な感じになりますが、例えばCDプレーヤーとDVDプレーヤー(昭和感たっぷりで申し訳ございません)というヴァリアントを持ったDeviceという列挙型を作成するとします。
そしてそれぞれ扱うものは違っても、playstopといった同じ名前の機能を持っていています。
その場合は以下のような形で書くことによって実現できます。

2019/10/10

Nimの黒魔術

Source Code Filters

最近知った機能なのですが、NimにはSource Code Filters(SCF)なるものがあります。名前がSCP(詳しくはウィキペディア等で調べて見て下さい。何やらゲームにもなっているようですが、おじさんはゲームしないので、詳しくはわかりません)に似ているあたりが、何やら謎めいた不気味な雰囲気を醸し出しています。いったいどのようなものなのか。まずは簡単なものをご紹介します。

2019/09/28

Nim version 1.0.0 ついにリリース

前回の記事にて……

前回の記事で、Nimはversion1までは様子見すると言って、のんびり構えていたら、もうリリースされてしまいました。ということで、これからNimを始めようという方のために、まだまだ日本語の情報が少ないので、大まかな使い方や仕様を書いていこうかと思います。

2019/04/24

Nimのちょっとおもしろい機能distinct

distinct

Nimでは型に別名をつける機能が実は2つあります。一つは本当に単なる別名をつけるもの。もう一つは元々ある型を使って、全く新しい型を作るというもの。

2018/12/16

久々のNim

Rustばかり使っている今日この頃

最近Rustの理解が、少しずつではありますが、進んできて、面白くなってきたので、よく使っています。しかし、せっかく勉強したことを忘れてしまうのはもったいないので、他の言語も時々は触るようにしています。

2018/10/01

Nim 0.19 リリース!

アップデート

私は、Linuxを使用しており、インストール時にchoosenimを使っているので、以下のコマンドでアップデートできました。

$ choosenim update stable
ちょっと時間がかかるのが気になりますが、無事にアップデートできました。

2018/07/04

Nimの特徴とHelloWorldとコンパイラと

特徴

Nimのコンパイラは最初Pascalで書かれていたそうです。
Nimの面白いところは、コンパイラで、まず最適化されたCコードを生成できる。加えて、C++やObejctive-Cやjavascriptのコードを生成できることです。
使った実感としては、軽い!速い!