From 72bfa1d9d94ce2e1119f7ed75014d408dadee46b Mon Sep 17 00:00:00 2001 From: dx3mod Date: Thu, 31 Oct 2024 15:15:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D1=82=D0=B0=D1=82=D1=8C=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=83=20Iter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.ts | 1 + docs/libraries/iter.md | 36 ++++++++++++++++++++++++++++++++++++ docs/resources.md | 1 + 3 files changed, 38 insertions(+) create mode 100644 docs/libraries/iter.md diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index b2cb0cd..f14a546 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -61,6 +61,7 @@ export default defineConfig({ collapsed: false, items: [ { text: "Decoders", link: "/libraries/decoders" }, + { text: "Iter", link: "/libraries/iter" }, { text: "Core", link: "/libraries/core", diff --git a/docs/libraries/iter.md b/docs/libraries/iter.md new file mode 100644 index 0000000..a79f5a7 --- /dev/null +++ b/docs/libraries/iter.md @@ -0,0 +1,36 @@ +# Библиотека итераторов Iter + +[Iter] — чистая и эффективная реализация итераторов. +Это самая потрясающая реализация итераторов, которую вы только можете представить. +Это не чисто функциональные итераторы, они не менее великолепны. + +Вся абстракция строиться на простейшей функции `('a -> unit) -> unit`. Всё! +Больше вам ничего не надо. + +#### Пример простого счётчика + +```ocaml +let counter top k = + for i = 0 to top do + k i + done +(* counter : int -> int Iter.t *) +``` + +Теперь мы можем делать с ним всё, что захочется: +```ocaml +let () = counter 10 |> Iter.map string_of_int |> Iter.iter print_endline +``` + +#### Перфоманс + +При включенных оптимизациях компилятор развернёт всю цепочку итератора в один сплошной цикл, +если такой имеется. То есть по производительности это будет тоже самое, если бы вы писали циклы +в ручную. Так как тут нет ничего кроме функций, даже замыканий! Максимально примитивный код и это гениально. + +--- + +> [!NOTE] Смотрите также +> - [Continuation-based Iterators in OCaml](https://youtu.be/KupkEsqdu0E?si=SIRi4Pt050z7IRl8) про чисто функциональные итераторы; + +[Iter]: https://github.com/c-cube/iter/ \ No newline at end of file diff --git a/docs/resources.md b/docs/resources.md index c88d6a4..60782df 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -42,3 +42,4 @@ - [OCaml для хаскелиста](https://youtu.be/ESSCTskStgY?si=wUfbKydHDmxihXN4) серия докладов Юрия Горшкова - [Pragmatic Category Theory for Beginners](https://discuss.ocaml.org/t/pragmatic-category-theory/15056) — серия статьей, объясняющих теорию категорий на примерах из реального мира - [MinCaml](https://esumii.github.io/min-caml/index-e.html) — пример написания компилятора для подмножества ML языка +- [Continuation-based Iterators in OCaml](https://youtu.be/KupkEsqdu0E?si=SIRi4Pt050z7IRl8) \ No newline at end of file