なんか考えてることとか

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

JavaScriptのNumber型におけるbit演算は悪である

⚠注意⚠

今回の記事は「特に」個人の感想色が強く、JavaScript好きにとって不快になる要素が含まれているかもしれません


おそらく手続き型言語であれば必ずと言って良いほど存在するbit演算。今回はJavaScript(以下JS)のNumber型におけるbit演算は自分が今まで見てきたbit演算の中でも最悪の物であることをお伝えしたいと思う。

続きを読む

Python 3.11で末尾再帰が書けるようになる

  • 2022/10/28
    • factorial関数の定義に誤りがあったので修正

3.10以前のPythonでは、再帰関数に対して「末尾呼び出し最適化」など何も対策をしていないために、普通に再帰関数を定義すると、問題が発生してしまっていた。

しかしPython 3.11でその問題が解消された再帰関数が書けるようになった。今日は再帰関数の問題点と、Python 3.11における再帰関数の定義の手法について書いていこうと思う。

続きを読む

Rustにおいてbreakやreturnを含む式はどの型であっても良い

  • 2022/8/27
    • 演習問題の(3)で提示されているコードが間違っていたので修正

Rustaceanなら周知の事実であるが、Rustは基本式指向の言語である。そのため、すべてのブロックは式として扱われる。そしてとにかく型に厳しいことでも知られる(型に厳しいと言うよりは、少し特殊な場合を除いて部分型付けされていない、というだけのことなのだが)。

今回は、式において{ break v; }{ return v; }の型はどういう型になるのかについて書いていきたい。

続きを読む

「型システム入門」第4章の実装をRustでやってみた

「型システム入門 −プログラミング言語と型の理論−」(以下TaPL)は、型システムを理解するうえで必要な基礎知識を学ぶことができる、文字通り型システムの入門書である。最近、型とは実際に何なのかを知るために、この本を読んで勉強している。

第4章の型なし計算体系の実装がRustでもできそうだと思ったので、Rustで実装した。

続きを読む

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

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

続きを読む

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

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

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

続きを読む

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

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

続きを読む