SML

MLLex と MLYacc を Poly/ML に移植

SML

移植 MLLex と MLYacc を Poly/ML で使えるように移植しました。 移植と言うよりは使える状態のリポジトリを作って Makefile とか書きましたというだけですが、やはりこの二つは重要なので使える状態で維持したいですね。 移植先のリポジトリは eldesh/mllex…

SML のドキュメント生成ツール SMLDoc をサルベージした

SML

SMLDoc は SML# プロジェクトの一部として開発されていたドキュメント生成ツールです。 SMLコードのコメント中に書いた内容を、そのコメントに対応するエンティティに紐付けて表示するようなHTMLを生成します。昔の SML# には SMLDoc が同梱されていましたが…

SMLUnit のインストールを統一して簡潔にした

SML

SML用のユニットテストライブラリとして SMLUnit というライブラリがあります。 SML# プロジェクトの一部として開発されたようですが、現在は SML# 以外の処理系向けのコードは独立したリポジトリで管理されています。現在対応している処理系は以下の4つです…

SMLでSHA3を実装しました

SML

SHA(3)はNISTが定めたセキュアなハッシュアルゴリズムの標準規格です。 今回SHA2のSML実装に続きSMLでSHA3を実装し、SHA3SMLとして公開しました。現在のところSML/NJ 110.99で動作を確認しています。 実装状況 SHA3SMLは直接FIPS 202を確認して実装しました…

並列ML: MaPLe v0.2 がリリースされていた

