タグ

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

  • ちいさな 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

    みたいなのが挙げられます。これが話題になった時にSNSで見かける言説が「十進小数 (decimal) 型ならこういう問題はない」です。 ですが、decimal型は十進小数を正確に表現できるという話でしかなく、全ての実数を正確に表現できるわけではありません。例えば、 1.0 / 3.0 * 3.0 の計算を考えてみましょう。数学的には、これはちょうど 1.0 になるはずです。 C#の場合 C#には標準の decimal 型があります。これで 1.0 / 3.0 * 3.0 を計算してみましょう。

    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 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

    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

    …舞いモデル 第7章 オブジェクト指向モデル 第8章 形式手法 第9章 設計技法 第10章 検証技術 第11章 ソフトウェアの保守・進化 第12章 開発環境とツール 第13章 安全・安心な社会のためのソフトウェア 第14章 プロジェクト管理 これは、受託開発やパッケージを想定して作られているともいえますが、ソフトウェアが比較的小規模で単純であったときには成り立っても、いまはもうあてはまりにくくなっています。 実際には、GitHubでプルリクをベースにCI / CDをまわして常時…

    オブジェクト指向 の検索結果 - きしだの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やデバッガなどで「プログラムが順に動く」ということを確認するのがいい”
  • Javaを中心に偏見ベースでプログラミング言語の関係をまとめた - きしだのHatena

    オブジェクト指向言語の話をするときに便利なように、Javaを中心にプログラミング言語をまとめてみました。 Javaに影響与えるか、Javaから影響を受けるか、という感じですね。 Simula オブジェクト指向はここから始まったと言われています。 クラス、オブジェクト、継承、仮想関数(多態)といった、オブジェクト指向の基要素が備わっていました。 ただし、「オブジェクト指向」という言葉は生まれていません。 Smalltalk Simulaから発想を得て「オブジェクト指向」という言葉を生んだのはアラン・ケイでした。 しかし、モデルとしてはSimulaとは異なりメッセージングを主体としたものでした。また、アラン・ケイの「オブジェクト指向」はプログラミングのパラダイムだけではなく、人がコンピュータをどのように扱うかというメタファであり、ダイナブックというハードウェアやそのユーザーインタフェースを含

    Javaを中心に偏見ベースでプログラミング言語の関係をまとめた - きしだのHatena
  • 新しくプログラミング言語を作る際に数値型をどうするべきか

    この記事は、新しくプログラミング言語を設計する際に数値型をどうするべきかについて、私の持論をまとめたものです。 数の体系 JavaScript(BigInt以前)やLua(〜5.2)などは唯一の数値型が浮動小数点数型で、整数も実数も同じ「number」型で表現します。ミニマルな言語を作るのならそういう設計もアリかもしれませんが、ネイティブコンパイルも視野に入る実用的な言語を作るなら整数と実数を一緒くたにする設計はやめた方が良いと思います。 特に、JavaScriptにコンパイルする言語を作るからと言って、数値型の設計まで真似る必要はありません。 整数を浮動小数点数で表現すると、思わぬ性能低下の要因になったりします。最近(2023年2月)、次のツイートが話題になりました: これは正のゼロと負のゼロが値として区別され、正のゼロは内部的に整数扱いされるのに対し負のゼロはそうではないことによるもの

    新しくプログラミング言語を作る際に数値型をどうするべきか
  • 畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる - Lambdaカクテル

    こういうツイートが話題になっていた。 「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ— ふみ (DJ Monad) (@fumieval) 2023年5月29日 つまりScalaで言うと次のようなコードが何になるか、というものである。 val xs = Seq.empty[Int] xs.forall(_ == 42) 結論から言うと、このような関数は常にtrueを返す。 なぜだろう?その理由をこれから説明する。 ちなみに他に以下のような意見があった: 仕様による 例外を投げるべき いずれもまぁありえなくはないが、やめておいたほうが良いと思う。もし仮にfalseを返すような仕様があった場合、それは数学から乖離しているのでいずれ仕様内部で矛盾する可能性が高いし*1、最終的に

    畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる - Lambdaカクテル
    masa8aurum
    masa8aurum 2023/08/15
    ・「空集合に対するforallはtrueを返す」としないと、数学的に矛盾する。単位元(加算なら0、乗算なら1、論理積なら真、論理和なら偽)を考えるとわかる
  • 【西川善司のグラフィックスMANIAC】 格闘ゲームで話題になるロールバックの仕組みとは?攻撃が当たった次の瞬間、なかったことになる「あの現象」はなぜ起こるのか?

    【西川善司のグラフィックスMANIAC】 格闘ゲームで話題になるロールバックの仕組みとは?攻撃が当たった次の瞬間、なかったことになる「あの現象」はなぜ起こるのか?
    masa8aurum
    masa8aurum 2023/06/10
    ディレイ方式とロールバック方式
  • 雑に作って、それから作り込んで、最後にテストを書く「テストラスト」開発 - give IT a try

    (この話は最初Twitterに書こうと思ったけど、長くなるのでブログに書くことにしました) 僕はRSpecやMinitestでテストを書くのは得意ですが、常にテストファースト(TDD)で開発するとは限りません。 今業務でやってるタスクはこんなふうに進めてます。 雑に動くものを作る ↓ 見た目をきれいにする&機能を作り込む ↓ テストを書く ↓ リファクタリングする この順番で開発する理由を以下に述べます。 雑に動くものを最初に作る理由 最初は見た目とか、異常系とか、細かい仕様とかを無視して、正常系が一通り動くものを作ります。 これはこれから作ろうとしているものの認識が合っているかどうかをPO(プロダクトオーナー)に確認するためです。 実際に動く画面を見せると「こんな感じでOK」とか「ここはこういうふうにしたい」というフィードバックをもらうことができます。 また、開発者としてもコードを書きな

    雑に作って、それから作り込んで、最後にテストを書く「テストラスト」開発 - give IT a try
    masa8aurum
    masa8aurum 2023/02/16
    雑に動くものを作る→見た目をきれいにする&機能を作り込む→テストを書く→リファクタリングする
  • この10年のプログラミング言語の変化 - 西尾泰和のScrapbox

    @nishio: あ、そうか、10年前からあったけど10年間の間に勢力を拡大したケースがあるからあんまり厳しく切らない方がいいのか(TypeScriptの登場が2012年、Rustの登場が2010年だった)

    この10年のプログラミング言語の変化 - 西尾泰和のScrapbox
  • たのしいコーディングのための「CUPID」特性 - iki-iki

    当初はちょっとしたSOLID批判のつもりが、「藪を突ついて蛇を出して」しまったのですが、物事はそこから具体的で目に見えるものへと発展しました。仮に、近頃はSOLID原則が役に立たなくなっているのだとしたら、何に置き換えればよいのでしょう? あらゆるソフトウェアに通用する原則はあるのでしょうか? そもそも「原則」とは何を意味するのでしょう? 私は「仕事がたのしくなるソフトウェアならではの特性や性質がある」ということを確信しています。コードでそのような質が高まれば高まるほど、仕事もどんどんたのしくなります。しかし、何事もトレードオフですから、自分の置かれている状況をつねに考慮する必要があります。 そうした特性はたくさん存在しており、互いに重なりや関連がありますし、説明の仕方もさまざまです。ここでは私がコードで気にかけている要素を強く支えていると思える5つを選びました。選ぶ数はこれぐらいが丁度良

    たのしいコーディングのための「CUPID」特性 - iki-iki