なんか考えてることとか

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

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

  • 2022/8/5
    • 「参照渡し」の誤用があったのですべて修正

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

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

続きを読む

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

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

続きを読む

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

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

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

続きを読む

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

2022/5/21 関数適用の表現、その他稚拙な表現を修正。

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

続きを読む

モナド則からJavaScriptのPromiseがモナドであることを確かめてみた

2022/1/13 型コンストラクタを「抽象型」としていたのを「多相型」に修正しました

最近になって、プログラミングにおけるモナドには「モナド」という規則があることを知り、これを使えばこれまた最近聞いた「JavaScriptのPromiseはモナドである」というのが本当かどうか確かめられるのでは?と思ったので確かめてみた。

続きを読む

代数的データ型を論理回路で理解する記事

前回をより理解しやすくするための補足記事的なもの。
opaupafz2.hatenablog.com

今回、「代数的データ型」について、自分なりの解釈を述べていこうと思う。これによって前回の記事で自分が何を言いたかったのかより理解を深めていただければ幸いである。
注意してほしいのが、自分が理解しやすいように、本来数学的に解説すべきところを、論理回路的に解説している邪道な記事なので、そこはご了承いただきたい。

続きを読む

直和型を「C言語の共用体に相当する」と説明するのは、もはや誤解を生むだけである

関数型プログラミングを学ぶ際に登場することのある単語として「代数的データ型」というものがあり、直和型はこの代数的データ型の一種である。

代数的データ型において、「列挙型はCの列挙体(enum)、直積型はCの構造体(struct)に相当する」という説明に関しては概ね異論はないのだが、その中で一つだけ、「直和型はCの共用体(union)に相当する」という説明だけはかなり違和感のある説明だと思ったため、今回、テーマとして「直和型をC共用体だと説明するのは誤解を生むだけ」という主張を書いていこうと思った次第である。

続きを読む