POPL 2021 の論文 Provably Space-Efficient Parallel Functional Programming が出たのに合わせて2020年末*1にMaPLe v0.2 がリリースされていました。 前回の POPL の時は aobench を動かす記事 並列ML: MaPLe で AObench を高速化 を書きました。MaPLe(mpl…

SML#のDockerイメージが全種揃った

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イメージをマルチアーキテクチャ対応した

私が個人的に管理しているsml/njのdockerイメージを linux/amd64 と linux/386 のマルチアーキテクチャ対応しました。 以下のページでタグを確認すると、linux/amd64 と linux/386 という種類が表示されると思います。> eldesh/smlnj/tags 使用方法 使用する…

SMLUnitをPoly/MLに対応した

SMLUnitというSML用ユニットテストライブラリをPoly/ML5.8から使えるようにしました。 makeと上手く連携するMakefileが書けたので満足です。 ブランチはここ> https://github.com/eldesh/SMLUnit/tree/support/polyml *1使い方はReadmeに書いたけど、Poly/ML…

SML# 版 AObench をMassiveThreadsで高速化

SML

前回*1はちょっとケチが付いてしまいましたが、今回めげずに AObenchSML の SML# 版に MassiveThreads による並列化版 を追加しました。 シングルスレッド版と並列化版を両方実行します。 並列forを実装して 並列ML: MaPLe で AObench を高速化 で作ったもの…

SML#のプログラムにMassiveThreadsのオプションを付けるとパフォーマンスが低下する

SML

SML# には最初からユーザレベルの細粒度スレッドライブラリ MassiveThreads のラッパーが提供されています。 Myth ストラクチャを使ってプログラムを書き、環境変数 MYTH_NUM_WORKERS で仕様コア数を指定するようです。 > 11.2 MassiveThreadsを用いた細粒度…

並列ML: MaPLe で AObench を高速化

SML

POPL2020 で新しい並列ML(MaPLe)(略称: MPL)の提案がありました。 正確に言うと言語の提案じゃ無くて、「並列プログラムの性質を表す(良い)性質 Disentanglement Property を提案したので、その良さ(= 並列プログラムの実行効率)を示すための処理系を作って…

SMLでSHA2アルゴリズムを実装しました

SML

SMLでSHA2(Secure Hash Algorithm)というハッシュアルゴリズムを実装しました。 https://github.com/eldesh/sha2_sml.gitに公開してあります。現在のところSML/NJで動作を確認しています。 #こういう基本的な部品から実装して行くのが重要です。たぶん。 実…

SMLUnitのインストールを通してSML/NJ向けのライブラリのインストール方法を解説する

SML/NJにはCM(CompilationManager)というビルドツールが付いてきます。 以前は基本的な使い方を書きました>CompileManager(SML用make)の使い方。今回の記事ではSMLUnitというユニットテストライブラリを例にCMで管理するライブラリのインストール方法を説明…

MLtonのdockerイメージを作りました

SMLの最適化コンパイラであるMLtonのDockerイメージを作りました。MLtonは開発は行われているのですが、長らくリリースが出ていないため使いづらい状態です。あとなぜか私の手元だとビルドに失敗したりします*1。 そこで現状の開発ヘッドをビルドしたイメー…

SML#3.3.0のDockerイメージを作った

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のサイズが強敵でした…

ML勉強会#2 と ProofSummit2017 に参加した

ProofSummit2017とML勉強会#2に参加してきました。 とりあえず二日連続はつらいものがあった。 個々の感想 SML#の話は良かった。言語や処理系の機能が列挙されていると個人的に楽しい。そういう意味ではATSも楽しいんだけど、機能(のアップデート)が少なかっ…

古の商用SML処理系MLWorksを動かす

2016年現在SMLの処理系はいくつもありますが、昔はMLWorksという商用の処理系がありました。MLWorksは開発元のHarlequinが潰れて2000年くらいに姿を消していたのですが、突然2013年にオープンソースになりgithub上に公開されました。 実働していた頃は様々な…

MLKitの謎のバグを修正してaobenchが動くようにした

SML

AObench-SMLがSMLの処理系の一つであるMLKitに対応しました。これまではMLKitにバグがあり、実数の指数表現リテラルのうち小文字の'e'を使ったもの(e.g. 2e3 10e~5 など)が使えませんでした。 単にレキサの規則が足りてなかっただけなんですが(基本的過ぎて)…

QCheckをSML#に対応させた

以前紹介したSML版QuickCheckであるところの QCheck を SML#3.0.1で動作できるようにしてマージされましたヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノ*1!! そのマージに続いていくつか変更があって現在バージョンが v1.2 に上がっていますので今後はこれを使いましょう。 #どうで…

z3sml リリース!

この記事は MLアドベントカレンダー 12日目の記事です。 SML# 向けに Z3 というライブラリのバインディングライブラリ z3sml をリリースしました。 Z3 は SMT*1ソルバ(もしくは単にSMT) と呼ばれる種類のソフトウェアで、ある種類の制約充足問題を自動で解く…

PolyMLのpretty printerをユーザ定義する

Poly/MLというStandardMLの処理系があります。 このPoly/MLの提供するREPLでは、入力した式の値をエコーバックする際に使用するプリンタ(REPLの'P')をSML自身のコード内で指定することができます。 この記事では Poly/ML のREPLのpretty printerを部分的に上…

smlnjlibをSML#に移植した

SML

あけましておめでとうございます。2015年最初の記事です。今年もよろしくお願いします。 smlnjlibというライブラリ集の一部をSML#(2.0.0)用に移植しました。> smlnjlib# 例によって移植と言ってもsmiファイルをひたすら書いただけなので実装を詳細に把握して…

kitlibをSML/NJとSML#に移植

SML

kitlibというSMLライブラリをSML/NJとSML#に移植しました*1。 #全く誰も嬉しくないと思いますが(^^;; kitlibはMLKitという処理系を実装されているElsman先生が作っているSMLライブラリ集です。 元々はMLKitのソースコードと一緒に配布されていましたがライブ…

SMLでDynamic(再び)

SML

この記事は ML Advent Calendar 2014 7日目の記事です。 ここではSMLによるDynamic(あるいはAny)と呼ばれる*1、任意の型の値を保持出来るテクニックを紹介します。任意の型の値を保持可能な型という内容は 以前も紹介したことがあります(2) が、前回紹介した…

MLtonでWin32APIを呼び出す

SML

Cygwin上のMLton*1でWin32APIを使用する簡単な例を紹介します。 以下の2つの例では異なる方法で右図のようなメッセージボックスを表示します。 コード全体はgistに置いてあります。 direct call _import 式でシンボルと型を書くとお手軽に外部関数が使えます…

SML/NJでスタックトレースを表示する

SML

SMLではコード中のほとんどどこからでも例外が投げられるのですが、それがどこから投げられたかを追跡するポータブルな方法は存在しません。ただしSML/NJでは例外が投げられた時にスタックトレースを表示することが出来たので方法を紹介します。 #なお、ドキ…

SML/NJのvalue restrictionが怪しい気がする

SML

SML/NJに怪しげな振る舞いを見つけました。 コードとエラーメッセージから推察するに value restriction(値多相性制約) 絡みだと思います。 value restriction 多相型が推論されては困る計算*1を弾くために、SMLが型推論に掛ける縛り。 それを踏まえて問題の…

SMLの空レコード型とunit型注釈を付けた時の処理系毎の振る舞い

SML

序 SML#で使用出来る多相レコードは、SMLのレコード間のサブタイプ関係を推論すると考えると良さそうです。 例えば fn {x:int,...}=> hogehoge という関数は x という int 型のフィールドを持つ任意のレコードを引数に取りますが、これを {x:int} のサブタイ…

SML/NJのCygwin上でビルドに失敗するバグが修正された

SML

私が以前パッチを書いて報告していた SML/NJのCygwin上でのインストールに失敗するバグ が 110.77(08/22/14) で修正されています。 Here is a list of tracked bugs fixed (or closed) with this release, please see the bug tracker for more details. .. …

PolyMLの依存関係管理

Poly/MLはREPLとしてもコンパイラとしても使うことのできるSML処理系です。 64bit環境に対応した処理系でもあるので、そういった意味でお手軽な場合も多そうですね。 ここではPolyMLのREPLでコードを読み込む方法を紹介します。 use とりあえず use は備えて…