2015-05-12 19 views
5

Patrząc na różne projekty ocaml, nie widzę built-in Streams w języku, jaki kiedykolwiek był używany. Nawet w najnowszej książce Real World Ocaml, strumienie nie są w ogóle wymienione, co jest nieparzyste.Czy naprawdę używane są strumienie w ocaml?

Jaki jest tego powód? Czy to dlatego, że Lwów lub Rdzeń ich zastąpił?

+1

To pytanie wymaga zbyt wielkiej wszechwiedzy, aby skromny praktyk mógł odpowiedzieć :-) Użyłem wcześniej strumieni w małych projektach; są eleganckie. Lwt wydaje się ortogonalny; Core może mieć ładniejszą implementację strumienia. –

+0

@GaintSquid, aby być pewnym, że nie szukasz aplikacji lub strumieni, ale raczej dlaczego nie są one "naprawdę" używane? Jeśli to drugie, nie wiem dlaczego, ale jeśli to ten pierwszy, odpowiem! – matrixanomaly

+0

@matrixanomaly Zgadza się. Ale chciałbym również zobaczyć aplikacje strumieni w prawdziwym oprogramowaniu. – GiantSquid

Odpowiedz

7

Myślę, że prawie odpowiedzieć na to pytanie w this bug report.

+0

To naprawdę bardzo wymowne.Chociaż proponujĘ ..., aby była to biblioteka do eliminowania zależnoś ci w samym ocaml, prawda? – GiantSquid

+0

Żądanie dotyczy * wycofania *. NIE usuwania. To jest zupełnie inne. W każdym przypadku, tak, byłby umieszczony poza kompilatorem (i mam nadzieję, że nie będzie już używany na rzecz lepszych bibliotek). – Drup

1

Strumienie mogą być używane do "leniwej oceny" w OCaml, szczególnie, że OCaml jest językiem gorliwym, są zdecydowanie użyteczne przypadki, w których pożądana jest leniwość (jak w Haskell).

Cytując lecture in Cornell on streams,

Strumienie są rzeczywiście przydatne w prawdziwym życiu. Niektóre aplikacje:

  • kompilatory odczytu pliku źródłowego z tekstem
  • gniazd sieciowych
  • przetwarzanie dźwięku oraz sygnału wideo
  • rozpoznawania głosu
  • zbliżanie rozwiązań równań stosując szereg zbieżny

Podane odniesienie wykorzystuje również strumienie do obliczania p leniwie lansuje, co jest bardzo szybkie w porównaniu do normalnego sposobu obliczania dużych liczb pierwszych przy użyciu sita Eratostenesa. Dlatego uważam, że strumienie zdecydowanie mają swoje miejsce w języku, ponieważ pozwala na leniwą ocenę w OCaml.

Strumienie zostały wykorzystane przez mojego Profesora do wyjaśnienia pojęcia leniwego oceniania w gorliwym języku, ponieważ nie jest on wymieniony w świecie rzeczywistym. OCaml może być, że sam język jest chętny, a strumienie nie są równoległe do tego koncepcja, a strumienie nie mogą być zminimalizowane. (jest to jednak spekulacja)

2

Strumienie były całkiem dobre z obsługą składni camlp4, bez których nie są w ogóle przydatne. Tak było w czasach dawno minionych (choć nadal jest możliwe do zastosowania, teoretycznie). Zgodnie z odniesieniem Drupa zostaną one nawet usunięte w najbliższej przyszłości (w tym roku) z języka podstawowego i prawdopodobnie zostaną przeniesione do samodzielnej biblioteki.

To wszystko, aby nie powiedzieć, że coś jest nie tak ze strumieniami jako strukturą danych. Jest to wciąż bardzo cenna technika używana w wielu projektach OCaml, po prostu używają różnych bibliotek, które ją implementują. Dostępne są pakiety: Sequence, baterie Enum, Simon Birdana gen i sequence, pakiet Josepha Abrahamsona fstream, aby wymienić tylko kilka.

+0

Tuż po nitpick, pakiety Simona Cruanesa to 'gen' i' sequence'. ;) – Drup