タグ

ブックマーク / kmizu.hatenablog.com (5)

  • 自作パーザコンビネータライブラリを集めたリポジトリ mlcombinators を公開しました - kmizuの日記

    私がプログラミング言語を学ぶときには、パーザコンビネータライブラリを作る、ということはScala福岡2019の講演とかでも他のところでもよく言っていることなのですが、せっかくなので、これまで私が作ってきたミニパーザコンビネータライブラリ集をひとつのリポジトリにまとめて公開することにしてみました。もちろん、これだけでは到底実用に耐えないことは言うまでもないです。 github.com なお、mlはプログラミング言語のMLとはあまり関係なくて、multi-languagesくらいの意味です。それはともかく、このリポジトリには、私がそれらのプログラミング言語を学びたての頃(一部例外あり)にどのようにしてパーザコンビネータライブラリを組み立てたのか試行錯誤の跡が残っており、ひょっとしたらどなたかの参考になるかもしれません。 実は、これ以外にもC#とかCとかもっと色々なものについてパーザコンビネータ

    自作パーザコンビネータライブラリを集めたリポジトリ mlcombinators を公開しました - kmizuの日記
  • Scala Nativeを動かしてみた(1) - kmizuの日記

    Scala Nativeはscalaのコードを(LLVMのIRを経由して)ネイティブコードにコンパイルするAOTコンパイラ(Ahead Of Time Compiler)です。その存在については、少し前にサイトができていたことで一部で話題になっていましたが、Scala Days 2016 NYCにて正式に公開されました。現在はPre-Release段階ですが、既にサンプルコードを試せるようになっていたので、環境を構築してみました(on Mac OS)。 scala-nativeのリポジトリをcloneする $ git clone git@github.com:scala-native/scala-native.git --recursive git submoduleとしてscala/scalaを持っているので、--recursiveを付けるのを忘れないようにしましょう。 llvm(cla

    Scala Nativeを動かしてみた(1) - kmizuの日記
    tarao
    tarao 2016/05/13
  • Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記

    タイトルは煽りではありません。もちろん、Scalaを実用的に使う上では「直接」Genericsを扱えないのは困ります。しかし、記述の冗長ささえ我慢すればGenericsのほぼ全ての機能をAbstract Type Membersによって表現できます。このことを指して、GenericsはAbstract Type Membersでエンコードできると言ったりします。とりあえずコード出せやといわれそうなので、実際のコードを貼りつけてみます。 gist.github.com このコードでは、不変Listと、その上の高階関数mapとforeachをGenericsなしで構築しています。 ポイント: Genericな型 => Abstract Type Memberを持った型 Genericなメソッド => Abstract Type Memberとメソッドを持った型 関数 => Abstract T

    Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記
    tarao
    tarao 2016/01/18
  • ScalaでMLスタイルのモジュールを使ったプログラミングをする - kmizuの日記

    何はともあれ以下のコードを見てください(ちなみに複素数クラスの実装は、 d.hatena.ne.jp を参考にさせていただきました): trait Complex { type T def re(a: T): Double def im(a: T): Double def make(re: Double): T def plus(a: T, b: T): T def minus(a: T, b: T): T def multiply(a: T, b: T): T def divide(a: T, b: T): T } object Complex extends Complex { case class C(re: Double, im: Double) type T = C def re(a: T): Double = a.re def im(a: T): Double = a.im d

    ScalaでMLスタイルのモジュールを使ったプログラミングをする - kmizuの日記
    tarao
    tarao 2015/12/27
  • PEG基礎文法最速マスター - kmizuの日記

    Scala基礎文法最速マスターを書こうか迷っていたら、既にyuroyoroさんに書かれてしまったので、ちょっと違う方向で。BNFを既に知っている人は、これを読めばPEGの基礎をマスターしてPEGを書くことができるようになるでしょう(ほんとか?)。 基 Parsing Expression Grammar(PEG)はBNFに似ているけど、ちょっと(かなり?)違う文法の表記法です。BNFはその文法がどのような言語を表現しているかを定めるのに対して、PEGは入力がどのように解析されるかを定めます。PEGとBNFの一番大きな違いは、PEGには曖昧さが無いことです。たとえば、プログラミング言語のif文を表現する次の擬似BNFには曖昧さがあります。 statement ::= if_statement | ...; if_statement ::= IF LPAREN expr RPAREN sta

    PEG基礎文法最速マスター - kmizuの日記
    tarao
    tarao 2010/02/03
  • 1