securemark 0.258.8 → 0.259.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/design.md +4 -4
- package/dist/index.js +138 -131
- package/markdown.d.ts +37 -19
- package/package.json +1 -1
- package/src/combinator/data/parser/context.ts +16 -17
- package/src/parser/api/bind.ts +2 -2
- package/src/parser/api/parse.ts +2 -2
- package/src/parser/block/reply/cite.test.ts +3 -1
- package/src/parser/block/reply/cite.ts +1 -0
- package/src/parser/context.ts +15 -6
- package/src/parser/inline/annotation.ts +3 -4
- package/src/parser/inline/autolink/account.ts +2 -2
- package/src/parser/inline/autolink/anchor.ts +2 -2
- package/src/parser/inline/autolink/hashnum.ts +2 -2
- package/src/parser/inline/autolink/hashtag.ts +2 -2
- package/src/parser/inline/autolink/url.ts +2 -2
- package/src/parser/inline/autolink.ts +1 -1
- package/src/parser/inline/bracket.ts +8 -8
- package/src/parser/inline/comment.ts +2 -2
- package/src/parser/inline/deletion.ts +2 -2
- package/src/parser/inline/emphasis.ts +2 -2
- package/src/parser/inline/emstrong.ts +2 -2
- package/src/parser/inline/extension/index.ts +3 -4
- package/src/parser/inline/extension/placeholder.ts +2 -2
- package/src/parser/inline/html.ts +2 -2
- package/src/parser/inline/insertion.ts +2 -2
- package/src/parser/inline/link.ts +70 -66
- package/src/parser/inline/mark.ts +2 -2
- package/src/parser/inline/media.ts +11 -10
- package/src/parser/inline/reference.ts +3 -4
- package/src/parser/inline/ruby.ts +2 -2
- package/src/parser/inline/strong.ts +2 -2
- package/src/parser/inline/template.ts +2 -2
- package/src/parser/inline.ts +0 -1
- package/src/parser/source/text.ts +2 -2
package/CHANGELOG.md
CHANGED
package/design.md
CHANGED
|
@@ -285,13 +285,13 @@ CodeMirrorが素では速いがVimModeでは数万文字程度でも耐え難く
|
|
|
285
285
|
### バックトラック
|
|
286
286
|
|
|
287
287
|
SecuremarkのAnnotation構文に典型的であるように文脈を変更する構文の中にその文脈に依存し変更される他の構文が存在する場合一般に文脈の相違から解析結果を再利用不能な(`αA'β | αAB`)バックトラックが生じる。文脈依存構文の解析中に文脈により解釈の異なる字句(`[a[`)または現在の文脈を終了する字句(ただの括弧がスコープを作らない場合の`(([a))`)に遭遇したとき、現在の文脈での解析の継続を試行する解析方法はメモ化なしではバックトラックが再帰的に生じ線形時間で解析できず、現在の文脈での解析を中止し直前の文脈を継続または新たな文脈を開始する解析方法はバックトラックなしで線形時間で解析できる。
|
|
288
|
-
CommonMarkはLink
|
|
289
|
-
|
|
290
|
-
Securemark
|
|
288
|
+
CommonMarkはLink構文から明らかなように後者の解析方法により重篤なバックトラックなし(作者によると、だがHTML構文とAutolink構文では再帰的バックトラックが生じるのはないか?)で(インラインでは)ほぼ1回の走査で解析できる言語であるが同時にこれは文脈依存構文の正当な入れ子表現(`[<a@b>]`)を解析できないか不正な表現(`[<a@b>]()`)を除外できず二重リンク(`<a><a></a></a>`)を生成する、文脈依存構文の存在する数に応じて多項式的(おそらく$n^{2+c}$)に構文の壊れやすさの増す脆く拡張性の低い言語であることを意味する(構文の決定を遅延できれば解決できるがこれにより他の構文の解釈が非決定的にならない場合に限られる。そしてCommonMarkは角括弧(`<>`)の対応を取っていないためAutolink構文は自身の解釈が非決定的になると後続の構文の解釈も非決定的になる)。この問題はおそらくメモ化により解決できるがCommonMarkは実行性能追及のためメモ化を廃止しており二重リンクも放置しているためメモ化により性能を低下させてまで解決するつもりはないと思われる(すなわちCommonMarkは機械を至上とし人間に制約を課す低水準の言語であり人間の需要を至上とするSecuremarkとは対極に位置する)。
|
|
289
|
+
従って現在のほぼ1回の走査で解析可能な文法に制約されるCommonMarkには文脈依存構文を入れ子表現の広範な制限ならびに構文の可読性および開始記号の信頼性の多項式的な低下と引き換えにしか追加できないという拡張性の欠陥が存在する。CommonMarkの仕様策定者が構文の拡張に(名称を維持するか否かにかかわらず)不自然なまでに消極的または進展がないのは正当な理由や怠慢からでなく文脈依存構文を追加するにつれて構文解析戦略の欠陥が明白になっていくためおよび現在の高い実行性能を低下させたくないためである。`~~a~~`のような文脈自由構文は容易に追加できるがこうしたマージンを失えばもはや後はない。CommonMarkは小さく単純であるがゆえに正しくいられる象牙の塔であり仕様策定者はこの正しさを失わず正しいままでいたいがために象牙の塔に引きこもり小さな完全性を固持し続けているのである(でなければ何年も隠さず速やかにこの拡張性の欠如を公表して助力を求めていなければならない)。
|
|
290
|
+
Securemarkは線形時間で解析不能な前者の解析方法をメモ化によりおおよそ4n以下の最悪計算量に改善しさらに解析時間と解析範囲の局限により一定時間内で解析不能な入力の影響を局限することでこれらの問題を解決している。この解析方法はほとんどの自然な入力に対して1nに近い時間で効率的に動作し、最悪計算量で低速に動作させる少数の機械的攻撃入力に対してもサーバーで多数のユーザーのリクエストに応じるには低速で脆弱性となる可能性があるがクライアントで単一のユーザーの操作に応じるには十分高速であるためクライアントで解析する限り解析の効率または速度が実用上問題となることはない。
|
|
291
291
|
|
|
292
292
|
### メモ化
|
|
293
293
|
|
|
294
|
-
|
|
294
|
+
一部の文脈依存言語を線形時間で解析できるようになるとしても状態数に応じて複数回走査が必要なこと、このため時間効率が定性的には改善されても定量的には文脈自由言語より数倍悪いこと、オーバーヘッドが有意に大きいことなどから理論上同じ線形時間だとしても実用上文脈自由言語と同等の実行性能にはならず文脈依存言語と文脈自由言語を等価の選択肢にするものではない。
|
|
295
295
|
|
|
296
296
|
### 最適化
|
|
297
297
|
|