久しぶりの進捗報告です。
前回の記事:
続きを読むJe n’ai pas le temps
Évariste Galois
最近、やりたいことが急速に増大しており、時間の不足を感じます。この記事では私のやりたいことを列挙してみます。
目次
別の記事でも書きますが、そろそろリリースしたいです。
放置気味です。
GitHubにIssueとPRがいくつか届いていますが、対応できていません。
TeX Live 2023になってBibTeX関連の機能が壊れたような噂をキャッチしています。それもなんとかしなければなりません。
ClutTeXは現在Luaで実装されていますが、型がなくて改修が辛いです。そこで、ClutTeXの実装に使う言語をStandard MLに置き換えることを考えています。ソースはStandard MLで書いて、LunarMLを使ってLuaにコンパイルする計画です。
書き直しのためにはまとまった時間が欲しいです。
最近はGHCのSIMDプリミティブをもうちょい活用できないか考えています。
コンパイラーの用意するプリミティブがへぼいから使われないのか、誰も関心がないからコンパイラーに機能追加されないのかわかりませんが、とにかく何かしたいです。もったいない精神ってやつ?
できることはいくつか考えられて、
などがあります。
このうち、x86 NCGについては先人が(確か)Summer of Codeで実装したパッチがありますが、一旦取り込まれた後不具合によりrevertされたという経緯があります。レジスターアロケーション周りだったかな?とにかく、モノはある程度できているので気合いがある人が時間をかければ修正できるかもしれません。
LLVM/AArch64の対応は難しいところをLLVMがやってくれるので比較的楽です。なので試しにパッチ(マージリクエスト)を作ってみました。まだ十分テストされているとは言えないのでDraft扱いですが。
テストのためにはSIMDを使うアプリケーションが必要です。ベクトルの内積なら誰でも書けますが、もっと複雑な例が欲しいです。N体問題とかハッシュの計算とかですかね。私は高性能計算に興味はありますが実力も動機付けも伴っていない人間なので、こういう時弱いです。
既に何回か書いている気もしますが、Webと相性のいいやつを何か作りたいです。
数学とコンピュータの絡みに興味がある人間として、「数学科のためのHaskell入門」みたいな記事(本?)を書きたいです。
構成的数学をやりたいというのは4月の記事に書きました。
その時やっていた勉強は、本のUFDの定義が間違っていたことで精神力を消耗し、中断したままです。
そういえば親戚から誕生日のお小遣いを頂いたので、Handbook of Constructive Mathematicsをポチりました。足りない分は自腹です。海外からの取り寄せなので、いつ届くかはわかりません。
夏山に行きたいです。登山靴も新しいのを買ったし。
行きたい山は色々ありますが、今気になっているのは剱岳です。若いうちに登っておきたいです。
自分の持っているWindowsマシンがIvy Bridge世代でいい加減古いので、新しいのをポチりました。高性能GPU搭載は諦めて、ミニPCです。それともeGPUできるのだろうか?(調べてない)
CPUはAMDのZen 4世代のやつです。AMDのCPU/GPUも触ってみたいなと思ってそれにしました。
ミラーレス一眼も欲しいですが、今年は色々大きな出費があった(iPhone、登山靴、ミニPC)ので先送りでいいかなと思っています。
自分の持っている写真の管理をどうにかしたいです。現状はApple謹製の写真アプリを使っていますが、自分に万が一のことがあった時に残された人がアクセスできません。
そこで、バックアップも兼ねて、これまでの写真をブルーレイに焼いてみようかと思っています。とりあえず結婚式の写真・動画をBD-R(2層)に焼こうとしています。他の写真はどうするか未定です。
スマートフォンで撮った写真はGoogleやAppleのクラウドストレージに流し込んでいますが、保存容量にはお金が必要なので、引き揚げたいです。iCloud Driveは現在月額400円の200GBプランですが、月額130円の50GBプランにならないかと思っています。
やりたいことが多いと、なんとかして時間を捻出したいです。睡眠時間を削るのはやりたくないです。そうすると、日中の活動時間の多くを占めるのは労働なので、これに目が行きます。
もしも自分のやりたいこと(LunarMLやClutTeXや執筆活動)でそれなりのお金、例えば月10万円をコンスタントに稼げるようになれば、労働時間を削ってやりたいことをやることも考えられます。しかしまあ現実的ではないです。GitHub Sponsorsをやったところでどれだけ集まるでしょうか。
「時間がない」という記事を書くくらいならその時間をやりたいことに充てろ、と言われそうですね。この記事を書くのにかかった時間は50分くらいです。50分と「記事にして吐き出すことによるスッキリ感」のどちらに価値を見出すか、という話です。
「マグマ」という代数構造がある。
マグマとは、集合とその上の二項演算の組である。
普通の代数構造だと、二項演算について結合法則や単位元の存在など、なんらかの法則を課すことが多いが、マグマは何の法則も課さない。
続きを読むみなさん、Pythonは好きですか?
この記事では、私がPythonという言語とそのエコシステムについて思うところを書いていきます。全体を通したストーリーみたいなのはなくて、トピックごとに書いています。
私のPython経験は3年弱です。Pythonについてまだまだ新米だという自覚はありますが、そこは有り余る才能でカバーしてこの記事を書いています。
続きを読む新言語にできることはまだあるかい
なんとかWIMPS
最近(1ヶ月くらい前)、こんな記事が出ました:
Kotlin, TypeScript, Rust, Swift以降にみんなが話題にするような新しい言語が出てこない、それはなぜか、みたいな趣旨です。客観的に見れば「新しい言語は常に出続けている」わけですが、「みんなが話題にするような」というのが多分曲者なんでしょうね。
例え話をすると、新しい若木は常に生えてきているんだけど、大木に成長するには時間がかかるので、大木にしか興味のない人には「この8年間で新しい大木は登場していない」と判断してしまうのかもしれません。
まあ私としても、Web (HTTP) APIを書く言語とか、JSON色付け係が使う言語はもう出揃ってしまったのかもしれないという気はしなくもないですが、それでも新しい言語が登場して話題を集め(新しい物好きの集団に絞れば「みんなが話題にする」かもしれません)、一定の地位を占める余地はあると考えています。そして、そういう「これから流行る言語」がすでに登場している可能性は十分あります。
(もちろん、どこかの組織または個人が裏でこっそり開発している言語の場合はまだ表には出ていないでしょう。Rustの場合は開発開始は2006年らしいですが、一般公開されたのは2011年で、「裏で開発している」期間が5年ほどあります。)
この記事では、私が独断と偏見で選んだ、「これから流行るかもしれない、(比較的)新しい言語」を紹介してみます。流行の可能性よりも「見るべきところがあるか」という観点で選んだものも含まれます。
なお、ここで紹介する言語は私の情報網に引っかかったというだけであって、必ずしも私自身が試しているわけではありません。不正確なことを書いていたら申し訳ありません。
続きを読む新しい季節がやってきたので、また山に行きたい。
私の登山道具は大学に入った12年前に揃えたものが多く、一部はすでに買い替えたりしているが、12年前から使っているものの中には不調が来ていて対策が必要なものもある。
続きを読む前に「週刊 代数的実数を作る」という一連の記事を書きました。
あれの続きじゃないですが、また計算機代数周りの記事を書きたいなあと最近思っています。
せっかく書くなら、今度は構成的数学の視点を取り入れたいです。
続きを読むHaskellにはリストやステートメントを区切るカンマやセミコロンを行頭に置くスタイルがあります。
primes = [ 2 , 3 , 5 , 7 ] main = do { putStrLn "Hello world!" ; print primes }
ですが、「カンマやセミコロンを行頭に置く」というスタイルは他の言語のユーザーには奇異に映るのではないでしょうか。以下、そういう前提で話を進めます。
MarkdownやYAMLでは *
や -
を行頭に置くので、「区切り文字が行頭にある」こと自体は悪くないはずです。Haskellで代数的データ型を定義するときの |
を行頭に書いても初学者の違和感は少ないと思います(たぶん)。
普通のプログラミング言語で「行頭に区切り文字を置く」というスタイルを採用するとしたら、どういう区切り文字が適切なのでしょうか?
*
, マイナス -
, プラス +
この辺はデータ記述言語とかMarkdownでお馴染みですが、普通のプログラミング言語では演算子として使いたいのではないかと思います。
行頭に置いた場合のみ区切り文字として扱うという手も考えられますが、いずれにせよ「式を複数行にまたがって書くときに行頭に演算子を書く」というスタイルとの衝突が懸念されます。インデント量で識別するか、一部の言語のように継続行を表すマークを導入することになるでしょう。
あと、どっちみちインラインでリストを書くときの区切り文字には適していないので、従来のカンマも併用する必要があるかもしれません。
擬似コード:
primes = [ * 2 * 3 * 5 * 7 ]
|
ML系言語のデータ型定義で使われているやつです。
縦棒は慣習的に「または」の意味で使われることが多いので、リストや逐次実行などの順序が重要な用途には違和感があるのではないかと思います。まあMLのパターンマッチみたいに微妙に順序があるケースにも使われていたりしますが。
擬似コード:
primes = [ | 2 | 3 | 5 | 7 ]
レイアウトルールを採用している言語だとそもそも区切り文字が必要なかったりします。Haskellも逐次実行のdoはレイアウトルールによりセミコロンなしで書けます。
最近のHaskellにはQualifiedDoという拡張があって、それを使うと一時的にdo記法を乗っ取れるので、リストの構築に使えたりします:
module M where import qualified Prelude (>>) :: a -> [a] -> [a] (>>) = (:)
{-# LANGUAGE QualifiedDo #-} import qualified M primes = M.do 2 3 5 7 [] -- 型の関係で最後にこれが必要
他の例だと、Juliaは(多次元)配列を空白や改行区切りで書けるらしいです。空白と改行で意味が変わるみたいですが。
番号から始めるという手もあります:
array = 1. "first" 2. "second" 3. "third"
fn main() { 1. do_something() 2. do_something_else() 3. return 0 }
が、「行を削除したり、コピペで順序を入れ替えた時に修正が必要になる」という欠点があります。
ASCIIの記号は少ないので、演算子と被らないように選ぶのは大変そうです。
ピリオド .
は自然言語だと普通文末にあるのでカンマやセミコロンと同じ理由で向かない気がします。まあプログラミング言語だとメンバー名の区切りに使われることも多いし、Swiftだと識別子の前に置けたりするので大した問題ではないのかもしれない。
primes = [ . 2 . 3 . 5 . 7 ]
コロン :
は割とアリかもしれない?コロンは型注釈に使いたい気がするけど、行頭には使わないような?
primes = [ : 2 : 3 : 5 : 7 ]
ハッシュ記号 #
はどうかな。Markdownの見出しっぽいかもしれない。
primes = [ # 2 # 3 # 5 # 7 ]
なんか良さそうなのがあったら自分の言語に実装してみてください。擬似コードを載せた記事を書くのでも良いです。
あと、似たような趣旨の記事が既にあったみたいです:
プログラミング言語処理系が好きな人の集まりというコミュニティーがあります。ここは言語処理系を作っている人が多く集まっています。自作言語界隈とも言えます。そこでの話題について、色々と思うところがあったので、記事を書いてみます。
続きを読む