SML
いわゆる Parallel ML の一つである MPL の論文最新作です > Efficient Parallel Functional Programming with Effects: Jatin Arora Sam Westrick Umut A. Acar. PLDI 2023. 重要な拡張に思えたので全体を読みましたのでメモしておきます。 MPL MPL はいわ…
並列MLであるMPLについての記事がsigplanのブログに投稿されていました> Provably Space-Efficient Parallel Functional Programming | SIGPLAN Blog。 面白いし論文より分かり易いので読みましょう。 MPLはSMLに並列計算のための機能を追加した並列MLの一つ…
移植 MLLex と MLYacc を Poly/ML で使えるように移植しました。 移植と言うよりは使える状態のリポジトリを作って Makefile とか書きましたというだけですが、やはりこの二つは重要なので使える状態で維持したいですね。 移植先のリポジトリは eldesh/mllex…
SMLDoc は SML# プロジェクトの一部として開発されていたドキュメント生成ツールです。 SMLコードのコメント中に書いた内容を、そのコメントに対応するエンティティに紐付けて表示するようなHTMLを生成します。昔の SML# には SMLDoc が同梱されていましたが…
SML用のユニットテストライブラリとして SMLUnit というライブラリがあります。 SML# プロジェクトの一部として開発されたようですが、現在は SML# 以外の処理系向けのコードは独立したリポジトリで管理されています。現在対応している処理系は以下の4つです…
SHA(3)はNISTが定めたセキュアなハッシュアルゴリズムの標準規格です。 今回SHA2のSML実装に続きSMLでSHA3を実装し、SHA3SMLとして公開しました。現在のところSML/NJ 110.99で動作を確認しています。 実装状況 SHA3SMLは直接FIPS 202を確認して実装しました…
POPL 2021 の論文 Provably Space-Efficient Parallel Functional Programming が出たのに合わせて2020年末*1にMaPLe v0.2 がリリースされていました。 前回の POPL の時は aobench を動かす記事 並列ML: MaPLe で AObench を高速化 を書きました。MaPLe(mpl…
eldesh/smlsharp で公開しているSML#のdockerイメージがあります。 最近必要になって バージョン1 系列(1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.1.0)を追加しました。今月初め頃 0.90 をビルドしてあったため、 これで現時点でのリリースを全種揃えたことになりまし…
私が個人的に管理しているsml/njのdockerイメージを linux/amd64 と linux/386 のマルチアーキテクチャ対応しました。 以下のページでタグを確認すると、linux/amd64 と linux/386 という種類が表示されると思います。> eldesh/smlnj/tags 使用方法 使用する…
SMLUnitというSML用ユニットテストライブラリをPoly/ML5.8から使えるようにしました。 makeと上手く連携するMakefileが書けたので満足です。 ブランチはここ> https://github.com/eldesh/SMLUnit/tree/support/polyml *1使い方はReadmeに書いたけど、Poly/ML…
前回*1はちょっとケチが付いてしまいましたが、今回めげずに AObenchSML の SML# 版に MassiveThreads による並列化版 を追加しました。 シングルスレッド版と並列化版を両方実行します。 並列forを実装して 並列ML: MaPLe で AObench を高速化 で作ったもの…
SML# には最初からユーザレベルの細粒度スレッドライブラリ MassiveThreads のラッパーが提供されています。 Myth ストラクチャを使ってプログラムを書き、環境変数 MYTH_NUM_WORKERS で仕様コア数を指定するようです。 > 11.2 MassiveThreadsを用いた細粒度…
POPL2020 で新しい並列ML(MaPLe)(略称: MPL)の提案がありました。 正確に言うと言語の提案じゃ無くて、「並列プログラムの性質を表す(良い)性質 Disentanglement Property を提案したので、その良さ(= 並列プログラムの実行効率)を示すための処理系を作って…
SMLでSHA2(Secure Hash Algorithm)というハッシュアルゴリズムを実装しました。 https://github.com/eldesh/sha2_sml.gitに公開してあります。現在のところSML/NJで動作を確認しています。 #こういう基本的な部品から実装して行くのが重要です。たぶん。 実…
SML/NJにはCM(CompilationManager)というビルドツールが付いてきます。 以前は基本的な使い方を書きました>CompileManager(SML用make)の使い方。今回の記事ではSMLUnitというユニットテストライブラリを例にCMで管理するライブラリのインストール方法を説明…
SMLの最適化コンパイラであるMLtonのDockerイメージを作りました。MLtonは開発は行われているのですが、長らくリリースが出ていないため使いづらい状態です。あとなぜか私の手元だとビルドに失敗したりします*1。 そこで現状の開発ヘッドをビルドしたイメー…
Dockerの練習として SML#3.3.0 の入ったDockerイメージを作ってみました。> https://hub.docker.com/r/eldesh/smlsharp/ $ docker pull eldesh/smlsharp:3.3.0 とやれば使えるはず。ベースイメージは centos:centos7.3.1611 です。 LLVMのサイズが強敵でした…
ProofSummit2017とML勉強会#2に参加してきました。 とりあえず二日連続はつらいものがあった。 個々の感想 SML#の話は良かった。言語や処理系の機能が列挙されていると個人的に楽しい。そういう意味ではATSも楽しいんだけど、機能(のアップデート)が少なかっ…
2016年現在SMLの処理系はいくつもありますが、昔はMLWorksという商用の処理系がありました。MLWorksは開発元のHarlequinが潰れて2000年くらいに姿を消していたのですが、突然2013年にオープンソースになりgithub上に公開されました。 実働していた頃は様々な…
AObench-SMLがSMLの処理系の一つであるMLKitに対応しました。これまではMLKitにバグがあり、実数の指数表現リテラルのうち小文字の'e'を使ったもの(e.g. 2e3 10e~5 など)が使えませんでした。 単にレキサの規則が足りてなかっただけなんですが(基本的過ぎて)…
以前紹介したSML版QuickCheckであるところの QCheck を SML#3.0.1で動作できるようにしてマージされましたヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノ*1!! そのマージに続いていくつか変更があって現在バージョンが v1.2 に上がっていますので今後はこれを使いましょう。 #どうで…
この記事は MLアドベントカレンダー 12日目の記事です。 SML# 向けに Z3 というライブラリのバインディングライブラリ z3sml をリリースしました。 Z3 は SMT*1ソルバ(もしくは単にSMT) と呼ばれる種類のソフトウェアで、ある種類の制約充足問題を自動で解く…
Poly/MLというStandardMLの処理系があります。 このPoly/MLの提供するREPLでは、入力した式の値をエコーバックする際に使用するプリンタ(REPLの'P')をSML自身のコード内で指定することができます。 この記事では Poly/ML のREPLのpretty printerを部分的に上…
あけましておめでとうございます。2015年最初の記事です。今年もよろしくお願いします。 smlnjlibというライブラリ集の一部をSML#(2.0.0)用に移植しました。> smlnjlib# 例によって移植と言ってもsmiファイルをひたすら書いただけなので実装を詳細に把握して…
kitlibというSMLライブラリをSML/NJとSML#に移植しました*1。 #全く誰も嬉しくないと思いますが(^^;; kitlibはMLKitという処理系を実装されているElsman先生が作っているSMLライブラリ集です。 元々はMLKitのソースコードと一緒に配布されていましたがライブ…
この記事は ML Advent Calendar 2014 7日目の記事です。 ここではSMLによるDynamic(あるいはAny)と呼ばれる*1、任意の型の値を保持出来るテクニックを紹介します。任意の型の値を保持可能な型という内容は 以前も紹介したことがあります(2) が、前回紹介した…
Cygwin上のMLton*1でWin32APIを使用する簡単な例を紹介します。 以下の2つの例では異なる方法で右図のようなメッセージボックスを表示します。 コード全体はgistに置いてあります。 direct call _import 式でシンボルと型を書くとお手軽に外部関数が使えます…
SMLではコード中のほとんどどこからでも例外が投げられるのですが、それがどこから投げられたかを追跡するポータブルな方法は存在しません。ただしSML/NJでは例外が投げられた時にスタックトレースを表示することが出来たので方法を紹介します。 #なお、ドキ…
SML/NJに怪しげな振る舞いを見つけました。 コードとエラーメッセージから推察するに value restriction(値多相性制約) 絡みだと思います。 value restriction 多相型が推論されては困る計算*1を弾くために、SMLが型推論に掛ける縛り。 それを踏まえて問題の…
序 SML#で使用出来る多相レコードは、SMLのレコード間のサブタイプ関係を推論すると考えると良さそうです。 例えば fn {x:int,...}=> hogehoge という関数は x という int 型のフィールドを持つ任意のレコードを引数に取りますが、これを {x:int} のサブタイ…