Skip to content

Commit

Permalink
Добавлена статья про библиотеку Iter
Browse files Browse the repository at this point in the history
  • Loading branch information
dx3mod committed Oct 31, 2024
1 parent 9d30d02 commit 72bfa1d
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
36 changes: 36 additions & 0 deletions docs/libraries/iter.md
Original file line number Diff line number Diff line change
@@ -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/
1 change: 1 addition & 0 deletions docs/resources.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit 72bfa1d

Please sign in to comment.