diff --git a/CHANGELOG.md b/CHANGELOG.md index 315a46c2..2036b999 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `arr.reduce`が空配列に対して初期値なしで呼び出された時、正式にエラーを出すよう - `str.pad_start`,`str.pad_end`を追加 - `arr.insert`,`arr.remove`を追加 +- `arr.sort`の処理を非同期的にして高速化 # 0.18.0 - `Core:abort`でプログラムを緊急停止できるように diff --git a/src/interpreter/primitive-props.ts b/src/interpreter/primitive-props.ts index 4818a087..07b9a08e 100644 --- a/src/interpreter/primitive-props.ts +++ b/src/interpreter/primitive-props.ts @@ -246,8 +246,9 @@ const PRIMITIVE_PROPS: { const mergeSort = async (arr: Value[], comp: VFn): Promise => { if (arr.length <= 1) return arr; const mid = Math.floor(arr.length / 2); - const left = await mergeSort(arr.slice(0, mid), comp); - const right = await mergeSort(arr.slice(mid), comp); + const left_promise = mergeSort(arr.slice(0, mid), comp); + const right_promise = mergeSort(arr.slice(mid), comp); + const [left, right] = await Promise.all([left_promise, right_promise]); return merge(left, right, comp); }; const merge = async (left: Value[], right: Value[], comp: VFn): Promise => {