マグマ
「マグマ」という代数構造がある。
マグマとは、集合とその上の二項演算の組である。
普通の代数構造だと、二項演算について結合法則や単位元の存在など、なんらかの法則を課すことが多いが、マグマは何の法則も課さない。
続きを読む「マグマ」という代数構造がある。
マグマとは、集合とその上の二項演算の組である。
普通の代数構造だと、二項演算について結合法則や単位元の存在など、なんらかの法則を課すことが多いが、マグマは何の法則も課さない。
続きを読むみなさん、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 ]
なんか良さそうなのがあったら自分の言語に実装してみてください。擬似コードを載せた記事を書くのでも良いです。
あと、似たような趣旨の記事が既にあったみたいです:
プログラミング言語処理系が好きな人の集まりというコミュニティーがあります。ここは言語処理系を作っている人が多く集まっています。自作言語界隈とも言えます。そこでの話題について、色々と思うところがあったので、記事を書いてみます。
続きを読む私は現在、Standard ML処理系であるLunarMLを開発しています。しかし、Standard MLはほぼ進化の止まった言語です。一応Successor MLという取り組みがありますが、準拠を目指している処理系は多くはありません。
LunarMLが成功するためには、言語標準という枠に囚われずに「モダン」な機能を積極的に取り入れていくことが重要だと考えられます。つまり、拡張機能です。
Standard MLに足りない機能は何でしょうか。LunarMLにどんな拡張を入れれば、使いやすい言語になるでしょうか。
過去の記事ではすでにいくつか機能を挙げ、いくつかは実際に実装しました:
実装済みの拡張機能については以下に説明を書いています:
ここではもうちょっと色々アイディアを出してみます。
続きを読む今更ながらiPhoneを買った。これまでの私の携帯電話はガラケーやAndroid端末だった。
私は高校の頃から15年ほどMac、つまりApple製品を使っている(iPod touchやiPadも使ってきた)。なのでこれまでiPhoneを使っていなかったと言うと意外に思われるかもしれない。
なぜiPhoneじゃなかったか、特に深い理由はないのだが、強いて言うならパソコンやタブレットと違って携帯電話に高いお金をかける気にならなかったというのはあるだろう。これまで使っていたAndroid端末も中古だったりミドルレンジのものだった。
転機となったのは、これまで使っていたPixel 3aのOSアップデートが降ってこなくなって新しいスマホを買う必要性が生じたこと、ボーナスでまとまったお金が入ったこと、などだ。
というわけでiPhone 14 Proを買った。ProにしたのはLiDARを試したかったからだ。本体のサイズは大きすぎないのが好みなのでMaxにはしなかった。
なんだかんだ言って私はiPod touchもiPadも使ってきたからiPhoneはそんなに目新しくない……と言いたいところだが、妻によると触っている時のにやつきは抑えられなかったようだ。
続きを読む