この記事は「言語実装 Advent Calendar 2025」の3日目の記事です。 この記事は、新しくプログラミング言語を設計する際に文字列型をどうするべきかについて、私の持論をまとめたものです。 以前「新しくプログラミング言語を作る際に数値型をどうするべきか」という記事を書きましたが、この記事はそれの文字列版です。 推敲が足りずに同じことを何箇所かで繰り返している場合がありますが、冗長性だと思ってご容赦ください……。 【2025年12月4日 更新】small string optimization、スライスとGCの話を追加、Rubyの文言の修正、可変性と値セマンティクスの記述の整理など。完全な変更履歴はGitHubを見てください。 【2025年12月7日 更新】ケーススタディーにJava、D、Schemeを追加。JavaScript文字列のコードポイント単位のアクセスの記述を追加。Sw


そのコードはなぜそうなっているのか、AIとの対話記録によりコードのコンテキストを保存する。オープンソースのコードエディタ「Zed」が新記録機能「DeltaDB」の開発表明 オープンソースとして開発されている高速なコードエディタ「Zed」の開発元であるZed Industries社は、Zedの新機能としてAIへの指示やAIによるコード編集の内容を詳細に保存する「DeltaDB」の開発意向を表明しました。 Zedエディタは、GitHub社が主導して開発し人気のあったAtomエディタの開発者が、Atomエディタの開発終了後に新たに開発を始めたコードエディタです。Rustで開発されていることなどを主な理由として、軽量で高速な動作を大きな特徴としています。 GitコミットではAIとの対話によるコンテキストが失われてしまう 多くのコードエディタと同様に、ZedにもさまざまなAIモデルに対応したAIによ

関数型まつり以降、Unison 言語が気になっています。 最近、試しにAI用のLSPとか作ってたんですが、既存のプログラミング言語処理系にやや限界を感じています。既存言語の人間用のファイル参照とline:character の補完というインターフェースが、AIの操作単位と噛み合ってないじゃないか?という懸念です。 関数型まつりでも発表があった、関数型ドメインモデリングの Scott Wlaschin 氏いわく「副作用のない関数だけでプロジェクトを構成すれば、関数名はただの名前空間のルックアップテーブルに過ぎなくなり、その合成だけでドメインを表現できる」とし、関数を組み合わせるスタイルの Railway OrientedProgramming を提唱していました。 関数型まつりで Unison 関連の発表があったわけではないんですが、関数型言語のうち自分がほしい特性をAIに相談したら、そ

Linuxの創造主、Linus Torvalds氏が、Googleのエンジニアから提出されたRISC-V関連のコードを「ゴミ(garbage)」と一蹴し、プルリクエストを却下した。この出来事は、オープンソース界の巨頭が、品質と規律に対する揺るぎない姿勢を改めて示したものとして、大きな波紋を呼んでいる。 静寂を破った「ゴミ」発言事件が起きたのは、Linux 6.17カーネルのマージウィンドウ(新機能を取り込む期間)が閉じようとしていた2025年8月8日金曜日のことだ。GoogleのAndroidチームに所属するエンジニア、Palmer Dabbelt氏が、次期カーネル向けのRISC-Vアーキテクチャ関連の機能追加を求めるプルリクエストを提出した。 これに対し、週末にかけてTorvalds氏から返されたのは、彼の代名詞とも言える、率直かつ痛烈な拒絶の言葉だった。Linuxカーネルメーリングリ


並列モード 事前準備:Google Calendar Tasks に乱雑にメモを書き留めてる 特にやることを決めずに tmux(or zellij) で3分割で並べる メモを拾って投げ込む ログが止まってないかだけを見ている メインタスクのトークン消費を圧迫しない範囲で、他タスクの流量を調節 ApproachingUsage Limit... がでてないと、仕事してる気にならない アイデアモード 並列モードの一つを「思いつきための実験するための枠」に 「このURL/論文読んで、試しに実装して再現して」 「こういうLint プラグインがほしいんだけど作れる?」 「WebGPU でpytorch 移植できる?」 重要: 中身をまったく見てない 一通り走りきった後で、どのように成功/失敗したかを確認 うまくいったらGitリポジトリや利用単位に切り出す ゴール設定からワークフロー設計 ゴー
YAMLは人間が読みやすい、書きやすいと言われてるらしいが、JSONのほうが普通に読みやすくないか? インデントは人間に優しいという幻想を捨てよう

