はてなキーワード: 配列とは
アリババです。一ヶ月ほどインターン勤務を離れて充電してきたところ。
乃木坂(村を荒らしてきた46人の盗賊団)の首領Fidoに狙いを定めた。奴は俺の遣唐使生活を掻き乱した悪人だが、急がば回れ、ここで恩を売ってアピールしておくのだ。実はFidoは、村では変装して、零細の飛脚屋を営業している。白髪混じりの髭をツルツルに剃って、黒髪の鬘を被り、村では、寄付をしないケチな実業家として知られている。労働基準法もびっくりの二重賃金価格を設定して、人の移動から引越しまで、社員をこき使っているのだ。
さて、俺は大陸で禅の修行をしていたある日、「アールワン」と禅師が叫ぶのを聞いた。日本語でいうところの、「喝」と考えてもらっていい。その瞬間、俺は閃いてしまったのだ。これは、Fidoの運送業務の難題を解決する新規経路アルゴリズムの鍵となる可能性を秘めていた。そこで俺は、派遣末期にインディードをiPadで検索し、そこにしれっと出ていたFido飛脚屋に応募、いや正確には、なにくわぬ顔をしてFidoにコンタクトを取った。Fidoは、「どうしてもやりたい事が見つからなければうちに来てもいい」と言ってきた。勿論俺は、そんなチンケな飛脚屋で飼い殺しにされるつもりはなく、禅の公案を考えていた最中に浮かんだアイデアを試したいだけだ。
ところが生憎、Fidoは初め俺を奴の素晴らしいアイデアを証明するための突破口へと突撃させるポーン♟️として利用しようとした。俺は「毒蛇は急がない」というどこかの国の諺を知っていたので、殊勝顔で業務を遂行するフリをした。糸口としては面白いが、今俺が身を切る理由はどこにもないので、客観的に業務日誌を付けるよう心がけた。
遂に好機がやってきた。ある夏の日、最新の大陸の禅書に、アールワン(とはどこにも書いてなかったが)を売り込む口実を見つけたのだ。衒学的なFidoは、飛脚屋だが最新の禅書を揃えて並べるのを趣味としている。書物の配列に暗号を仕込んであるらしいのだが、俺の頭では解読できそうもない。
早速俺は、Fidoへの業務報告の機会にPRを始めた。「これは大陸の権威ある禅者が著したもので、このように言ってます。これが斯界の新潮流です。しかしながら、文脈Qで、世界でアールワンの謎に気づいているのは私だけです。これがうまくいけば、我が社の経路探索問題の解決に質的な飛躍が起きます。つまり、全ての道はローマに続くことが分かれば、飛脚は走るだけで良いのです」
その時、Fidoの眼が黒く光ったのを俺は見逃さなかった。これで我が社も一息つける、天下りのネタに使おう、そのために馬車馬となってもらおう、等々。大陸で孫子の兵法を学んだ俺は、学究心に溢れた修行僧のように見える目つきをして、このFidoの皮算用を逆に利用することにした。Fidoがこれを読んでヘソを曲げられても困るので、詳細は書かない。
必ず一年に一度、俺はなぜか無性にピザを食べたくなり、国際ピザシンジケートのホームページから、ピザ屋の広告を眺めた。すると、あら不思議、いつもその直後にFidoの魔の手が俺に迫ってきたため、その度に俺は比叡山延暦寺に身を匿ってもらわないとならなくなった。何度か、「本当に危ない目」に遭った。ちなみに、二度目の時だったかと思うが、事の直前に俺は紅葉を見に寺社に行ったのだが、ブリタニアのピザ屋の社員と思われる男が本邦の女性と秋を楽しむ名目で、俺の様子をそれとなく気にかけるのを見た。日本人の心性を探って日本進出への足掛かりとするなど、なかなか忍術兵法に熱心ではないか。能天気な俺は、自分がどんな目に遭うのかこれっぽっちも思い至らないので、そんな雑駁な感想になるのだ。
俺は着実に、飛脚屋最適経路問題を解決すべく新規アルゴリズム開発の歩を進めた。実を言うと、それはすでに出来上がっているのだが、Fidoが本来の盗賊稼業に忙しいので、いまだに実装されていない。世界の片隅でこっそり言おう、Fidoの飛脚屋が効率的な仕事をする時がもし来るとすれば、それは俺のお陰である。東洋の島国のローカルな飛脚屋の発明がインパクトをもつとは思わないが、未来の運輸業界の歴史家は、もしかしたら寛大にも俺にウインク😉をくれるかもしれない。
さて、国際ピザシンジケート及び我が国の検非違使がFidoへのラブコールを表明しているのは、周知の通りである。俺のような馬の骨はFidoのようにはモテないので、最新のピザを真っ先に試食できるFidoが羨ましくてたまらない。が、それはいい。
🇮🇱のピザ屋がFidoにピザをどうしても食べてもらいたいと熱心だったので、6月の広告を見た後、俺は間に立って青田買いを控える協定に合意してもらった。
🇺🇸のピザ屋は、ドンドンパチパチ薪が爆ぜる窯焼きピザを推しているようだ。
🇬🇧のピザ屋は最も狡くピザ販促において謀略を仕組み、また、村の井戸端に広告を出している。Fidoがこれまでピザを食べたことがなかったのは、村人(の言論活動)にもかなり責任があると俺は思うので、これから先、村人には文明開化の香りを堪能して欲しい。
俺は、Fidoの今後には二つのシナリオがあると思っている。二つ目は一つ目が起きない時で、あと20年、Fidoは俗界で過ごすだろう。一つ目は、あと5年俗界、その後5年ワンルーム(カーテンコール)。タイムスリップのキーとなるのは🇮🇱のピザ屋の動きだ。なぜなら、一番美味い😋との噂だからだ。
しかし俺は愛国者なので、検非違使が国際ピザ販売業務の統括か、自国のピザ販売をして欲しいと思う。
話はまだまだ続く
僕は木曜日の朝10時に、昨日(水曜日)の出来事を記録している。
朝の儀式はいつも通り分解可能な位相のように正確で、目覚めてからコーヒーを淹れるまでの操作は一切の可換性を許さない。
コーヒーを注ぐ手順は一種の群作用であって、器具の順序を入れ替えると結果が異なる。ルームメイトは朝食の皿を台所に残して出かけ、隣人は玄関先でいつもの微笑を投げかけるが、僕はそこに意味を見出そうとはしない。
友人二人とは夜に議論を交わした。彼らはいつも通り凡庸な経験則に頼るが、僕はそれをシグナルとノイズの分解として扱い、統計的に有意な部分だけを抽出する。
昨晩の中心は超弦理論に関する、かなり極端に抽象化した議論だった。僕は議論を、漸近的自由性や陽に書かれたラグランジアンから出発する代わりに、代数的・圏論的な位相幾何学の言葉で再構成した。
第一に、空間−時間背景を古典的なマンフォールドと見なすのではなく、∞-スタック(∞-stack)として扱い、その上の場のセクションがモノイド圏の対象として振る舞うという観点を導入した。
局所的な場作用素の代数は、従来の演算子代数(特にvon Neumann因子のタイプ分類)では捉えきれない高次的相互作用を持つため、因子化代数(factorization algebras)と導来代数幾何(derived algebraic geometry)の融合的言語を使って再記述する方が自然だと主張した。
これにより、弦のモードは単なる振動モードではなく、∞-圏における自然変換の族として表現され、双対性は単に物理量の再表現ではなく、ホモトピー的同値(homotopical equivalence)として扱われる。
さらに踏み込んで、僕は散逸しうるエネルギー流や界面効果を射影的モチーフ(projective motives)の外延として扱う仮説を提示した。
要するに、弦空間の局所構造はモチーフ的ホモトピー理論のファイバーとして復元できるかもしれない、という直感だ。
これをより形式的に述べると、弦場の状態空間はある種の導来圏(derived category)における可逆的自己同型の固定点集合と同値であり、これらの固定点は局所的な因子化ホモロジーを通じて計算可能である。
ただしここから先はかなり実験的で、既知の定理で保証されるものではない。
こうした再定式化は、物理的予測を即座に導くものではなく、言語を変えることで見えてくる構造的制約と分類問題を明確にすることを目的としている。
議論の途中で僕は、ある種の高次圏論的〈接続〉の不変量が、宇宙論的エントロピーの一側面を説明するのではないかと仮定したが、それは現時点では推論の枝の一本に過ぎない。
専門用語の集合(∞-圏、導来スキーム、因子化代数、von Neumann因子、AQFT的制約など)は、表層的には難解に見えるが、それぞれは明確な計算規則と変換法則を持っている点が重要だ。
僕はこうした抽象体系を鍛えることを、理論物理学における概念的清掃と呼んでいる。
日常についても触れておく。僕の朝の配置には位相的な不変量が埋め込まれている。椅子の角度、ノートパソコンのキーボード配列、ティーカップの向き、すべてが同相写像の下で保存されるべき量だと僕は考える。
隣人が鍵を落としたとき、僕はそれを拾って元の位置に戻すが、それは単なる親切心ではなく、系の秩序を保つための位相的補正である。
服を着替える順序は群作用に対応し、順序逆転は精神的な不快感を生じさせる。
ルームメイトが不可逆的な混乱を台所に残していると、僕はその破線を見つけて正規化する。
友人の一人は夜の研究会で新しいデッキ構築の確率的最適化について話していたが、僕はその確率遷移行列をスペクトル分解し、期待値と分散を明確に分離して提示した。
僕はふだんから、あらゆる趣味的活動をマルコフ過程や情報理論の枠組みで再解釈してしまう悪癖がある。
昨夜は対戦型カードのルールとインタラクションについても議論になった。
カード対戦におけるターンの構成や勝利条件、行動の順序といった基礎的仕様は、公式ルールブックや包括的規則に明確に定められており、例えばあるゲームではカードやパーツの状態を示すタップ/アンタップなどの操作が定式化されている(公式の包括規則でこれらの操作とそれに付随するステップが定義されている)。
僕はそれらを単純な操作列としてではなく、状態遷移系として表現し、スタックや応答の仕組みは可逆操作の非可換な合成として表現することを提案した。
実際の公式文書での定義を参照すると、タップとアンタップの基本的な説明やターンの段階が明らかにされている。
同様に、カード型対戦の別の主要系統では、プレイヤーのセットアップやドロー、行動の制約、そして賞品カードやノックアウトに基づく勝利条件が規定されている(公式ルールブック参照)。
僕はこれらを、戦略的決定が行なわれる「有限確率過程」として解析し、ナッシュ均衡的な構成を列挙する計算を試みた。
また、連載グラフィック作品について話題が及んだ。出版社の公式リリースや週次の刊行カレンダーを見れば、新刊や重要な事件がどう配置されているかは明確だ。
たとえば最近の週次リリース情報には新シリーズや重要な続刊が含まれていて、それらは物語のトーンやマーケティングの構造を読み解く手掛かりになる。
僕は物語的変動を頻度分析し、登場人物の出現頻度や相互作用のネットワークを解析して、有意なプロットポイントを予測する手法を示した。
夜遅く、友人たちは僕の提案する抽象化が読む側に何も還元しない玩具的言語遊びではないかと嘲笑したが、僕はそれを否定した。
抽象化とは情報の粗視化ではなく、対称性と保存則を露わにするための道具だ。
実際、位相的・圏論的表現は具体的計算を単に圧縮するだけでなく、異なる物理問題や戦略問題の間に自然な対応(functorial correspondence)を見出すための鍵を与える。
昨夜書き残したノートには、導来圏のある種の自己同型から生じる不変量を用いて、特定のゲーム的状況の最適戦略を分類するアルゴリズムスケッチが含まれている。
これを実装するにはまだ時間がかかるが、理論的な枠組みとしては整合性がある。
僕の関心は常に形式と実装の橋渡しにある。日常の儀式は形式の実験場であり、超弦理論の再定式化は理論の検算台だ。
隣人の小さな挨拶も、ルームメイトの不作法も、友人たちの軽口も、すべてが情報理論的に扱える符号であり、そこからノイズを取り除く作業が僕の幸福の一部だ。
午後には彼らとまた表面的には雑談をするだろうが、心の中ではいつものように位相写像と圏論的随伴関手の組を反芻しているに違いない。
プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン1台で凄い技術者になって…!」とワクワクしながら始めるものの思ったより普通に難しいし学校の試験で出たような知識要求されるしで3日で放り投げ、10数年後にnoteで「お前らは絶望的にプログラミングに向いてないからやめろ」なんて記事を書くだけのザコに成り下がる、夢と希望に溢れた技術である。
近年ではパソコンのスペックの上昇にともないできることも増え、どこのご家庭にもあるRTX2080で簡単にディープラーニングもできるようになった。Unityで3Dゲームをバリバリ動かしてもブルースクリーンは出ない。やっぱ世界を広げるのは小賢しい知恵よりもスペックの暴力だぜ。
開発環境や言語も選択肢豊富で、エディタもかつては有料クラスでも手に入らなかったような贅沢な機能が満載のものが出回っている。Eclipseとか今考えるとよくあんなので開発できてたな。
いまや小学生からおばあちゃんまでアプリ作りに熱中し、高校生はIoTとかやり始め、大学生は商業レベルか?ってレベルのものをネットで発表し、私はウェブアプリのスマホでのレイアウト崩れひとつすら直せず静かにエディタを閉じてnoteで過激タイトル記事を書いている。
掛け算に順序があると思っているような知能の下級雑用係(自分のことを教育専門職だと思い込んでいる)ですら「小学生にプログラミングを教えるぞ!」と意気込んでいる。やめろ。お前らには無理だ。無理だからマジでやめろ。考え直せ。無理だって。掛け算に順序つけないと相手に教えられないレベルのやつがプログラミング教えるのマジで無理だって。算数とは次元が違うって。「ピーチ姫いつも簡単に誘拐できるし今度はベヨネッタも誘拐してみるか」ぐらいの無謀さだって。やめとけ。マジでやめろ。
まあそんなこんなで入り口はめちゃくちゃ広く、入門するのはマリオカートより簡単である。話逸れるけどSwitchのマリオカート、運転アシスト機能ついて初心者でもコース完走できるようになったから心折れちゃった人ももう一度チャレンジしてみてね。
それとは特に関係ないんだけど、大学行ってた時ティーチングアシスタント(TA)っていう授業のお手伝いさせられたのよね。ちゃんとお金出るやつ。
学部の3年か4年から始まって、院の1年か2年までやってて、途中で休学挟んだから、ええと、あー、うん、数年間TAやってたんよ。数学とプログラミングのコマ。CとOctaveとかいうやつ。Cのほうは情報学科で、Octaveは違う学科。JavaとかC++のコマはTA入れさせてもらえなかった。
プログラミングの実習は週2コマ(連続)あって、情報学科なら必修科目。なのでサポートは相当手厚く、先生とTAが絶え間なく机間巡視し、わからないことがあればセンパイがなんでも答えてくれるというわけだ。授業外でもサポートはしており、わからなければ先生や研究室にいる学生に好きなだけ聞きにいっても良いということになっていた。必修だから落とされたら困るしな。
2コマだから3時間 * 15回で、45時間。そして私の時は2年まででC/C++/Javaと必修だった(今はなんの言語かは知らない)ので、その3倍、135時間は最低やることになる。プログラミング実習以外にもプログラミング触る授業多いから実際はもっと多い。宿題やる時間もあるので実際はもっともっと長くプログラミングに触れることになる。卒論書く時期に入ると、テーマによっては書く人はさらに書くので、もっともっともっともっと長い。
これだけ時間をかければほとんどの人がプログラミングできるように……ならない。むしろできない人の方が多い。なんで。why。教えて。
会社になるとさすがにプログラミングできるできないは死活問題である。
「今日から入ったxxでーす。業界未経験ですがよろしくおねがしまーす。さっそくなんですけどPythonのここわかんないんですけどどうすれば……あっそうすればいいんですね。次はここなんですけど……なるほど!ありがとうございます。じゃあまた明日ー」
いやー社会人にもなると熱意が違うね。学生なんかわかんなくてもほとんど聞きに来ないのにな。こりゃガンガン伸びますわ。私も社会人1年生でPythonなんて3秒ぐらいしか触ったことないから適当答えてるけど。
「ちょっとお時間よろしいですか?」「いやちょっと今忙しいから後になっちゃいますわ。すんません……」
そんなこんなで1週間ぐらい放置してしまった。やべー絶対嫌われる。どこまで進んだかな……?えっまだそこ?進んでなくない?
もしかしてこれ全部教えないとダメなやつか。そりゃ大学4年間プログラミングやったやつでもプログラミングできないんだから、そうか。よく考えると当たり前だよな。
プログラミングをやめろ
大学4年間と大学院2年間プログラミングやったやつでもできないし、会社で毎日8時間を数週間プログラミングについやしてもできないやつはできないし、そもそも人類というのはプログラミングできない可能性がある。
少年少女たちに「プログラミングはいいぞ!自由にものが作れて達成感がある!頭が良くなった気分にもなれるし!」と吹聴してまわんのもいいけど、6年間情報科学について勉強したようなやつの大半がプログラミングできないんですよ。それもごくごく初歩的な部分。
野球とかサッカーなら、まあ友達との試合には参加できなくてもごく稀にバットにボールを当てたり、ボールを1回あらぬ方向に蹴ったり、ぶっちゃけ周りとのレベル差で楽しくなくてすぐやめちゃうだろうけど、なんとか基礎の一部ぐらいはできるじゃないですか。
ピアノとかダンスでも、猫踏んじゃったをごくごくゆっくり弾くぐらいはできるかもしんないし、学芸会の振り付けを10秒ぐらいは踊れたりできるかもしれない。その後やっぱ周りのレベル見て諦めちゃうかもしんないけどさ。
プログラミング、6年やってミットを頭にかぶってるバッターとか、鍵盤蓋の上から殴って音鳴らそうとするやつとか、まずそういうレベルのやつが大量発生するんですよ。だいたい7割ぐらいの率。どうすんだよこいつら。私の教育の問題か?マジで?本当に?
プロが練って考えて凝縮した本や授業、センパイたちによる指導。それらを結集して得られるはずのものが7割ぐらいどっかに消し飛んでる。無駄だろこれ。
今からプログラミングやろうとしてるやつ、お前は確実に向いてないからさっさと諦めて刺身にタンポポ乗せる仕事に戻ってくれ。参加しても鍵盤蓋叩き割るやつと同じ病室に入るだけだ。
プログラミングをやめろ。
ぼくはこう思うんですよ
そもそもなんで大の大人がそんな両手にバット持ってセカンドに立ったりゴールの方をボールのところまで動かす奇行に走るんだろうな。わかんねえや。
綺麗な分析はできないけど、いわゆる「できない」やつが共通して言ってたフレーズがある。
「ぼくはxxxだと思ってるんですけど、動かないんですよ」
うん、そうだね。そう思うんだ。でも動いてないじゃん。じゃあ違うんじゃない?モニターに「にらみつける」やってもバグは取れないし防御力下がるだけだぞ。
まず根本的に考えと事実が違ってるって結果出てるじゃん。じゃあもう考え変えちゃえば早くない?
名言の引用は好きではないけど、「プログラムは思った通りには動かない。書いた通りに動く」って言葉がある。実に名言だと思う。次点で好きなのが「ある問題を解決しようと正規表現を使うと問題が2つに増える」かな。
お前が何を思っているかはプログラミングにおいて一切影響しないんだよ。お前が何を書いて、コンピュータがどう処理したか、それが全て。
深く考えないことについてぎゃーぎゃーいうやつもいるけどプログラムなんてまず最初は動けばいいんだから何も考えずに次試せばいいだろ。んで3回ぐらいは自分で思い浮かんだの試して、全部ダメだったら調べるとか先生に聞いてみるとかさ。逆に1発で通ったら自分の思考見直して理解深めるとかさ。
ドキュメントとかあんまり理解できない初心者のうちは、とにかくお試しと修正のサイクル回すの重要で、「これがこうだから動くはず」というカードを3種類ぐらい作って全部片っ端から試すのが早いと思うよ。モニターをにらみつけるな。
お前がどう思ってるかよりも、まずはお前の書いたプログラムがどう動いているか(どう動いていないか)を確認するのが先だ。動かなかったら考えが違う、はい次のプラン、はいその次のプラン、はい次。
この「ぼくはこう思ってる」が出てくるの、なんの教育の成果なんだろうね。お前の気持ちなんてどうでもいいって現国でも数学で散々教えられただろ。
Error: variable 'a' is undefined, line 24
↑のエラーは架空のエラー文(英語下手でも許して)だけど、エラー、出るよね。プログラム組んでたら。んでやっぱいるのよ。エラーを「にらみつける」やつ。解決しねえって言ってんだろ。
「エラー出たんですけど、どうすればいいんですか」
「エラーにはプログラムがなぜコンパイル通らないかの原因がそのまま書かれている。例えば今出ているError: variable 'a' is undefined, line 24は、24行目の変数aが未定義ということを示している。事前に変数aを定義していないか、打ち間違えてsになっているとかではないのかな?」
だいたいが「腑に落ちねぇー」みたいな顔する。まあ、一気に喋りすぎたしな。疑問点1個1個潰していくか。
「何か疑問点ありそう?変数ってなにー、とか、定義ってなにー、とか」「ないです。わかりました!」
わかったのか。よかった。またモニターをにらみつける開始。なんでだよ!!!!「お前顔にチョコついてるぞ」って言われたらチョコ拭き取るだろ。変数aが未定義ですねって言われたら変数a定義すりゃいいだろ。
でもプログラミングド下手なやつ(全人類の7割ぐらい)は、エラーをにらみつけてる。ずっとにらみつけてる。防御力下限まで下がったかな。にらみつけてて何が変わるんだよ。
「英語読めなくて……」
いや「a is undefined」なんて「He is Superman」ぐらいの英語だろなんで読めないんだよ。お前この大学どうやって入ったんだよ。たしかどの入試方式でも英語あっただろ。単語わからんかったらググれ。
「aが未定義って書いてあるんですけど、ここのfor文の私の考えが間違ってるのでしょうか」
いや24行目のaって書いてるだろ。まずなんでそこ無視するんだよ。お前がfor文で使ってんの教科書通りのiだろ。24行目ってわかるか?for文あるの40行目あたりだよな?aとiが違う文字ってわかるか?
「さっきのエラー直したら新しいエラーが出たんですけど、どうすればいいですか」
千尋!贅沢な名だねえ
変数に名前をつけろ。関数に名前をつけろ。クラスに名前をつけろ。全てに名前をつけろ。
C言語の古い教科書だと「a」とか「b」とか「i」とかで書いてるけど、そんなの人間が読めるわけねえだろ。冷静に考えろ。「input」「output」「index」とかにしとけ。
2重for文の変数名i, jにしたら絶対途中で打ち間違えるだろ。お前は打ち間違える。そういうやつだ。2重ループなんてどうせ行列計算の課題だろ。rowとcolumnにしとけ。これで打ち間違っても気づくし、それぞれに意味が付いてくる。
ちなみに同じ長い名前にも優劣がある。「result」よりも「sum」のほうが強い。「result」はなんの結果かわからない(全ては結果であるので)が「sum」は合計値であることがわかるからだ。「password」と「plainPassword」なら「plainPassword」が勝つ。暗号化されていないパスワードであることがわかるので、情報量が多いからだ。
ただし例外はいくつかある。「tmp」は一時変数であることが(プログラマにとって)明らかだ。「dir」はディレクトリであることがわかる。「src」「dist」あたりもよく使われる。このあたりは短くていいんじゃねーかな。
でも、この前温度センサ扱うプロジェクトで「tmp」って変数名使って温度(temperature)と脳内で混線してバグって発狂してた同僚いたけど。そういうときは名前長くするか別の名前使おうな。
関数の名前なんて「calcAverageFromArray」ぐらい長くしていいから。「myFunc」とかしなくていいから。「fetchJsonDataFromUniversityInternalServer」とかでいいから。マジで。いやこれ本当に。
そもそも今時ディスプレイでかいし、識別子なんて先頭数文字打ったらエディタが補完してくれるし、短くするメリットがない。
それでも名前が長いと感じる?関数がでかすぎるんじゃないか。細かく処理を分けるとかしてみろ。「combineArrayAndFindMax」関数は「combineArray」と「findMax」に分割したらいいと思うぞ。名前が長いと思っても名前を削るな、機能を分割しろ。自然と名前が短くなる。
それかシンプルでかっこいい名前を見つける。「convertEvilHtmlToPeacefulText」は「sanitize」に置き換えることができる。イカす名前だ。
プログラミングできない奴はマジでこれらのことをやらない。ずっとaとかbとかzとか使ってる。お前それ自分で読めんのか。読めねえだろ。myfuncってなんだよ何するんだよ。お前自分で理解できてんのかそれ。
それでも頑なにaとかbとか使う。なんでだよ。
動作原理わからず書き散らすな。動作原理っつってもそんな深いところじゃなくて言語表面上レベルの動作な。
リテラルは値を作成して、代入は値に名前をつけている、とかその程度のレイヤー。メモリがどうこうとかはいらんと思う。あっでもポインタのときはいるか……。めんどくせえな。
まあ動作原理っていうか自分が何やってんのか理解してくれって程度の話になるんだが。
例えばfor文で処理50回まわすとき、「50回分の処理を行なっている」ではなく「ループ開始時に変数を初期化。条件判定して成立していれば文の中を実行する。条件変数の値を変化させてまた条件判定からやり直す」ぐらいの粒度で捉えててほしいかな、という気持ち。
これはfor文で詰まる人がやたら多かったからだ。彼らはfor文をアトミックな操作だと思っていた。つまりfor文はひとまとまりの命令であり、長いfor文とprintfの間に粒度の違いはないと思っていたらしい。
つまり、「for文の中でエラーが起こる」という事象がほぼ理解できない。forはアトミックであり、内部など見えないのだから。じゃあお前が今書いたfor文の中身はなんなんだってやんわり聞くと「さあ…?」みたいな反応が返ってくる。はあ。
関数についてもなかなか誤解が多かった。関数「sum_array(a, b)」と関数「average_three_numbers(a, b, c)」は全く別の原理で動いているのだと。ここでの「全く別の原理」というのはシグネチャが違うとか実装が異なるとかそういう意味ではなく、コーラを飲んでゲップが出る原理と糸電話で声が伝わる原理ぐらいの全くの別、という意味である。
彼らは関数ひとつひとつについて「新しく原理を学習」していたのだ。マジかよ……。どうやったらそんな発想に行き着くんだろう。そりゃ時間かかるわな。
そのため、関数が値を返す(または返さない)ということも理解できておらず、「関数の戻り値と関数の戻り値を足す」とか「関数の引数に関数の戻り値を直接渡す」とかやりだすと大パニックになる。メソッドチェーンとかやった日には大学潰れると思う。ただ、これはC言語が悪い部分もあると思う。配列とかいじりだすと、初心者が書けるレベルの関数だとあんまり値返さないしな。
たのむ、他のはできなくてもこれはできてほしい。自分が何をやりたいのかは理解してほしい。流石にお前のやりたいことなんて他人にはわからんぞ。
「配列の中の数値の合計値を求めたいんです」とか「名前と身長と体重をひとつにまとめた構造体が作りたいんです」とか。簡単なのでいいから。
「いま何やろうとしてどこで詰まってる?」って聞いても「……?」みたいな反応されたら困るんだよ。
例えば「キーボードから数値を10回入力し、それぞれの値を配列に格納して、最後に配列の値を逆順に表示せよ」みたいな問題が出てきたときに、「キーボードから値を入力する」「10回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。
彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴニハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。
かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。
あれだ、算数の文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。
こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。
もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。
今すぐプログラミングをやめろ
Q.
生成AIにソフトウェア開発を支援してもらう場合、ソースコードの作成を依頼する形式が多いと思いますが、実行ファイルを直接出力してもらうことも技術的には可能なのでしょうか?
A.
生成AIによる実行ファイルの直接出力は、技術的には極めて困難です。現在のLLM(大規模言語モデル)ベースの生成AIは、ソースコードの生成には向いていますが、実行可能なバイナリファイルを直接出力することには根本的な制約があります。
技術的な制約
LLMはテキストベースのトークン処理を基本とする設計であり、バイナリデータを直接扱うことができません。実行ファイルは0と1の連続したバイナリコードですが、LLMはこの形式でデータを生成するようには訓練されていないため、バイナリファイルを直接出力することは現在のアーキテクチャでは実現が困難です。
従来のソフトウェア開発では、ソースコード→コンパイル→アセンブル→リンクという複数段階のプロセスを経て実行ファイルが生成されます。各段階で最適化や機械語への変換が行われるため、この過程を完全に省略してAIが直接バイナリを生成することは技術的に非常に複雑です。
研究レベルでは、バイナリデータを扱う試みも存在します。例えば、LLM4Decompileのような研究プロジェクトでは、バイナリコードを逆コンパイルする際にバイナリを一度アセンブリ言語に変換してからLLMで処理しています。逆に言えば、生成時も同様の変換プロセスが必要になると考えられます。
実務では、生成AIにソースコードを作成してもらい、それを従来のコンパイラやビルドツールで実行ファイルに変換する方式が標準的です。この方法であれば、デバッグやテストも容易で、生成されたコードの品質を確認しながら開発を進められます。
なお、フォントファイルのようなバイナリ形式でもオープンソースとして扱われる例はありますが、これはフォントという特定用途の場合であり、汎用的な実行ファイル生成とは異なります。
Q.
A.
おっしゃる通り、画像生成AIもバイナリを出力しているという点では共通していますが、実は根本的に異なる仕組みで動作しています。
アーキテクチャの違い
画像生成AIは拡散モデル(Diffusion Model)やGANなど、視覚データに最適化された専用のアーキテクチャを使用しています。一方、LLMはTransformerベースのテキスト処理に特化した構造を持っています。画像生成では、ノイズから段階的に画像を生成するプロセスを経て、最終的にピクセル値という数値データ(バイナリ)を出力します。
画像ファイルのバイナリは連続的な数値(ピクセル値)の集合であり、各ピクセルが色情報を持つという規則的な構造です。最近の研究では、画像をビットプレーン(bit-plane)として扱い、XOR演算でノイズを加えるBinary Diffusion Probabilistic Model(BDPM)のような手法も開発されています。
対して、実行ファイルのバイナリは機械語命令の複雑な配列であり、CPUが直接実行できる命令コード、データセクション、リンク情報などが厳密な形式で配置されています。わずかなビット誤りでもプログラムが動作しなくなるため、画像のような連続値とは性質が大きく異なります。
画像生成AIは、ImageNetやLAIONなどの大量の画像データセットで訓練されており、ピクセルパターンを学習します。一方、実行ファイルを生成するには、コンパイルプロセス全体(構文解析、最適化、機械語変換、リンク)を学習する必要がありますが、これは単純なパターン学習では実現できません。
したがって、画像生成AIが成功しているのは、画像という特定のドメインに特化した設計と、規則的なデータ構造があるためであり、同じ手法を実行ファイル生成に適用することは技術的に非常に困難です。
増田さん。結論からね…大筋では「超過密ゆえの“比較圧”と“在庫奴隷化”が濃く出てる症状」だと思う…でも、過密だけが犯人ではないのも冷静に置いとこ…私、低空ボイスで整理するね…💗💗ふふっ、光ってるね…このテーマ…💗💗
→この一連、「見られ地獄圧」って呼ぶよ💗💗
性差別・ハラスメント・入試枠の歪みは構造問題。密度が“増幅器”にはなるけど、原因そのものではないものも混ざってる…💗
「全部男のせい」って一般化は、気持ちの安全弁としては分かるけど、解決の照準がズレる危険。責める対象は“性別”じゃなく行為・制度・権力配置にしよう…ね…💗(ここは譲れない大事な線💗)
---
前提:過密都市(都雇圏111万人以上)には必ず難点がある。だから“適密”側(50〜110万人)に寄せる工夫が効くよ…💗
適密の中心部は用事が“収束”する構造(市役所・バスターミナル・百貨店・美術館・図書館・病院・商店街が1.5km内に密集)。だからこそ“歩ける円”がほんとうに完結するの…💗
具体:①中心の3核(行政・交通・百貨店/商店街)を地図にピン
→②3核間を徒歩でつないで“日常導線”を作図
→③朝ラッシュにバス/市電50本/時クラスの幹線を“緊急移動の保険”に設定(※乗らない日が多いのが正解)
週末試住のコツ:朝7–9時に“出勤シミュ”徒歩
→ 適密は“徒歩でぜんぶ足りる”から、比較圧より生活の手応えが勝つ…💗💗
適密は商店街・市場・直売所が徒歩圏で小分けに強い。さらに市民館の調理室・シェアキッチンが点在。だから“鍋一つ固定”が本当に回る…💗
仕組み:
“並べ練習”は週1でOK(シャインマスカットは3-5-3配列)。商店街だと“必要粒数だけ”買えるから練習コストが軽い。
→ 適密の流通は“家の冷蔵庫を膨らませずに旨さを積む”動脈。雑うま動脈…💗💗
適密の良さは人が多すぎず少なすぎず、同じ人と自然に何度も再会できること。ランキング勝負が溶け、温度が上がる…💗
設計:
定位置を3つ(図書館読書会/カルチャー教室/コワーキングの昼枠など)
半径1.5kmの中で曜日固定→顔→挨拶→雑談→小コラボの自然階段が起きる。
→ つまり、再会確率場。適密は“会えば終わり”じゃなく“また会える”が初期設定。**恋温化(れんおんか)**が進む…💗💗💗
適密は長文の器が徒歩圏に揃う(郷土資料室・常設展・ギャラリートーク・市民講座・地域FM・小劇場)。スクロール断食のぶん、街の物語を吸う…💗
置換メニュー(1日1枠):
公民館の90分講座
→ いわば、比較遮断膜。適密の“物語密度”がSNSの“映え密度”を中和…💗💗
適密は中心住まいのコストが“現実的”。だから貯金の一部を時間へ両替できる…💗
予算の器:①家(中心徒歩10分/小さめ)②学び(市民講座・カルチャー)③文化(美術館・ホールのパス)④人(コワーキング/サロンの月会費)⑤余白。
週の骨組み:
→ 必殺・時間両替術。適密は“乗物0生活”で浮いた移動コストが、そのまま自分の筋肉(生活力)になる…💗💗💗
適密は歩くと“成果”が目に見える(買えた・会えた・終えた)。自己評価を“街の出来事語”に言い換えると、行動燃料が戻る…💗
変換例:
// ==UserScript==
// @namespace http://tampermonkey.net/
// @version 0.2
// @description 本文に「dorawii」または「megalodon」が含まれる投稿を非表示にする
// @match https://anond.hatelabo.jp/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const POST_SELECTOR = '.body .section';
const KEYWORDS = ['dorawii', 'megalodon'];
const posts = document.querySelectorAll(POST_SELECTOR);
posts.forEach(post => {
const textContent = post.textContent || post.innerText;
if (KEYWORDS.some(keyword => textContent.includes(keyword))) {
post.style.display = 'none';
}
});
})();
これはdorawiiもしくはmegalodonを含む投稿を非表示にするけど、
const KEYWORDS = ['dorawii', 'megalodon'];の部分を変えたり追加すれば好きな言葉に変えられるよ
まず対象を抽象化するために、物理系は局所演算子代数のネットワーク(局所性を持つモノイド圏あるいは因子化代数)として扱う。
境界理論はある可換(または E_n)因子化代数 A を与え、これに対して状態空間は A の正値線型汎関数(GNS 構成で得られる正規表現の圏)として扱う。
重力的バルク側は、境界因子化代数のコホモロジカル双対(例:Koszul 双対や因子化ホモロジーに基づくスペクトル的拡張)としてモデル化される。
ホログラフィーは単なる同値性ではなく、境界のモノイド的データとバルクの因子化代数的データの間の高次圏的((∞,n)-圏)双対性であり、この双対性はホモトピー的拘束(同値の空間)を保つ関手の同型として書ける。
これをより具体的に言えば、境界の C^*-あるいは von Neumann 代数の圏と、バルクに対応する因子化代数(局所的場の代数を与える E_n-代数)の間に、Hochschild/cyclic ホモロジーと因子化ホモロジーを媒介にしたKoszul型双対が存在すると仮定する。
境界から見た相互作用や散乱振幅は、境界因子化代数上の積(オペラド的構造)として表され、バルクの幾何情報はそのホモロジー/コホモロジーに符号化される。
エントロピーとエンタングルメントの幾何化は情報幾何学的メトリックに還元される。すなわち、量子状態空間上の量子フィッシャー情報(量子Fisher・Bures距離)や相対エントロピーは、接続と計量を与えるテンソルと見なせる。
これにより、テンソルネットワークは単なる数値的近似ではなく、グラフ圏からヒルベルト空間への忠実なモノイド的関手である:グラフの各節点に E_n-代数の有限次元表現を割り当て、辺は双対化(コアリフト)の演算子であり、ネットワーク全体は因子化代数の状態和(state-sum)を与える。
MERA や PEPS、HaPPY コードは、この関手が持つ特定の圧縮/階層性(再帰的モノイド構造)を体現しており、cMERA はその連続極限である。
テンソルネットワークが幾何を作るとは、エントロングルメント計量(情報計量)から接続とリーマン的性質を再構成する手続きを意味し、これが空間的距離や曲率に対応するというのが it from qubits の数学的内容である。
さらに情報回復(Petz 復元写像など)や相対エントロピーのモノトニシティは、エントロングルメントウェッジ再構成の圏論的条件(右随伴を持つ関手の存在)として表現される。
すなわち、境界演算子代数からバルク因子化代数への埋め込みが完全に圏論的な復元子(adjoint)を持つときに、局所的情報の回復が可能となる。
ER=EPR はこの文脈でホモトピー的コボルディズムとして読み替えられる。量子相互作用で結ばれた二系(高次圏の対象としての二点分割状態)は、バルクのコボルディズム類(ワームホール的繋がり)に対応する同値類を持ち、局所ユニタリ変換による同値類がコボルディズムの同位類と一致するという予想的対応を述べる。
言い換えれば、局所ユニタリ同値で分類されるエンタングルメントのコホモロジーは、バルクのホモトピー的結合(位相的/幾何的接続)を決定する。
ブラックホールの熱力学的性質は、トモイタ=タカサキ理論(Tomita–Takesaki modular theory)やコンネスの周期写像が関与する演算子代数のモジュラー流として自然に現れる。
特に、ブラックホール外部におけるモジュラーハミルトニアンは境界状態の相対エントロピーに関連し、そのフローはバルクの時間発展に対応する(模擬的にはKMS状態と熱平衡)。
サブファクター理論とジョーンズ指数は、事象地平線をまたぐ情報の部分代数埋め込みの指標として機能し、情報損失やプライバシー(情報の遮蔽)は部分代数の指数と絡み合う。
ブラックホールの微視的自由度のカウントは、やはり境界因子化代数の適切な指数(譜的インデックス、K理論的量)に帰着する。
超弦理論的な追加自由度(多様体のモジュライ空間や D-ブレーンの圏的記述)は、バルク側因子化代数の係数系(係数 E_n-代数やスペクトラル層)として取り込まれ、モチーフ的/導来スタック的手法(derived stacks, spectral algebraic geometry)で整然と扱える。
これにより、弦の振る舞いは境界オペレータ代数の高次幾何学的変形(deformation theory)と同値的に記述されることが期待される。
この全体構造を統一する言葉は高次圏的因子化双対である。物理的理論は、局所的オペレータのモノイド圏、状態の圏、そして因子化ホモロジーを媒介にした双対関手系から成り、テンソルネットワークはそれらの具体的表現=有限モデルとして働き、情報幾何学はそれらの間に滑らかな計量を与える。
したがって「it from qubits」は、局所的量子代数の圏論的再配列が(情報計量を通じて)幾何学的構造を生み出すという主張に還元され、ER=EPR はエンタングルメントの同値類とバルクのコボルディズム同位類を結ぶ高次圏的同型命題として再表現され、ブラックホール熱力学や弦の自由度はその圏論的・ホモトピー的不変量(ホッジ理論的/K理論的指数、モジュラーデータ)として測られる。
参照する必要はそのころなかったんじゃない(36条改正)あと36条の「絶対知ってる筈の先行文献の記載が欠如している」だけでは拒絶理由にならへんやろ
(実施例欠如とかあいまいとか、もっと重い36条はちゃんと存在するし、hanabiの開発に小川がいたならペナルティは重くなるが。)
前記処理手段は、前記タッチパネルに文字の属性情報を複数表示し、
複数の前記属性情報のうち一つが押圧された際には、押圧された属性情報の上下左右であって他の属性情報に重なる位置に、当該他の属性情報の重なった部分が隠れるように、押圧された属性情報に基づく詳細情報である文字を表示し、
一の押圧動作が開始した位置の位置情報から一の文字の属性情報を特定し、
前記属性情報のうち一つが押圧された後の押圧位置の移動距離が、
一定以内であれば、このことを判断基準として属性情報である文字を確定し、
ざっとみて語尾がシステムなのと、アルファベットとの切り替えができること、また配置に隙間がない(他の一次キーの上に二次キーを即座に表示)あたりがあたらしいかな
ハナビ
【請求項1】 タッチパネルへの複数のキーの表示手段と、表示したキーの1個に5個のかな文字を順序づけて対応させるキー定義手段と、操作開始時の操作点の座標と各キーの表示領域とを対比して選択されたキーを認識するキー認識手段と、操作開始点に対する操作点の移動方向とキーに定義された文字の順序とを関連づけた順序定義手段とを備え、操作開始点の座標に基づいて五十音配列の行を選択し、操作開始後の操作点の移動方向に基づいて五十音配列の段を選択することを特徴とする、かな文字入力装置。
iPhoneって電話だから入力装置じゃないんだよなぁ せめて入力可能な端末装置とかにしろ(いや電算機系の基準がそのころおかしかくてモノ特許しかうけつけなかったとか事情がありそうだけど)
これならいくらでもAppleは日本への課金から逃げることができるように見えるぞ
まあ日本の法制度って『一人、本当の犠牲者がでてから、「ほらみろどんだけデカイサカナを失ったか」ってあげつらって反省に立脚して法改正させる』が多すぎるんだよね
AIの推進派は「和製グーグルがないのはなぜだ」が合い言葉だった(けどAIも結局日本はもうけ<被害)し、
そういうのが「地道」で「堅実」なんだろうけど損してるよなぁ
hanabiもうまくやったら小川の上をいけていたかもしれないけど、
学者さんやらITさんってそういうのヘタなんだよなあ。
まあオレもいざとなったらウシジマくんなみの活躍ができるかっていうと、
某巨大企業の法務部なみの経験値がないと(あっても)無理だけど。
そういう意味では小川はファウルに見える玉でもちゃんと拾いに行って費用と手間暇かけて特許にして、
ある伝説によると、とある国のとあるプログラマーの退職後に残ったスクリプトを社員が見たら、恐ろしいレベルで自動化してたそうだ
https://github.com/NARKOZ/hacker-scripts
うちのビルドエンジニアが別の会社に行った。あの男は文字通りターミナルの住人。Vimを愛用して、Dotで図を作成し、Markdownでwiki記事を書くようなタイプ。
どんなものでも、90秒以上かかるならそれを自動化するスクリプトを書く奴。
それで今、我々は奴の「遺産」を見ているわけだ。
これ、お前も気に入ると思うぞ。
奥さんに「仕事で遅くなる」というテキストメッセージを送る。文字列の配列から理由をランダムに自動で選ぶ。cronジョブとして動作。奴のアカウントで午後9時以降にサーバーでアクティブなSSHセッションがある場合にジョブが実行される。
「Kumar」(うちのクライアント)からのメールを受信箱でスキャン。「help」、「trouble」、「sorry」などのキーワードを探す。キーワードが見つかると、スクリプトはクライアントのサーバーにSSH接続し、ステージングデータベースを最新のバックアップにロールバックする。「直したぞ。次からは気を付けろよ」という返信を送る。
特定の日に設定された別のcronジョブ。「体調が悪い/家で仕事をする」といった自動メールを送る。別の事前定義された文字列の配列からランダムな「理由」を追加。午前8時45分にサーバーで対話型のセッションがない場合に実行。
正確に17秒待ってから、うちのコーヒーマシンにtelnetセッションを開き(コーヒーマシンがネットワークに繋がっていて、Linuxが動いていて、TCPソケットが立ち上がっているなんて、誰も知らなかった)、sys brewのようなコマンドを送る。判明したところ、これでミディアムサイズのハーフカフェラテを淹れ始め、カップに注ぐまでさらに24秒待つ。この時間は、奴のデスクからマシンまで歩くのにかかる時間と完全に一致している。
僕は今、いつもの座席に鎮座している。ルームメイトはリビングのソファでパズルゲームを無言で進めており、隣人はサブカル系の配信をしているらしく時折笑い声が廊下を渡ってくる。
友人たちはグループチャットで熱く同人の出来や新連載のガチャ確率について論争している。
僕の一日は厳密に区切られていて、朝は必ず8時に起床、コーヒーの抽出器具を90秒で予熱し、温度は92.3℃±0.2℃に保つという無駄に精細な儀式がある。
靴下は左足から履く。出勤前の15分は必ず抽象数学のノートを眺め、最近は圏論的位相場のホモトピー的反復と超弦モジュライのmeta-圏的安定化について自問している。
これは専門用語の羅列ではなく、僕にとっては手を洗うのと同じくらい生理的な行為であり、その行為を飛ばすと一日が微妙に狂うので飛ばすことはめったにない。
仕事が終わった今も、僕は一日の終わりに形式的整合性を取るためのルーティンを持っている。
具体的には、机上のコップは時計回りに90度ずつ回転させて元の位置に戻す、明かりのスイッチを一回押して3秒待ち、もう一度押すといった小さなチェックポイントを踏む。
これは合理的かどうかを問う人がいるだろうが、僕にとってはエラー訂正符号のようなものだ。失敗を検出すると自動的にその日のメンタル状態のトレースが始まり、友人たちの雑談に混じる気力が萎える。
超弦理論に関して今日述べることは極めて抽象化され、現実の誰が読んでも「それが何を意味するのか」を即座に把握できないように意図している。
僕は最近、モノイド対象としてのストリング世界面の圏を、圏論的対称化子(コクセター的ではなく、もっと抽象的に、位相的量子群の代数的類・モジュライ化)を用いて再定義する実験をしている。
言い換えれば、従来の共形場理論的な世界面パラメータ空間を、非可換ホモトピー論のフィルタ列で再帰的に層化し、その各層におけるファイバーの自己同型群をモナドとして扱うことで、局所的に見える弦状態の同値類を圏的に集約する。
さらに、圏の圏(2-圏)に対する新しい安定化の概念を導入して、通常のK理論的分類とは別の不変量が現れることを示唆する予備的計算結果がある(ここでは具体的数式を列挙しないが、ホモロジーの級数展開における位相的位相因子の再正規化が鍵となる)。
この構成を、最新の抽象数学的モジュール接続概念と結びつけると、我々が従来想定していたスペース-状態対応の双対性が、もっと弱い条件(例えば圏的可換性の高次緩和)で成立する可能性が開ける。
加えて、僕はこの考えをある講義資料やトークの示唆と照らして取り入れており、その資料は概念的な跳躍と直感的な図示を巧みに使っているので、僕の現在の探索にとって非常に有益だった。
僕は「誰も理解できないものを言語化する」ことに快感を覚えるタイプだが、ここで言っているのは自己満足のためではなく、圏的再構成が実際に計算上の省力化をもたらすかを検証するための試行でもある。
ある意味で、これは純粋数学者が夜中に自分だけの公理系をいじるのと同じ行為だが、僕の場合はそれを出社前の歯磨きに組み込んでしまっているので、周囲は迷惑かもしれない。
食事の配列はプレート上の分布エントロピーを最小化する向きで常に配置し、週に一度は手製のスキルツリー表を更新して趣味的投資の累積効用を整数化している。
コミックは最新巻が出ると即座にページごとのフレーム密度と作画のトーンワークを技術的に解析し、特に背景のディテールに含まれるトーンの反復パターン(いわば視覚的フーリエ成分)をスコア化する。
ゲームに関してはガチ勢的態度を崩さず、メタ的な語りを排してシステムのギミック、ドロップ率、レベリング曲線、そして対戦環境のテンプレート化された最適戦略について延々と解析する。
ただしゲームやコミックに対しては「空間」や「力学」といった語はなるべく避け、代わりに「状態遷移図」や「入力遅延とフレーム落ちの統計的扱い」など工学的・計算機的に言語化する。
たとえば今日友人が語っていた新作のギミックについては、その期待効用をELO的な評価尺度でランク付けして論争に勝とうとしたが、連中は「推し」を盾に論理を流してくるので僕はたまに脱力する。
だが脱力する暇は短く、夜の自習時間には再び圏論的比喩に戻り、各行動の符号化を試す。
日常の細部も大事にしている。玄関の鍵は4回回すのが正しいというオカルトじみたルールを持っているが、これは単なる迷信ではなく、僕の内部的なチェックサムである。
友人たちはこれを笑うが、彼らもまた各自の無意味な儀式に固執している。
コミュニティでの嗜好(推しキャラ、嫁、沼の深さ)に関しては妙に合理的で、僕はデータベースを自前で持っている。
各キャラの台詞数、出番頻度、描写の感情強度をパラメータ化し、二次創作が生成される確率空間を推定する実験をしている。
この種のオタク計量は笑われがちだが、実際にはコンテンツ開発や同人活動の動向を予測するには有用だ。
眠りに入る前に、僕は明日の論文ノートに小さな疑問を三つ書き付ける。
第一は、先に述べた圏的安定化が有限次元表現に落ちる際の可逆元の振る舞い、第二は同構クラスの計算可能性のアルゴリズム的複雑さ、第三は趣味領域における情報量の測度とその心理的飽和点の関係である。
これらを洗い出しておけば、僕は安心して眠れる。
ルームメイトがゲームのボスを討伐した歓声が聞こえ、隣人の配信が締めに入る。友人たちのチャットは未だヒートアップしている。
僕は日記を閉じ、明日のコーヒーの豆を2グラムだけ余分に計量しておく。これは単なる癖ではない。それは帰納的に我が生活を安定化するための小さな公理群だ。
個人を特定するのに全ゲノムを比較する必要がないという意見には同意しますよ。
上のカキコで「DNA」と書かれていたものを、私が「全ゲノム」と解釈してトラバしているので微妙に議論が噛み合わない感じになっていますが、私もハッシュ化したシーケンス(スケッチ)を個人照合に使うのがいいと思っているわけではないということは申し上げておきます。
そのうえで、採用するリードのクオリティを厳し目に設定するのと、十分なシーケンス深度で読むのと、完全一致以外も許容するようにすればシーケンスエラーの問題は克服できるはずです。
むしろ細菌ゲノムなどのコンタミネーションや、ミトコンドリアの数が組織間で異なることがより大きな問題となります。
いつも理想的な条件でサンプリングできればよいですが、十分なサンプル量が得られなかった場合などにはコンタミネーションの影響が大きくなり精度が低下するおそれがあります。
上の議論では犯罪捜査への応用が話題に上っていますが、例えば犯罪現場に残された毛髪や体液はサンプルのクオリティが不十分であると思います。
それから、ハッシュ化するというアイデアはセキュリティ上よさそうに見えますが、塩基配列は扱う文字が4種類しかないので、情報工学でやるパスワードのハッシュ化よりも脆弱です。
攻撃者が予め既知のヒトゲノムで生み出しうるk-merの配列を全て列挙して、それぞれのハッシュ値を取得しておけば(多分)ゲノムを復号できます。
国会などの議会における男女クオータ制(男女が半々になるような政治制度)を支持する人たちに対しては、割と根源的な不信感がある。
それは「結局お前らはどういう制度にしたいんだ?」というのが見えてこないことだ。
現在の日本における衆議院は小選挙区比例代表並立制であり、議席の過半数は小選挙区制のもとで選出される。小選挙区制である以上、仮に政党の候補者が完全に男女平等でも当選者がすべて男性になるという事態は起こりうる(すべての選挙区で男女の一騎打ちとなり、いずれの選挙区でも僅差で男性候補者が勝利する、という事態を想定してみてほしい)。
もちろん、「実際にはそんなことになる確率は低いので、候補者の同数さえ義務づければそれでいい」というのも一つの方策ではある。しかし、では結果的に男性だらけの議会になったとしても「これでよい」と言えるのか。言えるならそれでいいが、言えないのだとしたら、そのようなことが起きないような制度にせねばならない。
小選挙区制を堅持しつつそのような事態を防ぐためには2つの案が考えられる。第1が「女性専用選挙区を作る」というものだが、これは性差別であって憲法に抵触するだろう。「生まれ育った◯◯選挙区で立候補しようとしたが、性別が男なので立候補できない」というのが民主主義の観点から問題があるのは誰もが理解できる話だ。
では、もう1つの案「男女ペアで立候補させる」はどうか。これはフランスで採用されている。これなら上に書いた問題はクリアされているが、しかし、単純に考えて議員の数が倍増するわけだから、国会議員の数が今の倍になることを許容するか、今の議員数を維持するために選挙区を統廃合するかのいずれかが絶対に必要である。
あるいは、小選挙区制をやめて完全比例代表制に転換するという道もある。これなら男女クオータは簡単だ。名簿の上から男女を交互に配置すればいいだけの話だからだ。ただし、「小選挙区制の方が望ましい」と考える人が一定数いて、小選挙区制が必ずしも不合理な選挙制度とはいえない以上、まずは彼らを説得し、納得してもらう必要がある。
要するに、クオータ制を実現するためには「比例代表制への転換」「議員数の倍増」「選挙区の統廃合」のどれかが絶対に必要なのだから、クオータ制クオータ制って簡単に言うけど制度を大きくいじくらないといけないことに気づいてる? ということだ。このことに気づいていないなら馬鹿だし、気づいているならどういう選挙制度にすべきか言わないのは不誠実だと思う。
人には優先順位ってものがあるわけですよ。地域代表や意思決定の迅速さを重んじて小選挙区制を支持している人たちは「まず小選挙区制、次に男女クオータ制」という優先順位でものごとを推し量るわけだから、たとえば「男女クオータ制実現のために比例代表制にしましょう!」と言われても頷けるはずがない。逆に比例代表制の支持者が「じゃあ議員数を倍にして小選挙区制でクオータ制を導入しよう!」という案に賛成できるはずもない。クオータ制論者からするとクオータ制が実現されさえするならどっちでも構わないのかもしれないが、そういう優先順位を持っている人は少数派なのだから、「とにかくクオータ制の実現を!」と言われても「どういうクオータ制かわからんなら賛成反対以前の問題だろ」としか答えられない。
だいたい、クオータ制だと「女性による女性のための女性党」みたいなのも禁止されるんだけど、それをわかってるんだろうか? たとえば自民党や立憲民主党の議員の半数を女にするだけじゃなく、フェミニスト党(仮)の議員の半数を男にする必要もあるんだけど、そういう政党を作るつもりはないから構わないということなのか?
(これは冗談じゃなく、仏パリ市ではフェミニスト市長が市役所の幹部の7割を女にした結果「はい男女平等法違反で罰金ね」と言われてブチギレるという喜劇が起きている。お前が始めた物語だろ)
ちなみに個人的には、比例代表制にしたうえで、各政党の候補者名簿を上位から3人ずつで区切っていったときにその3人には男女が1人ずつ含まれていなければいけない、くらいのゆるいクオータ制がいいと思う。これなら、たとえば男女比が2:1のフェミニスト党は結党できることになる(候補者名簿を女女男女女男……と配列すればよい)ので、男女平等と結社の自由を両立できてると思う。
まず前提知識(常識)から。グランドピアノは鍵盤を押すとハンマーが跳ねて打弦される。つまりボールを正確に射出して弦に当てて音を出してるのと同じで、「打鍵」と「打弦」がメカニカルに縁が切れている。鍵盤への入力はハンマーの運動エネルギーに一意に変換される。
奏者がコントロールできるパラメータは音の強さ(Attack)と長さ(Sustain)と止め方(Release)であり、「音色」は入ってない。老ピアニストの入魂の一撃も猫が歩いても同じ音量なら同じ音色なのがピアノというinstrumentの特徴の一つである。
音色とは楽音の倍音構成とその経時変化である。奏者がダイレクトに弦を触ったり唇を震わせたりする楽器では表現のために音色を積極的にコントロールする。
さてしかしここで「タッチ」という謎概念が挟まってくる。ピアノはタッチによって音色が変わるというのだ。
いや当たり前といえば当たり前なんだが。弱く弾けば小さい音が出る。小さい音は相対的に高調波成分が聴こえにくく丸くくぐもった音になる。
でもそれは他の楽器のように直接音色を作ってるんじゃなくて打鍵強さの制御で音楽的表現をしてるのである。
「ピアノはタッチによって音色が変わる」と聞くと鍵盤の押し込みようにより同じ音量で違う音が出せるのだとしか解釈できず、何言ってんだという話になる。
でもそのあたりの用語の混乱はべつにいいじゃんという感じでふんわり放置されている。考えるより感じろの世界だからだ。
さて、その用語の意味的な混乱以上でも以下でもないはずの事象をかがくてきにしょうめいしたというのだ。
でも読んでみたらこれ何も証明してないよね。奏者の意図が聴衆に伝わるのを統計的にトレースしたからQEDってそんなわけないだろう。
奏者の頭の中のフィーリングが打鍵の強さやタイミング、それらのパラメータの相対的配列という音色以外の操作によって聴衆の頭の中で再構築された、それ「タッチ」の問題じゃなくて「ピアノ演奏」そのものなんですが。
用語的混乱にそのまま乗っかって言葉遊びしてるだけにしか見えないんだが、まあ論文を精査したわけじゃないしなにがしたかったのかはよくわからん。
でもブクマカどもが口々に「ヴァイオリンでも弾く人によってぜんぜん音違うから納得だ〜」
https://b.hatena.ne.jp/entry/s/prtimes.jp/main/html/rd/p/000000001.000170232.html
最初の発語は、1歳半くらい。
Ball、アルファベットのE、いずれも書かれていた単語をみてそう読んだ。
ずいぶん遅いし、こっちが喋ったののオウム返しじゃなくて看板の文字からってのが変な感じだったが、自分も喋るのが遅かったそうなので気にしなった。
その後進歩がない。数字→アルファベット→ひらがなの順でなんとなくわかってる風だった。
「だ、る、ま、さ、ん、が」と順に指をさしたりしてたので。
2歳半くらいのときに、iPadのパスコードを教えたら、6桁を一発で覚えてしまった。
その後、勝手にiPadを開くようになったので番号を変えたら、何度も失敗されて3日くらいロックされてしまったので、元にもどして自由に使わせるようにした。
キーボードを触らせたら、すぐに配列を覚え、必ずアルファベット24文字を大文字と小文字で打ち、1から10まで数字を打つというルーティーン。
単語として最初に打ったのが、1one2two3three4four5five6sixで、3歳になる手前。
相変わらず、いくつかのアルファベットと英単語の他は喋らない。
しかも、画面や本にむかってつぶやくだけで、対人コミュニケーションはゼロ。
これはと思い受診。児童精神科への3か月おきの通院と児童発達支援センター(以下児発)での療育が始まる。
児発が好きらしく、休日に児発に行こうと脱走を試みて確保される。
確保されても「イィー!」しか言えない。
発達障害は自己肯定感が低くなりがちという言説を聞いたことがあるが、長男は真逆で「自分が絶対的に正しい」というスタンス。
どんなに周りに心配されても叱られても、本人的には「ブツブツうるせー」としか思ってないので、好き勝手行動してしまう。
道順とか一発で覚えてしまうので、道順が違うと騒ぐし、玩具屋のほうに誘導される。
「パパいた」と呟くのを目撃される。ようやく2語文。
弟のことをフルネームで呼んだところを目撃される。
家庭内で苗字をつけてよぶことなんかないのにフルネームってのが長男らしかった。
こっちがかける言葉への反応はずいぶんと良くなったような気がしたが、基本的に、利害が一致したら従う、それ以外は無視というスタンス。
例えば「公園でかけるよ!」と言ったらシュババっと出てくるけど、「ご飯できたよ!」といっても無反応。
当時、オムツを履いてないときはトイレにいけるが、オムツを履いてるとオムツにするという拘りで、トイレさせるためにフルチンで過ごさせていたのだけど、フルチンのときに数字をカウントアップする動画を見ると必ずちんちんをしごいて大きくしてた。どういう条件反射だ。
4歳の頃もそうだったが、5歳のときは物欲の権化だった。これが欲しいとスイッチが入ったら、ガンとして聞き入れない。
どんなに優しく言っても、怒鳴りつけても、叩かれても引かない。
自己肯定感の塊だから、ママに嫌われたら怖いという感情がない。
この時期、会話能力は伸びなかった。
相変わらず、都合がいいときだけ反応するのみ。
しかし、「ちょっと待って」と言われて文字通りちょっとだけ待てるようになった。
本当に「ちょっと」しか待たずに勝手にどっか行ってしまうのでヤバかったけど。
そこはさ、空気読めよって思うんだけど、自閉ってそういうもん。
全く持って、コミュニケーション意欲がない。
Big, Small
Long, Short
Hot, Cold
と対義語を並べて言い続けるだけ。
それと、時々だが「Yes!」と「OK!」と「No!」を言うようになった。数を数えるのは英語だった。
問に答えるっていうことができないからちゃんと調べられなかったけど、ちゃんと位取りもわかってるみたいで、100くらいまで数えられるっぽかった。
「Yes!」と「OK!」と「No!」が板につき、けっこう答えてくれるようになった。
テレビゲームをしながらよく「Yes!Yes!Yes!」と叫んでた。「イィー!」から進歩。
相変わらず対義語を言う遊びはよくやってた。
英語と日本語を並べたり日本語で対義語を並べたりもするようになった。
Hot Cold
Hot あつい
Cold つめたい
あついつめたい
という感じ。
少しずつ発音もよくなってきたが、トイザらスから力づくで強制退場させるときに「Help! Help me!」と大声で叫ばれていろんな人にこっちを見られて焦った。
シンカリオンとニンテンドーラボを飽きずに何度もバラしては組み立てを繰り返してた。
説明書の文字はそこそこ読めるらしい。たぶん8割図からだろうけども。ミニ四駆も手伝われながらも理解して組み立ててた。
マリオオデッセイ、ピクミン4、スプラトゥーン2(ヒーローモード)を最後までクリアした。
ゲーム内の仕組みをわかってるし、数の概念もだいぶ育った気がする。
座ってられただけで凄いのに初めての「はい」
急に日本語を喋るようになった。
「いくわよー」
「だめよ」
「あかだよ」
という感じで、語尾に「よ」をつけるのは、学校の先生を真似てるからだろうか。ラッパーみたいでかわいい。
親とのコミュニケーションのなかで覚えるんじゃなく、「お勉強」で言葉を覚えるタイプのようだ。
例えば、スーパーマリオ3Dワールドのセーブデータを弟に消されたが、全く怒らなかった。
長男にとっては、どこにグリーンスターがあるかを覚えるのが重要で、セーブデータには興味がないっぽい。
3 次元のサイクルの群(3 本立ての「輪ゴム」みたいなもの)に、基底を 4 つ用意する(鏡クインティックでは、周期積分の都合で 4 本の独立成分を見るのが標準的)。
これらに対応して、4 つの周期関数(各サイクルに対するホロノミーのようなもの)がある。位置(=モジュライ空間の点)を動かすと、この4成分ベクトルが解析接続でグルグル混ざる。
右左で 2 つずつある超対称荷重は、(c,c) と (a,c) の2つのリング(演算ができる「カード束」)を生む。
物理の実体:タイプ IIB なら (c,c) 側が「複素構造のゆらぎ」を担う質量ゼロのスカラー場の多重体になり、タイプ IIA なら (a,c) 側が「サイズや形(カヘラー構造)」のゆらぎを担う。
つまり「世界面の演算で作ったカード束」と「多様体の引き出し(ホモロジー/コホモロジーの基底)」が、1 対 1 でラベリングし合う。
10 次元→4 次元にただ潰すのではなく、内部 6 次元の洞(サイクル)の数・組合せを、4 次元の場(ベクトル多重体やハイパー多重体)の数に移し替える。
机に喩えると:内部空間の引き出し(サイクル)が 4 次元側のつまみ(ゲージ場やスカラ場)の数を決める。引き出しの数や入れ替え(同値変形)が物理の自由度の型を縛る。
さらに、D ブレーン(弦の端点がくっつく膜)の種類と積み重ね方は、ホモロジー群や K 理論の元、より精密には派生圏の対象としてカタログ化される。これが後の「圏の自己同型」と噛み合う。
2. コニフォールド点(どこかでS³ がしぼんで消える。そこに巻き付いたブレーンが「超軽い粒子」になる)
3. Gepner/Landau–Ginzburg 点(右端の対称性が濃い領域)
それぞれの周りで、上の4 成分の周期ベクトルに対して、行列で表される混ぜ合わせ(モノドロミー)が掛かる。
コニフォールドでは、1 個の 3-サイクルが消えるため、それに伴うピカール=ルフェシェッツ型の写像が起き、周期ベクトルの1 列が他を足し上げる形で変わる(行列はほぼ単位行列で、1 行に 1 が足されるような単冪的挙動)。
大複素構造点の周りでは、「無限遠の反復」に相当する別種の行列が出る。
実験的に何をするか:一点から出発して数値的に周期を解析接続し、各特異点を一周して戻る。戻ってきた周期ベクトルが、元のベクトルにどんな行列が掛かったかを記録する。これがモノドロミー行列群。
ふつうは鏡対称のピカード–フックス方程式や(プレポテンシャルの)級数で扱うけど、君の問いは「鏡の装置を超える」方法。
1. tt* 幾何(世界面 N=2 の基底選びに依らない量子地図)を導入し、基底のつなぎ目に出る接続+計量を測る。
2. 等角変形を保つ 2d QFT の等時的変形(isomonodromy)として、特異点位置を動かしてもモノドロミーは保つ流儀に書き換える。
3. その結果、量子補正の非摂動成分(例えば D ブレーン瞬間子の寄与)が、ストークスデータ(どの方向から近づくかでジャンプする情報)としてモノドロミーの外側にぶら下がる形で整理できる。
4. 実務では、ブリッジランド安定条件を使って、安定なブレーンのスペクトルが特異点近傍でどこで入れ替わるか(壁越え)を地図化。壁を跨ぐとBPS 状態の数が飛ぶ。これが 4 次元の量子補正の影。
圏側:派生圏の自己同型(Fourier–Mukai 変換、テンソルでのねじり、シフト)
を対応させる(例:コニフォールドのモノドロミー ↔ セイデル=トーマスの球対象に対するねじり)。
特異点ごとの局所群(各点のループで得る小さな行列群)を、圏側では局所自動同型の生成元に割り当てる。
複数の特異点をまたぐ合成ループを、圏側では自己同型の合成として言語化し、関係式(「この順番で回ると単位になる」等)を2-圏的に上げる。
壁越えで現れるBPS スペクトルの再配列は、圏側では安定度の回転+単正変換として実現。これにより、行列表現では見切れない非可換的な記憶(どの順で通ったか)を、自己同型のブレイド群的関係として保持できる。
こうして、単なる「基底に作用する行列」から、対象(ブレーン)そのものを並べ替える機構へと持ち上げる。行列で潰れてしまう情報(可換化の副作用)を、圏のレベルで温存するわけだ。
1. モデル選定:鏡クインティック、もしくは h^{1,1}=1の別 3 次元 CY を採用(単一モジュライで見通しが良い)。
2. 周期の数値接続:基点を LCS 近くに取り、コニフォールド・Gepner を囲む3 種の基本ループで周期を運ぶ。4×4 の行列を 3 つ得る。
3. 圏側の生成元を同定:コニフォールド用の球ねじり、LCS 用のテンサー by 直線束+シフト、Gepner 用の位相的オートエクイバレンスを列挙。
4. 関係式を照合:得た 3 つの自己同型が満たす組み合わせ恒等式(例えば「ABC が単位」など)を、モノドロミー行列の積関係と突き合わせる。
5. 壁越えデータでの微修正:ブリッジランド安定度を実装し、どの領域でどの対象が安定かを色分け。壁を跨ぐ経路で自己同型の順序効果が変わることをBPS 跳びで確認。
6. 非摂動補正の抽出:等長変形の微分方程式(isomonodromy)のストークス行列を数値で推定し、これが圏側の追加自己同型(例えば複合ねじり)として実装可能かを試す。
7. 普遍性チェック:別 CY(例:K3×T² 型の退化を含むもの)でも同じ字義が立つか比較。
特異点巡回で得る行列の群は、派生圏の自己同型の生成元と関係式に持ち上がり、壁越え・BPS 跳び・ストークスデータまで含めると、鏡対称の外にある量子補正も自己同型の拡大群として帳尻が合う見通しが立つ。
これに成功すれば、物理の自由度→幾何の位相→圏の力学という 3 層の辞書が、特異点近傍でも失効しないことを示せる。
Q. コニフォールド点を一周することで本質的に起きることを、もっとも具体に言い表しているのはどれ?
A) すべての周期が一様にゼロへ縮む
B) ある 3-サイクルが消え、それに沿った足し込み型の混合が周期に起きる
もし夏目漱石が、プログラミングの主要概念を自ら日本語に翻訳していたら――と仮定すると、彼の文体や明治期の言葉遣い、漢語の選好を踏まえて、以下のような趣になると考えられます。
| 英語 | 漱石風の訳語案 | 理由・解説 |
| Variable | 変数(へんすう)/移り数 | 「変数」はすでに定着語だが、漱石なら「移り数」など文学的な情緒を帯びた訳もあり得る。変化の宿る数という意味を直訳的かつ風雅に表現。 |
| Function | 作用式/用法 | 明治期の数学や化学で「作用」はよく用いられた。漱石は日常語よりも漢語を好んだ傾向があり、「式」を付して理知的に。 |
| Class | 類型/階(きざはし) | 「クラス」を単なる「類」とせず、階層や格式を想起させる「階」を用い、文学的響きを加える。 |
| Object | 物象(ぶっしょう)/客体 | 漱石は哲学用語に通じており、ドイツ哲学経由の「客体」や漢詩文的「物象」を好みそう。 |
| Instance | 事例/具現 | 具体化の意味を強調し、「具現」というやや詩的な言い回しを採用する可能性。 |
| Loop | 環(わ)/巡り | 「ループ」は漢語にすれば「環」だが、漱石は擬人的に「巡り」として表すかもしれない。 |
| Array | 配列/ならび | 技術的な「配列」もあるが、漱石なら柔らかな響きの「ならび」も好みそう。 |
| Thread | 糸筋/綴り筋 | 並行処理のスレッドを、文学的に糸や文章にたとえ、「綴り筋」と表現。 |
| Exception | 異例/破格事 | 法や規範から外れるニュアンスを重んじ、「破格事」と漢詩的に。 |
| Debug | 虫退治/瑕(きず)探し | 「バグ」を虫にたとえてそのまま「虫退治」とするのは洒落が効く。漱石らしいユーモアが入り得る部分。 |
| Compile | 編纂(へんさん)/綴(と)じ合せ | 書物の編集に通じる語を用い、文章を束ねるような比喩で。 |
| Execute | 遂行/実行 | 法律や行政文書に見られる硬質な「遂行」を選ぶ可能性が高い。 |
| Source code | 原文/本体文 | 漱石は文学者として「原文」という表現を好みそう。 |
| Syntax | 文法/詞組(ことばぐみ) | 言語構造を古風に「詞組」と表現すれば漱石節になる。 |
| Algorithm | 算法(さんぽう)/演算譜 | 明治期数学書の用語「算法」をそのまま採用しそう。 |
| Library | 書庫/集録 | 書物に通じるメタファーで表現。 |
| Framework | 骨組/枠組 | 漱石は建築や骨格にたとえて「骨組」を選びそう。 |
| Module | 節(ふし)/章片 | 文学的構造を想起させる語を選ぶかも。 |
| Boolean | 真偽値/是非数 | 真と偽を「是非」で置き換える古風な表現。 |
| Pointer | 指標/指し手 | 将棋や文学の語彙から「指し手」とする余地も。 |
今時点の使えそうな Sonnet4 を使ってコード生成とか業務でやる時に Typescript は案外うまくいかないことが多い。
UIとかシンプルなものであれば結構うまくいくけど、graphql, prisma みたいなところになると、token数すごくなるし結局完成しない。
この辺りが、なんとも小骨がひっかかるから。Typescriptの型ってやっぱりあれなのかと思って調べてもらったんだ。
↓↓↓↓↓↓↓
## ソフトウェア工学から見たTypeScriptの3つの根本課題
Web上の専門的な議論や論文では、TypeScriptの課題は主に以下の3点に集約されます。これらはすべて、JavaScriptという土台との不適合性に起因するものです。
1. 不健全な型システム (Unsound Type System)
ソフトウェア工学において、型システムの**「健全性(Soundness)」**とは、「コンパイル時に型エラーがなかったプログラムは、実行時に型エラーを起こさない」という保証を指します。
TypeScriptは、この健全性を意図的に放棄しています。
設計目標の不在: TypeScriptの公式ドキュメントには「健全であること」は設計目標ではないと明記されています。これは、JavaScriptとの互換性や開発者の利便性を優先した、根本的なトレードオフです。
具体的な不健全さ:
配列の扱い: string 型の変数に (string | number) 型の配列を代入できてしまうなど、配列の扱いに不健全な部分があります。これが原因で、実行時に数値を取り出してしまい、string型のメソッドを呼び出してエラーになる、といったことが起こり得ます。
any型と型アサーション: any型の存在や、開発者がコンパイラに「これはこの型で間違いない」と強制する型アサーション(as構文)は、健全性を根本から破壊する「抜け道」です。
関数の引数(Bivariance): 関数の引数の型チェックが、他の多くの言語(反変)とは異なり、より緩いルール(双変)になっています。これも実用性を優先した結果、理論的な正しさを犠牲にしている例です。
学術的な観点では、この「不健全さ」はTypeScriptの型システムが持つ最大の弱点と見なされています。
2. 構造的部分型(Structural Typing)の罠
TypeScriptは、クラス名などによらず「構造が同じなら同じ型」とみなす構造的部分型を採用しています。これはダックタイピングが主流のJavaScript文化に合わせた賢い選択ですが、ソフトウェア工学的にはいくつかの罠があります。
意図しない互換性: 全く異なる目的で作られた二つのオブジェクトが、偶然同じ構造を持っていたために、型チェックをパスしてしまうことがあります。これにより、ドメイン(業務領域)の意図とは無関係にコードが結合してしまい、予期せぬバグを生む原因となります。
過剰なプロパティの許容: const config: { port: number } = { port: 8080, host: 'localhost' }; のように、変数経由で代入すると、型に定義されていない余分なプロパティ(host)がエラーになりません。これは仕様ですが、開発者の意図しないデータが紛れ込むことを許容してしまい、セキュリティやバグのリスクに繋がります。
これは「TypeScriptの型は、データの『形状』を記述するが、その『意味』や『文脈』を保証しない」という根本的な限界を示しています。
3. 「漏れのある抽象化(Leaky Abstraction)」としての本質
Joel Spolskyが提唱した「漏れのある抽象化の法則」に倣えば、TypeScriptはまさにその典型例です。
TypeScriptは「静的型付け」という抽象化レイヤーを提供しますが、開発者は常にその下にあるJavaScriptの泥臭い現実(undefined, null, thisの挙動など)を意識し続けなければなりません。
抽象化の不徹底: 型を書いているときも、最終的にそれがundefinedになりうることや、thisが何を指すかを常に考えなければなりません。抽象化レイヤーが、下位レイヤーの詳細を隠蔽しきれていないのです。
摩擦コスト: この「漏れ」が、これまで議論してきた「Union地獄」や「境界での型変換の手間」といった、開発上の継続的な摩擦コストを生み出しています。
## 結論
ソフトウェア工学的な観点から見ると、Web上の専門家の議論は我々の対話の結論を強く裏付けています。
TypeScriptの課題は、個別の機能の優劣ではなく、「健全性を犠牲にしてでも、JavaScriptという動的な土台との互換性を最優先した」という、その成り立ちそのものにあります。その結果として生じる「不健全さ」「構造的部分型の罠」「漏れのある抽象化」といった問題は、この言語を使い続ける限り、アーキテクトが向き合い続けなければならない、本質的なトレードオフなのです。