なんか考えてることとか

変な人が主にプログラミング関連で考えていることをまとめる。

void型の関数は「値を返さない」のではない

void型とはほとんどの場合において「値がないこと」を示す特別な型である。このとき、関数の戻り値の型としてvoid型を指定したときに「値を返さない」と説明する人をしばしば見かける。
これは解釈次第では間違いではないのだが、「誤解が生じやすい説明」であることを今回は書いていこうと思う。

続きを読む

Rustのクロージャは厳密にはクロージャではない

前々から思っていたのだが、Rustのクロージャという「名前」には違和感があった。なぜなら、クロージャと言うのは本来ただの関数のことを示すわけではないからだ。

だがクロージャについて調べてみて、改めて「Rustのクロージャは厳密にはクロージャではない」ということがはっきりしたので、今回はRustのクロージャクロージャではないということを説明していこうと思う。

続きを読む

「Rustのトレイトは『高カインド多相のない型クラス』である」のブコメ返信とか

これは「Rustのトレイトは『高カインド多相のない型クラス』である」のブコメに対する返信をする記事です。気になったコメントがあれば随時追加していきます。
opaupafz2.hatenablog.com

続きを読む

JavaScriptでC共用体を表現してみる(実は、リベンジ)。

その記事は(ブログごと)消していてもうないのだが、実は筆者は過去、JavaScript(以下JSと呼ぶ)でCの共用体について説明しよう、という記事を書こうとしたことがある。しかし、複数の変数がメモリを共用する、というのをコーディングする際あまりメモリを気にする必要のないJSでは表現することは難しくそのときは「残念ながら表現することは不可能だ」という結論となっていた。そのため、参照渡しで似たようなことができる、程度のことしか書いていなかった。

しかし近年、JSの知識を深めていて「あ、それっぽいことは実現できそうだぞ」と思ったので、ここにその手法を記す。

続きを読む

Rustのトレイトは「高カインド多相のない型クラス」である

Rustのトレイト(以降Rustトレイトとつなげて呼ぶことにする)は一体何なのか、様々な他言語の概念を通して調べていたが、やっと(「やはり」でもあるのだが)結論が出たので書いていこうと思う。
また、Rustトレイトはインターフェースなのか、MixInなのか、はたまたトレイトなのかということについて書き直したかったのでそれもついでに書く。

続きを読む

インターフェース、MixIn、トレイトについて

近年、MixInやトレイトという名称の概念を持つプログラミング言語が増えてきた、が、蓋を開けてみると、実際にはそれはMixInでなかったり、トレイトではなかったりすることが多くあり、MixInやトレイトに関する混乱を招く要因になっていると思う。

そこで今回は、インターフェース、MixIn、トレイトについて、それぞれどういうものなのか、書いていこうと思う。

続きを読む

モナド初心者が解く、モナドのあらゆる誤解

最近、プログラミングにおけるモナドについて調べていて、モナドと言うものがどんなものなのか掴み始めてきて、ある程度これが誤解なのかそうでないのか見分けられるようになってきたので、モナドのよく見かける誤解について書いていく。

続きを読む