Programming Vehicles in Games The fundamental principles needed to get a functional vehicle in your game. From my talk at the Better Software Conference on July the 13th, 2025. Table of Contents The special case of cars Chasing the Feel: TheIterative Path to AV-Racer A Conceptual Model of VehicleSimulation The Engine The Gearbox Implementing the engine and drivetrain: From Curve to Code The engi

amazonの出したIDE「kiro」がめちゃくちゃ未来だったのでClaude Codeユーザーの人はみんな一度試してみてほしい どうもこんにちは、昨日AmazonがVS CodeベースのIDEである「kiro」をリリースしました この分野ではcursorやWindsurf、アドオンですがClaude Codeなど様々な選択肢があります そんな中であえてAmazonが出してきたIDEのコンセプトは Vibe coding ……ではなく、 Viable Code だそうです 細かい説明は公式HPを見てもらうとして、他との違いは 「仕様書駆動開発」 を明確に打ち出している点ですAIとのコーディングは難しい 特にClaude Codeを弄り倒している人なら常々感じてると思いますが、AIに適切な指示を与えて適切な作業をしてもらうのは非常に難しいです それを解決しようとみんな「sowで書いて」だっ

テキストエディタのデータ構造 Gap method Piece Table method Piece Table の構造 Piece Table の実装 Piece Table のメソッド まとめ テキストエディタのデータ構造 テキストエディタで採用されているデータ構造にはいろいろあります。 こちらの論文 Data Structures forText Sequences では各種データ構造について比較検討されています。 多くは、Gap method や Piece table method をベースにしたものが多いのではないでしょうか(図で言う最下部の中心の丸印に当たります)。最近では Rope なども有名ですね。 Gap method Gap method では、現在のカーソル位置で、テキストバッファを2つに分割し Gap を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を

この分野の声が大きい人たちと同じように、私も生成AIシステムがソフトウェア開発にどのような役割を果たすのかについて大きな関心を持っています。LLM(大規模言語モデル)の登場は、アセンブラから最初の高水準プログラミング言語への移行と同じくらい、ソフトウェア開発を大きく変えると思います。その後に開発された言語やフレームワークは、抽象化のレベルや生産性を向上させましたが、プログラミングの本質に同じレベルのインパクトを与えるものではありませんでした。しかし、LLMには最初の移行と同程度のインパクトがあると思います。しかも、単に抽象化のレベルを上げるだけでなく、「非決定的なツールでプログラミングするとはどういうことか」という問いを私たちに投げかけています。 高水準言語は、新しいレベルの抽象化をもたらしました。アセンブラを使うときには、特定のマシンの命令セットを考える必要がありました。単純な操作でさえ
tl;dr foobarhogehoge.invalidは絶対にリクエストが飛ばないのでおすすめ あらすじ 書いていたコードは、とあるミドルウェア向けに内部利用するURLを環境変数で受け取るようになっていた。普段は実際の内部のURLが書かれているのだが、テスト時には以下のようにダミーを設定していた: FOOBAR_EXTERNAL_URL="https://example.com/foobardummy" テストではこのURLを利用しないのだが、内部で環境変数のバリデーションを行っている都合上、とりあえず適当なURLを指定しなければ起動してくれないから、こうなっていた。重ねて言うが、実際はこの環境変数を利用していないのでこれでいい。 しかしこれだと、うっかり内部の様子がおかしくなったりエンジニアが狂ってしまった場合に、example.comに本当にアクセスしてしまう。なおかつ、セキュリティ
はじめに 先日「関数型まつり2025」にて「成立するElixirの再束縛(再代入)可という選択 - Speaker Deck」という内容で発表させていただいたのですが、関連して、今回、いろいろな言語における値の不変性と変数の不変性について整理したいと思います。 値の不変性と変数の不変性 まず、しばしば混同されがちな「値の不変性」と「変数の不変性」の違いについてです。 値の不変性 (Immutable Value) こちらは、一度作成された値(データ)そのものが変更できない性質を指します。不変な値を変更しようとすると、実際には元の値を変更するのではなく、変更内容を反映した新しい値が作成されます。 変数の不変性 (Immutable Variable) これは、一度値を代入された変数に、別の値を再代入できない性質を指します。多くの言語で const (JavaScript,C++) や fi

AIで日本語で指示をあたえればプログラムを作ってくれるようになって、プログラミング知識がなくても誰でもプログラムが組めるとか、プログラマが不要になるとかいう話が盛り上がってますね。 けど、実際にプログラマをやって、AIコーディングエージェントを使っていれば、プログラミング知識がなくても可能な領域というのはそんなに広くないことを感じていると思います。 たとえば、ほぼプロンプト一発で作ってもらった刺身タンポポゲームがあります。 このプロンプトはこんな感じです。 刺身にタンポポを乗せるゲームをJavaのSwingで作って。 刺身かネコが0.75秒ごとに表示されます。 刺身は、白い皿に、赤い板状の切り身が3枚のっています。 ネコは顔だけ表示されます。かわいくおねがいします。 表示のシーケンスは次のようになります。 共通の影が右から中央に0.1秒で移動します。 刺身かネコが0.5秒表示されて、0.1

プログラミングをやっていると、「関数に副作用がある」とか「副作用がない」あるいは「純粋である」という話をちょいちょい耳にする。そして、「外界の状態を読み取るけど変更はしない関数」、例えば function getTime() { return Date.now(); } のような関数に副作用があるか?みたいな議論が始まったりする。 くだらない議論だ。 何か概念を定義するときは、それが「役に立つ」場面を提示できる必要がある。「関数の副作用」を定義するときは、「関数の副作用」がわかったときに何をしたいのかをはっきりさせる必要がある。「関数のどういう側面に注目したいか」を決めずに「副作用の有無」を論じるのはナンセンスだ。 ここでは、言語処理系(コンパイラー)を実装する者の立場で、関数の副作用について論じてみたい。 一般に、「副作用がない」関数の呼び出しは、「副作用がある」関数の呼び出しに対するも
これを記事にしている 2025 年 5 月の二年ほど前 (2023-06-02) に、縁あって明治大学 情報科学科での特別講義 [1] を担当させてもらいました。 身内の評判は悪くなかったのでスライドは公開していたんですが、単にGoogle Slides を公開状態にしただけだったんですね。 [2] これではあとから参照・引用するのも難しく、ちょっともったいないかと思ったので、いまさらながら記事の形でまとめなおしておくことにしました。 一年も経てば情報が古くなってしまうコの業界です。賞味期限切れの話もあると思いますが、話のネタにでもしてもらえれば幸いです。 講義の対象と目的 この講義、目的は2つあって、まず「最新の情報科学トピックに触れる」こと。 それから、就職活動が始まる3年生がメインの対象者なので、 今後のキャリアプランとか人生指針に関するいろいろな視点を持ってもらうことです。 この

A lightweight scripting language forRust applications. About Docs Install Playground About News Docs Playground
never型とプロパティアクセスTypeScriptにはneverという型があります。先日も記事にしましたが、簡単に言うとこれは「値を持たない型」です。 never型は、あらゆる型に対してその部分型として振る舞います。例えば、never が number の部分型であることは次のコードでわかります: type T<U extends number> = {}; type A = T<string>; // stringはnumberの部分型ではないのでエラー type B = T<never>; // neverはnumberの部分型なのでコンパイルが通る さて、部分型関係と、「その型の式に対してできる操作の集合」の関係について考えましょう。あまり面白い例を思いつかなかったのでアレですが、次の型を考えます: type UserInfo = { name: string }; type D
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く