Intel SDMの誤植を直してもらった

Intelはコンピューターの頭脳、CPUを作っている会社です。CPUで動作するプログラムを書くためには、プログラムを低レベルな命令の列に変換し、その命令の列を特定の規則に従って変換したバイナリー(機械語)を用意しなければなりません。IntelのCPUが提供する命令や機械語について、Intelが用意しているマニュアルがIntel 64 and IA-32 Architectures Software Developer’s Manual、略してIntel SDMです。

Intel SDMの最新版は「Intel® 64 and IA-32 Architectures Software Developer Manuals」から入手できます。全部合わせて5000ページ以上あります。

Intel SDMも人間が書いているマニュアルなので、時々誤植等があります。容易にそれとわかる誤植なら可愛いものですが、時にはわかりにくいものもあります。

December 2024の版における、CVTSS2SI命令の説明を見てみましょう。これは単精度浮動小数点数(Scalar Single-precision)を符号付き整数(Signed Integer)に変換する命令です。

続きを読む

GHCのSIMDサポートの進捗:整数ベクトルの演算

ブログ等にちょいちょい書いていますが、私はこの数ヶ月ほどGHCのSIMDサポートの改善を進めています。

この3ヶ月間はx86 NCGで整数のSIMD演算を使えるようにするパッチを書いており、数日前にマージされました。一つのマイルストーンだと思うので記事にしておきます。

続きを読む

数学とプログラムはどちらが易しいか/数学とプログラムの違い

最近、某所で「数学とプログラムはどちらが易しいか」という話題が出ました。その場ではあまり上手い返しができなかったので、ブログ記事の題材にして供養します。

もちろん、この質問の答えは人によって違うでしょうし、人によって違うからこそ質問として意味があると言えるでしょう。この記事に書くのは私の見方、私の意見です。

短い答えが欲しい人向けに2択で答えておくと「私にとってはプログラムの方が易しい」となりますが、以下に長い答えを書きます。

続きを読む

TypeScript使いの憂鬱:never型はプロパティを持つか

never型とプロパティアクセス

TypeScriptにはneverという型があります。先日も記事にしましたが、簡単に言うとこれは「値を持たない型」です。

never型は、あらゆる型に対してその部分型として振る舞います。例えば、nevernumber の部分型であることは次のコードでわかります:

続きを読む

never型があると便利か(言語処理系実装者の観点から)

TypeScriptをはじめとするいくつかのプログラミング言語には、never型という型がある。この型は典型的には「制御を返さない関数」の返り値として使われる:

function f(x: string): never {
    console.error(x);
    throw new Error();
}

never型は型システム的には「値を持たない型」「任意の型の部分型」として特徴づけられる。

他のプログラミング言語、例えば私が作っているLunarMLにもnever型があると便利だろうか?

続きを読む

「インタプリタは機械語に翻訳する」という誤解

プログラミング言語のインタプリタの説明で「逐次機械語に翻訳する」という説明を見かけることがある。ググればそういう説明がたくさん出てくるので具体例は割愛する。

しかし、「機械語に翻訳する」という説明は好意的に言えば「誤解を招く言い方」で、率直に言うと「デタラメ」である。

そういう説明を書く人は、自分でインタプリタを書いたことがあるのだろうか?誰かが書いた間違った説明文をそのまま引き写しているのだろうか?

もちろん、世の中にはJITコンパイルする言語処理系もあるが、それはインタプリタのように使えたとしても「コンパイラ」なのではないか。

続きを読む

√2が無理数であることの証明と背理法と構成的数学

背理法による証明の例として、よく「\(\sqrt{2}\)が無理数であること」が挙がる。大まかな流れは以下の通りだ:

「\(\sqrt{2}\)が有理数だったと仮定し、\(\sqrt{2}=p/q\)(\(p\), \(q\)は互いに素)とおく。すると\(2q^2=p^2\)で、左辺が偶数なので右辺も偶数、よって\(p\)は\(p=2p’\)と書ける。すると\(q^2=2p’^2\)が得られて、\(q\)も偶数ということになる。これは『\(p\)と\(q\)は互いに素』という仮定に反する。よって、\(\sqrt{2}\)は有理数ではない(無理数である)。」

さて、数学の一部の流儀では使用する論理を制限することがある。構成的数学というのがその例で、大まかには「排中律を使わないような数学」つまり「直観主義論理に基づいた数学」が構成的数学になる(Brouwerの「直観主義」とは違うので注意されたい。あと、構成的数学の中でも選択公理をどの程度認めるかでバリエーションがあるようだ)。「\(\sqrt{2}\)が無理数である」という上記の証明は、構成的数学では受け入れられるのだろうか?

続きを読む

AIでも生成できる技術記事に価値はあるのか

最近、Qiitaの「タイムライン」(指定したタグのついた記事を新着順に表示してくれる機能)を眺めていると、ある特徴を持った記事が散見されるようになった。その特徴とは、

  • 内容が当たり障りないというか、オリジナルの知見とか著者の感情のようなものが少なく、淡白である
  • セクションに番号が振られている
  • 著者のページを見に行くと、毎日のように記事を公開している

である。そう、AIで生成された可能性が高い記事だ。

最近見かけるようになったAI生成された技術記事について何点か思うところがあるので、書いておく。

続きを読む

WSL2へVS CodeからSSH接続する/VS Codeを使いこなしたい

最近はメインのテキストエディターとしてVisual Studio Codeを使っています。しかし、いまいち使いこなせている気がしません。

作業内容としては、最近はGHCのSIMDプリミティブの実装をやっていて、x86-64 WindowsマシンのWSL2で作業することが多いです。しかし、私のメインマシンはMacで、MacでFirefoxを開きつつ、リモートデスクトップでWindowsにつなぎ、その上でターミナルとVS Codeを立ち上げて作業していました。「直接Windowsで作業しろよ」とか言われそうですね。

このやり方では困ったことがあって、Mac miniのネットワークの問題なのか、時々リモートデスクトップが固まります。固まっている間はエディターへの入力もできなくなります。

リモートデスクトップ越しではなく、手元のVS Codeを使えばこの問題を回避できそうです。ネットワーク接続はファイルを開くタイミングと保存するタイミングで繋がっていればいいわけですからね。つまり、MacのVS CodeからWindows機のWSL2へSSH接続するのです。

(昔使っていたEmacsにもSSH越しに作業するモードがありました。)

というわけで、重い腰を上げてVS CodeでSSH越しに作業する方法を調べました。

続きを読む