タグ

ブックマーク / zenn.dev/mod_poppo (13)

  • GHC 9.10の新機能

    GHC 9.10.1-alpha1が2024年3月14日にリリースされました。正式版のリリースは4月ごろを目指しているようです(9.10.1 · Milestones · Glasgow Haskell Compiler / GHC · GitLab)。 この記事では、GHC 9.10の新機能を確認していきます。過去の類似の記事は GHC 9.2の新機能と、GHCの動向2021 GHC 8.10とGHC 9.0の新機能 GHC 9.4の新機能 GHC 9.6の新機能 GHC 9.8の新機能 です。 この記事は網羅的な紹介記事とはなっていません。是非、公式のリリースノート類も参照してください: 2.1. Version 9.10.1 — Glasgow Haskell Compiler 9.10.0.20240313 User's Guide docs/users_guide/9.10.1-

    GHC 9.10の新機能
  • UTF-8のバリデーションとモノイドと半群

    この記事はUTF-8のバリデーションとオートマトンの続きです。 前回はUTF-8のバリデーションが8状態のオートマトン (DFA) で表現できることを見ました。状態と遷移を擬似コードで書けば次のようになるでしょう: -- 8つの状態 data State = START | TAILx1 | TAILx2 | TAILx3 | A | B | C | D -- 入力バイトに応じて次の状態を返す。次の状態が該当しなかったら Nothing を返す next :: Word8 -> State -> Maybe State +----+----+-----+----+ | a0 | a1 | ... | aN | 8ビット整数列 +----+----+-----+----+ | | | v v v +----+----+-----+----+ | m0 | m1 | ... | mN | モノ

    UTF-8のバリデーションとモノイドと半群
  • JSONの小ネタと、JSONに対する拡張

    JSONは最も普及したデータ形式の一つでしょう。JSONの仕様はECMA-404やRFC 8259として標準化されています。 ECMA-404 - Ecma International RFC 8259 - The JavaScript Object Notation (JSON) Data Interchange Format 細かいネタ 文字コード RFC 8259では、外部と交換するJSONテキストはUTF-8でエンコードされなければならないということになっています。BOMは禁止です。昔のRFCではUTF-16やUTF-32も許容されていました。 ただし、キーや文字列の中身としては単独のサロゲート(例:"\uD800")は禁止されていません。JSONのキーや文字列はUnicodeスカラー値の列とは限らないのです。 UTF-8を前提とする実装にとっては、単独のサロゲート(不正なUTF-

    JSONの小ネタと、JSONに対する拡張
    igrep
    igrep 2024/01/22
    なるほど!変なsniffingとかもされるかもしれないし! "フォワードスラッシュ / がエスケープできるようになっているのは、文字列中に </script> が現れるのを回避できるようにするためのようです"
  • WasmGCを試す

    去る2023年は、WebAssemblyにGCを入れる仕様、WasmGCがChromeとFirefoxに実装された記念すべき年でした。WasmGCはコンパイラ作成者の長年の悲願であり(筆者の脳内調べ)、GCに依存する言語をWebAssembly上で動かすことを容易にします。2024年は、WasmGCがより広い環境で使えるようになることでしょう。まさにWasmGC元年と言っても過言ではありません(元年はなんぼあってもいいですからね)。 この記事は、2024年1月時点でのWasmGCの現状を、コンパイラ作成者の観点から調査したものです。筆者自身はWebAssemblyについては素人で、調べながら書いています。 概要と仕様 WasmGCの概要はChrome/V8界隈の人が書いた次の記事が参考になるでしょう: A new way to bring garbage collected program

    WasmGCを試す
  • Haskellのzip関数を一般化すると何になるか

    この記事は Haskell Advent Calendar 2023 の7日目の記事です。 zip関数について Haskellには zip 関数というものがあります。この関数は、2つのリストを受け取って、それぞれから取り出した要素を組にしたリストを返します。

    Haskellのzip関数を一般化すると何になるか
  • unsafePerformIOではじめる愉快なHaskellプログラミング

    Haskellは「入出力のためにIOモナドを使う必要があるので難しい」というイメージを持たれがちです[要出典]。この記事ではそのイメージに異を唱えることを目指します。すなわち、モナドを使わずに入出力を含むプログラミングをやってみます。 と言っても、Haskell標準の入出力関数には IO 型がついていることに変わりはありません。ですが、 unsafePerformIO という魔法の関数を使うと、IO 型を外して値を取り出すことができるのです。この記事ではこれを最大限活用します。 module System.IO.Unsafe where -- 魔法の関数 unsafePerformIO :: IO a -> a

    unsafePerformIOではじめる愉快なHaskellプログラミング
    igrep
    igrep 2023/10/05
    事実上IOを再発明する話+αって感じね
  • Haskellプロジェクトのベストプラクティス

    Haskellプロジェクトの「良い習慣」と考えられるやつをまとめてみます。あくまで私の個人的な意見です。 プロジェクト固有のPrelude Prelude に相当するモジュールをプロジェクト独自に持っておくと便利ではないか、という話をします。代替Preludeの話ではありません。 プロジェクト固有のPreludeがあると便利な理由 理由の一つは、標準 Prelude の変化です。直近では次のような変化がありました: GHC 9.4: ~ 型演算子が追加(これまでは構文だった) GHC 9.6: liftA2 が追加 GHC 9.10(見込み): foldl' が追加 もっと昔に遡ると、Semigroup((<>)) が増えるやつなどがありました。 この帰結として、 新しいGHCで名前の衝突が起きやすくなる 新しいGHCで「冗長なインポート」の警告が出やすくなる ことが言えます。これらの問題

    Haskellプロジェクトのベストプラクティス
    igrep
    igrep 2023/08/08
    base-nopreludeパッケージは使わなくていいのか。と思ってbase-nopreludeのリポジトリー見たらもうメンテされてないっぽい
  • GHC 9.6の新機能

    GHC 9.6.1が2023年3月12日にリリースされました。 GHC 9.6.1 is now available - Announcements - Haskell Community この記事では、GHC 9.6の新機能を確認していきます。過去の類似の記事は GHC 9.2の新機能と、GHCの動向2021 GHC 8.10とGHC 9.0の新機能 GHC 9.4の新機能 です。 この記事は網羅的な紹介記事とはなっていません。是非公式のリリースノート類も参照してください: 2.1. Version 9.6.1 — Glasgow Haskell Compiler 9.6.1 User's Guide Changelog for base-4.18.0.0 | Hackage GHC 9.6.x Migration Guide GHC 9.6に入る機能 JavaScriptバックエンド

    GHC 9.6の新機能
  • Haskellの環境構築2023

    この記事はHaskell Advent Calendar 2022の1日目の記事です。 この記事では、2022年12月時点のHaskellの環境構築手順を紹介します。2023年になっても通用するといいなあ。 対象とする環境 対象とする環境は以下の通りです: Unix系 macOS (Intel / Apple Silicon) Linux (x86_64 / aarch64) WSL2を含む(WSL1は不具合があった気がするので避けてください) Windows (x64) Arm系CPU搭載のコンピューターを使っている場合は、別途LLVMが必要になる場合があります。以下に当てはまる場合は、「補遺:LLVMバックエンドを使う」も読んでください: 64ビットArm(Apple Silicon Macや、Raspberry Pi OSの64ビット版など)で、GHC 9.0またはそれ以前のバージョ

    Haskellの環境構築2023
    igrep
    igrep 2022/12/01
    すばらしい。stackの注意点もちゃんと押さえてある
  • Haskellでちょっとしたスクリプトを書く

    Haskellで格的に開発する際はcabalなりstackなりでプロジェクトを作るわけですが、ファイル一つで済むような(書き捨て)スクリプトをHaskellで書きたい場合があります。 依存関係のないスクリプトであれば、普通にファイルを作って runghc/runhaskell すれば良いでしょう。しかし、Haskellには標準ライブラリー(base)以外にも「準標準」と呼べる外部のライブラリーが多数あり(例:bytestring, text, vector)、それらに明示的に依存することは runghc ではできません。 そこで使えるのが、cabal scriptやstack scriptと呼ばれる機能です。 cabal script cabal run コマンドを使うと、ファイル中に {- cabal: 形式の特殊なコメントを含むHaskellコードをその場でビルドして実行することがで

    Haskellでちょっとしたスクリプトを書く
    igrep
    igrep 2022/11/17
    cabal run 便利になったなぁ
  • GHC 9.4の新機能

    GHC 9.4.1が2022年8月7日にリリースされました(GHC 9.4.1 released — The Glasgow Haskell Compiler)。 この記事では、GHC 9.4の新機能を確認していきます。過去の類似の記事は GHC 9.2の新機能と、GHCの動向2021 GHC 8.10とGHC 9.0の新機能 です。 GHC 9.4に入る機能 ここでは筆者が独断と偏見で選んだ変更をリストしています。公式の変更リストは 2.1. Version 9.4.1 — Glasgow Haskell Compiler 9.4.1 User's Guide ソース:docs/users_guide/9.4.1-notes.rst · ghc-9.4 · Glasgow Haskell Compiler / GHC · GitLab Changelog for base-4.17.0.

    GHC 9.4の新機能
    igrep
    igrep 2022/08/14
    ありがたや
  • Haskellでの型レベルプログラミング

    Haskellでの型レベルプログラミングの解説書です。

    Haskellでの型レベルプログラミング
  • GHC 9.2の新機能と、GHCの動向2021

    Haskell Day 2021で「GHCの動向2021」というタイトルで発表しました、mod_poppoです。この記事では、発表の補足としてGHC 9.2の新機能の紹介と、 Data.List の単相化に関する補足を行います。 Haskell Day 2021の動画と筆者のスライドは、それぞれ次のリンクから参照できます: Haskell Day 2021 - YouTube GHCの動向2021 「GHCの動向」のタイトル的な元ネタ(?)は、筆者が3月にブログに書いた GHCに初めてコントリビュートした/最近のGHC動向 です。時代遅れになった記述もあると思いますが、よかったら読んでみてください。 GHC 9.2の新機能 2021年10月29日に、待望のGHC 9.2.1がリリースされました。公式の変更点は 2.1. Version 9.2.1 — Glasgow Haskell Com

    GHC 9.2の新機能と、GHCの動向2021
  • 1