-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Добавлена статья про библиотеку Iter
- Loading branch information
Showing
3 changed files
with
38 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters