タグ

Programmingに関するmasa8aurumのブックマーク (255)

  • なぜ、SOLIDのリスコフ置換の原則(LSP)はもはや不要なのか?

    はじめに LSPは長くSOLIDの一角として扱われてきましたが、現在の設計実務から見ると、もはや独立した柱として強く意識する必要はかなり薄れています。これはLSPが間違っていたという話ではなく、LSPが効いていた時代の前提そのものが崩れた、という話です。バーバラ・リスコフとジャネット・ウィングの1994年論文は、上位型で証明できる性質が下位型でも成り立つという 行動的型付け を定式化しましたし、ロバート・C・マーチンも1990年代にはこれをC++のパブリック継承を律する原則として説明していました。 ただし、ここで一つ引っかかる点があります。もし現代の設計がそもそも継承を中心にしていないなら、その継承を安全に使うための原則を、なおも五大原則の一つとして抱え続ける意味はどこまであるのでしょうか。継承を主役から降ろした言語、継承を持ちつつも言語機能で危険を制御する方向へ進んだ言語、いずれもLSP

    なぜ、SOLIDのリスコフ置換の原則(LSP)はもはや不要なのか?
    masa8aurum
    masa8aurum 2026/03/14
    “LSPが実務で目立っていた理由は、結局のところ継承を前提にしていたからです。長方形と正方形の例は典型ですが、” “LSPは現在では「万人向けの基礎教養」ではなく、「ある設計条件で再登場する専門注意事項」”
  • 新しくプログラミング言語を作る際に文字列型をどうするべきか

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

    新しくプログラミング言語を作る際に文字列型をどうするべきか
    masa8aurum
    masa8aurum 2025/12/04
    各言語で文字をどう扱っているかについての詳しい話。読む
  • TypeScriptをバックエンドで使わない理由

    この記事は、下記の記事への反論というよりも、「 TypeScript でバックエンドを書く」というテーマについて、別の観点から整理したい という意図で書いています。 元記事は、文脈が分かりづらいと感じたため、自分なりにバックエンドの特性にフォーカスして再整理しています。 最近、以下の記事を見かけました。 記事の内容は、バックエンドも TypeScript で書きましょうという内容です。 たしかに、TypeScript は現代のフロントエンド開発においてデファクトスタンダードとも言えます。型安全性、補完の効きやすさ、そしてJavaScriptとの互換性。いずれも実務で使うには非常に便利です。フロントエンドではもはや必須とも言える存在です。 ただ、バックエンドという文脈においては、TypeScriptを選ばない理由もあるよね? と感じました。 TypeScript を否定したい訳ではなく、「あ

    TypeScriptをバックエンドで使わない理由
    masa8aurum
    masa8aurum 2025/05/27
    「色んな言語がある理由」にも一部通じる話
  • JSON Lisp

    masa8aurum
    masa8aurum 2025/04/21
    JSONでLispと同じことをやる試み。Lispと異なりカンマを打つ必要があるので、実用はちょっとだるいかも。for, whileとかどうやる想定だろう
  • Reddit - The heart of the internet

    masa8aurum
    masa8aurum 2025/04/21
    languages built on JSON
  • 「読みやすいコード」を依存グラフで考える

    はじめに こんにちは、ダイニーの ogino です。 この記事では、コードの読みやすさを比較判断するために役立つメンタルモデルを紹介します。 記事を読むと、「このコードは良い / 悪い」という感覚が身につき、その理由を自信を持って説明できるようになるはずです。 コードの読みやすさとは何か コードを読む時には大抵、何か特定の目的があります。例えば、 API /foo にリクエストした時の動作を知りたい、ある画面で発生しているバグの原因を知りたい、などです。 この時、コードベースの隅から隅まで読み尽くすのではなく、特定のポイントから出発して関連する箇所を芋蔓式に辿りながら読むはずです。 人が一度に理解して覚えておける情報量には限界があるので、辿らなければいけないコード量が少ないほど当然読みやすくなります。 つまり、ある目的に関連するコードの箇所が局所的かつ明示的であるほどコードは読みやすいと

    「読みやすいコード」を依存グラフで考える
  • それでも10進小数をデフォルトにすることは意味がある - kmizuの日記

    改めて(?)か昔からあるのか不明ですが、10進小数を言語のデフォルトにすべきかどうかという議論が一部で行われています。私自身、特にプログラミング教育を最近やっている立ち場もあって、10進小数を言語のデフォルトにすることに賛成の立ち場です。ただ、正直言ってこれに大して「反対する」側は何が焦点になっているかについて「ずれている」と思わざるをえないです。まずは、直近で見かけたWindyMeltさんのブログ記事より。 blog.3qe.us ちなみにこれはCOBOLかそうではないか、という軸が問題になっているのではなく、浮動小数点型を利用するか、それともBigDecimalのような十進演算のために用意された型を利用するか、という軸の問題であって、しかもそれも正確な軸の取りかたではない。 というのも、BigDecimalでカバーされない問題があるのだ。例えば、BigDecimal型を利用しても(1

    それでも10進小数をデフォルトにすることは意味がある - kmizuの日記
  • ちいさな Web ブラウザを作ってみよう

    ちいさな Web ブラウザを作ってみよう
  • これから流行る言語 | 雑記帳

    新言語にできることはまだあるかい なんとかWIMPS 最近(1ヶ月くらい前)、こんな記事が出ました: 新しいプログラミング言語が出てこない(新しく出てた言語を追記) – きしだのHatena Kotlin, TypeScript, Rust, Swift以降にみんなが話題にするような新しい言語が出てこない、それはなぜか、みたいな趣旨です。客観的に見れば「新しい言語は常に出続けている」わけですが、「みんなが話題にするような」というのが多分曲者なんでしょうね。 例え話をすると、新しい若木は常に生えてきているんだけど、大木に成長するには時間がかかるので、大木にしか興味のない人には「この8年間で新しい大木は登場していない」と判断してしまうのかもしれません。 まあ私としても、Web (HTTP) APIを書く言語とか、JSON色付け係が使う言語はもう出揃ってしまったのかもしれないという気はしなくもな

  • Google、超高速に評価可能でポータブルな式言語「Common Expression Language」(CEL)発表

    Google、超高速に評価可能でポータブルな式言語「Common Expression Language」(CEL)発表 式言語とは一般に、プログラミング言語の一部やネットワークなどの構成ファイル、テンプレートファイルなどの中で、簡易な式やロジック、ポリシーなどを記述する際に使われる言語のことです。 こうした用途では、さまざまなプラットフォームに対応する移植性、起動時やプログラムの実行中に評価されることがあることから高速に評価が完了すること、安全に評価が実行できること、用途に応じて拡張しやすいこと、などが求められます。 CELは超高速に評価、ポータブル、サブセットサポート CELは正にこうした要件に対応した式言語となっており、Googleは次のような特徴があるとしています。 ナノ秒からマイクロ秒程度の高速な評価に最適化されている C++JavaGoでサポートされるスタックによるポータブ

    Google、超高速に評価可能でポータブルな式言語「Common Expression Language」(CEL)発表
  • じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル

    先日こういうツイートが流れてきた。 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。— 遊撃部長F/S&RWAs (@fstora) 2024年6月6日 Q:なぜ金融系では未だにCOBOLが使われるんですか? A:お手元にExcelがありましたら任意のセルに「=4.8-4.7-0.1」って入れてみてください。 普段我々がゴリゴリ馬車馬のように使っているソフトウェアでよく利用されている浮動小数点型、すなわちfloatやdoubleなどは特定の算術に弱いことが知られている。というかもうこの手の話題はあまりに拡散されてしまったので、なぜかネット民はみんな知っている基礎教養、三毛別羆事件とかデーモンコアみたいな感じになっている。 ちなみにこれはCOBOLかそうではないか、という軸が問題になっ

    じゃあ何すか、COBOL以外では4.8 - 4.7 - 0.1できないってことっすか / ScalaとSpireで安心安全な計算ライフを実現しよう - Lambdaカクテル
  • decimal型(十進小数)に夢を見ている輩が多すぎる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    decimal型(十進小数)に夢を見ている輩が多すぎる - Qiita
    masa8aurum
    masa8aurum 2024/06/09
    ・Javaの場合、演算時に MathContext 等の引数を指定すると、指定した精度で計算
  • そもそもプログラミング経験自体無い人がRustを学ぶとき,どんな順序が良いのか

    遠きに行くには必ず邇きよりす.高きに登るには必ず卑きよりす.何事にも順序というものがあります.Rust の学習もそうです. そこで,前提知識がほぼ無い状態から Rust を学ぶときに,どんな順序が良いのか,考えてみました. コンパイル時と実行時の区別. Rust を学ぶとき,何がコンパイル時に起こって何が実行時に起こるか分からないと困ります.特に,型検査と借用検査がコンパイル時に行われることは,それらの基的な規則を知る際に大切です.そこで,最初に Hello world を書く時点で,コンパイル→実行という流れを押さえておくべきでしょう. コンパイルエラーの読み方. まずコンパイルエラーを読むという基的な姿勢を身に付けるのは大切です. 公式ドキュメントの場所. まず公式ドキュメントを読むという基的な姿勢を身に付けるのも大切です. Hello world 周辺の基文法. 例えば以下の

    そもそもプログラミング経験自体無い人がRustを学ぶとき,どんな順序が良いのか
  • Write Yourself a Scheme in 48 Hours - Wikibooks, open books for an open world

    Write Yourself a Scheme in 48 Hours is a featured book on Wikibooks because it contains substantial content, it is well-formatted, and the Wikibooks community has decided to feature it on the main page or in other places. Please continue to improve it and thanks for the great work so far! You can edit its advertisement template. This book proceeds at a very brisk pace, which might occasionally lea

    masa8aurum
    masa8aurum 2024/04/29
    HaskellでSchemeインタープリターを作る。構文を評価することが何なのかを理解できるらしい
  • PHP 連想配列 array() は単純配列に見えることもあるけど実は常に連想配列

    色々な人が色々な所で書いてるけど、割りと質的なところは気にしてなかったりするらしい。 連想配列って便利 PHPには連想配列というまあまあ便利機能がある。 機能自体はご存知かつ、活用してる人が多いだろう。 これは歴史的にはPerlから連綿と受け継いだものだ。 PHP: Arrays - Manual <?php $array = array( "foo" => "bar", "bar" => "foo", ); // as of PHP 5.4 $array = [ "foo" => "bar", "bar" => "foo", ]; ?>

    PHP 連想配列 array() は単純配列に見えることもあるけど実は常に連想配列
    masa8aurum
    masa8aurum 2024/02/26
    PHPには純粋な配列がなく連想配列しかない。“キモい挙動がかなりある” 同意。全然「初心者向けの言語」ではない。/ 型の暗黙変換がこれの元凶だと思うが、暗黙変換が嬉しかったことは一度もない
  • ちゃんと理解しておきたい、PHPには純粋な配列がなく連想配列しかないという事実。

    仕事中にPHPの配列の挙動について聞かれました。「どうだったかな」と思い出してみると、PHPの配列は少し変わった動きなので、改めてちゃんと理解しておきます。 PHPには、添字配列がない タイトルには「純粋な配列」と書きましたが、普通に「配列」というと、添字が0から順に連番で並んでいて、それぞれに対応する値が入っているものを指します。 PHPのオンラインマニュアルを見てみます。 PHP においては添字配列と連想配列の間に違いはなく、配列型は 1 つだけで、 同じ配列で整数のインデックスと文字列のインデックスを同時に使えます。 PHP: 配列 – Manual ここでは連想配列と区別するために「添字配列」という言葉が使われていますが、PHPには「純粋な配列」がないと書かれています。 純粋な配列を定義できるような・・・ PHPで、普通の配列を定義するというと、以下のようなコードになると思います。

    ちゃんと理解しておきたい、PHPには純粋な配列がなく連想配列しかないという事実。
    masa8aurum
    masa8aurum 2024/02/26
    “PHPには純粋な配列がなく連想配列しかない” / そう。これのせいでarray_filterでindexが歯抜けになったりする。ありえん仕様 https://anon-193.hatenadiary.org/entry/20091101/1257076854
  • Island Life - 型付けと変更の時定数

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ PCアップグレード米国の大学進学無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice ActingMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチェ on ハイポハイポハイポのシューリンガン

    Island Life - 型付けと変更の時定数
    masa8aurum
    masa8aurum 2024/02/11
    動的型付け言語における「動的平衡」
  • あらゆるプログラミング言語の最先端を行くScala 3のマクロ - 貳佰伍拾陸夜日記

    この記事はScala Advent Calendar 2023の11日目です. 最近, 趣味Scala 3のコードをだいぶ書いていて, マクロの使い心地のよさに感心しました. 理論的な背景も含めて, 産業界で多く使われているプログラミング言語の中では筆者の知る限りぶっちぎりに優れたマクロを備えています. 他の言語にも見習ってほしいですね. たぶん見習おうとすると処理系を作り直す羽目になりますが. この記事ではScala 3のマクロのすごいところを例を使って紹介します. マクロの実践的な例 準備 実践的な例: NamedArray – 名前でアクセスできる配列 NamedArrayのマクロ実装 記述が明瞭 メタレベルのプログラムの扱い クォートとスプライスがある パターンマッチもある 生成コードに型がつく 多段階計算に基づいている クォートとスプライスの当の意味 ネストしたスプライス ネ

    あらゆるプログラミング言語の最先端を行くScala 3のマクロ - 貳佰伍拾陸夜日記
    masa8aurum
    masa8aurum 2023/12/11
    ・クォートとスプライスで明瞭に書ける ・生成コードにも型がつく ・multi-stage programmingの理論に基づいている
  • オブジェクト指向 の検索結果 - きしだのHatena

    なんかオブジェクト指向の話が盛り上がってるので、関連記事をまとめておきます。 まずはここから。12年たちました。 Java 8が出たすぐあとくらいの記事です。 Javaでラムダ式が入って、その後は継承のできないrecord型が入ったり、パターンマッチが入ったり、クラスの定義を書かなくてもHello worldが書けるようになったりと、非オブジェクト指向な機能も出そろってます。 だいたい同じ内容ですが、3年前。 今回の発端になったのは、過剰設計のコードがオブジェクト指向的に正し… …「終わりに」を書いたのはErich Gamma そんなところにLLMです。 LLMがコードを学習して記述する仕組みをざっくり言えば、多量のコードから大小さまざまな粒度のパターンを見出してトークン化し、ユーザーのプロンプトに従って適切に並べて再現するというものです。 まさしく「全体がたくさんのデザインパターンをぴっ

    オブジェクト指向 の検索結果 - きしだのHatena
  • x=x+1がわからないのは逐次実行がわかっていないからで、記号を変えても解決にならない - きしだのHatena

    x = x + 1がわからないという話が流行ってました。 で、「=ではなく:=を使えば」とか「イミュータブルにすれば」とかいう話が出たりしてますが、問題をあとまわしにしてるように見えます。 結局のところ、逐次実行がわかっていないことが表面化している場合がほとんどではないかと。 https://speakerdeck.com/kishida/lets-code-a-process?slide=8 プログラム以外の文章は、基的にひとつの状態を示していて状態が遷移するということがありません。 推理小説なども、最終的な状態が徐々に開示されるだけともいえます。途中から読むと犯人が変わるということはないですね。もちろんそのように途中から読むと犯人が変わるような叙述トリックは可能ですが、通常はそうではないからトリックになるわけで。 つまり、x = x + 1という式は、x + 1という演算を行ってから

    x=x+1がわからないのは逐次実行がわかっていないからで、記号を変えても解決にならない - きしだのHatena
    masa8aurum
    masa8aurum 2023/11/25
    考えてみればそうか。「右辺が先に評価されて、それが左辺に代入される」だもんな / “REPLやデバッガなどで「プログラムが順に動く」ということを確認するのがいい”