Skip to content

Instantly share code, notes, and snippets.

@puripuri2100
Last active March 19, 2020 05:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save puripuri2100/aa7ddf2067ef532a15445ac67e98ccb2 to your computer and use it in GitHub Desktop.
Save puripuri2100/aa7ddf2067ef532a15445ac67e98ccb2 to your computer and use it in GitHub Desktop.

Compilation speed: string-same vs strig-explode

  • Measure the time required to compile the document sub.saty and explode.saty.
  • We measure the time 9 times after 3 times of warming up, and average the middle 5 values.

Result

string-sub: 24.000 seconds

string-explode: 24.507 seconds

string-explode takes 1.02 times as much time to compile as satysfi-same.

@require: stdja
@import: local
document (|
title = {explode};
author = {\@puripuri2100};
show-title = false;
show-toc = false;
|) '<
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
+explode;
>
@require: list
let join i s1 s2 =
if i <= 0 then
s2
else
s1 ^ `; `# ^ s2
let str-lst-to-str lst =
`[` ^ List.fold-lefti join ` ` lst ^ `]`
let str-to-lst-sub str =
let str-len = string-length str in
let-rec sub lst n =
if n <= 0 then
lst
else
let s = string-sub str (n - 1) 1 in
sub (s::lst) (n - 1)
in
sub [] str-len
let str-to-lst-explode str =
str
|> string-explode
|> List.map (fun i -> string-unexplode [i])
let test-str =
`吾輩は猫である。名前はまだ無い。
 どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢あったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽せぽくて実に弱った。これが人間の飲む煙草というものである事はようやくこの頃知った。`
let make-bb-1 ctx f =
let lst = f test-str in
let ib =
lst
|> str-lst-to-str
|> embed-string
|> read-inline ctx
in
let bb =
line-break true true ctx (ib ++ inline-fil)
in
bb
let make-bb-10 ctx f =
let bb = make-bb-1 ctx f in
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb
let make-bb-100 ctx f =
let bb = make-bb-10 ctx f in
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb +++
bb
let-block ctx +sub =
make-bb-100 ctx str-to-lst-sub
let-block ctx +explode =
make-bb-100 ctx str-to-lst-explode
%
% $ time satysfi sub.saty
% と
% $ time satysfi explode.saty
% で実験
% realでの値を最終的には取る(プログラムの呼び出しから終了までにかかった実時間)
string-sub :
real : 24.098s 24.113s 24.033s 23.844s 23.911s 23.707s 24.774s 23.784s 24.298s
user : 23.719s 23.906s 23.766s 23.547s 23.656s 23.547s 24.266s 23.578s 24.000s
sys : 0.125s 0.141s 0.219s 0.172s 0.078s 0.094s 0.203s 0.156s 0.156s
string-explode :
real : 24.598s 24.478s 24.526s 24.544s 25.702s 24.511s 24.477s 24.445s 24.361s
user : 24.203s 24.219s 24.219s 24.375s 25.297s 24.250s 24.172s 24.266s 24.094s
sys : 0.234s 0.125s 0.250s 0.109s 0.141s 0.172s 0.172s 0.125s 0.109s
@require: stdja
@import: local
document (|
title = {sub};
author = {\@puripuri2100};
show-title = false;
show-toc = false;
|) '<
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
+sub;
>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment