SML

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 は備えて…

GeSHiにSMLのsyntax highlightがマージされた

だいぶ前に書いてpull reqestしておいた、SMLコードのGeSHi用syntax highlight設定が本家にマージされてました。やったー。 support StandardML syntax #6 GeSHiはphpで書かれた汎用syntax highlighterで、言語毎に正規表現(のキモイ拡張)の塊を持っています…

SMLの規格書が公開されていた

SML

気付いてなかったのですが、いつの間にか StandardML'97 の規格書がgithubで公開されています*1 > SMLFamily/sml97 手元のCentOSでビルドところ、ちゃんとroot.pdfが生成されました。 (app (yum install) ["texinfo", "texinfo-tex"]; latexmk(unzip _; ins…

SML/NJで実行ファイルを作る

SML

タイトルはやや詐欺なのだけど。 SML/NJで実行ファイル、というか、型検査とコンパイル*1が終わった状態のファイルが欲しいことがある。 ソフトウェアをバイナリ配布するとか。あるいはベンチマークを取りたい(=パースや型検査の時間を入れたくない)場合が考…

SML#2.0.0リリース

SML

来ました> http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/?Download大きな変更としてバックエンドが今までの手書きから(?)LLVMに置き換わっています。 多少構文の修正もありそうですが、新機能は特にアナウンスされてません。(というかドキュメントの公開…

build SML/NJ 110.76 on Cygwin 1.7

SML

いつの間にかcygwin上で SML/NJ がビルド出来なくなっていた。(いつからだろう? 具体的には base/runtime/mach-dep/cygwin-fault.c で参照されているヘッダ が消えているのでエラーとなっています。 現時点での最新版を含む SML/NJ 110.7{6,5,4} と cygwin …

aobenchによるSMLベンチマークを書いた

SML

aobenchというのはアンビエントオクルージョン(AO)というアルゴリズムを使用したレンダリングを行う、浮動小数点数計算のベンチマークです。 オリジナルはC言語の400行に満たない小さなプログラムです。これをSMLに移植して実行時間のベンチマークを行いまし…

実数の表示方法によって精度が足りないように見えることがある

プログラマのための数学#2を眺めていました。途中から(あまりにもメジャーな処理系である)SML#とNJをいじり始めて聞いてませんでしたけど…。 で、いきなりバグ見つけて混乱したり。 序 で、本題です。SMLの実数型であるReal.realがIEEE754準拠であることが…

libpcreのSML#バインディングを公開しました

SML

pcre は Perl Compatible Regular Expressions の略で、Perl互換の正規表現ライブラリです。 SML#からこのライブラリを使うラッパーを書いたので公開しました > https://github.com/eldesh/pcre_sharp 基本的なマッチの機能と、subpatternにマッチした部分…

なごや2013(夏)まとめ

8/25,26でなにやらイベントが連続していたので行ってきました。 ProofSummit2013 OCamlMeeting2013 なごやまつり 後続のせいでかなり地味な印象になってしまったけど(^^、聴いて意味があったのは前半。 OCamlSummit 期待していた Generic Pretty Printer は…

SML版 factの最小不動点を調べる

SML

圏論勉強会#9 Haskellによるfactの最小不動点の説明 のSML版です。講義中では「Haskellの遅延評価が〜」と何度も繰り返されてましたが、fixを使う前の undefined を使う定義ではSMLでも(この場合は)同様の結果が得られます。 ただし引数を合わせる必要があり…

SMLでの時刻の扱い

SML

便乗。さすがにSML/NJだと普通に出来る。 $ rlwrap sml Standard ML of New Jersey v110.72 [built: Tue Aug 24 10:47:04 2010] - Time.now(); val it = TIME {usec=1371522289223904} : Time.time - Date.fromTimeLocal(Time.now()); val it = DATE {day=18…