Recent Changes · Search:

Functional Programming

Type Inference

Toss

  • (incorporates former Speagram)

Emacs

Kurs Pascala

Artificial General Intelligence

AI:

Algorithmic Game Theory: Prediction Markets (po polsku)

Programming in Java

kurs pracy w systemie Linux

Evolutionary Algorithms

Animation

Data Stores and Data Mining

Language Understanding

Systemy Inteligentnych Agentów

Przetwarzanie Języka Naturalnego

Programowanie Funkcjonalne

PmWiki

pmwiki.org

add user

edit SideBar

ProgFun.Reaktywne History

Hide minor edits - Show changes to output

Changed lines 3-4 from:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], biblioteki dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]], moduł ''Event'' [[http://caml.inria.fr/pub/docs/manual-ocaml/libref/Event.html]], oraz podejście obiektowe. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]]. Zbadamy też bliżej FrTime.
to:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], ''JoCaml'' [[http://moscova.inria.fr/jocaml/]], biblioteki dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]], moduł ''Event'' [[http://caml.inria.fr/pub/docs/manual-ocaml/libref/Event.html]], oraz podejście obiektowe.  Zbadamy też bliżej FrTime. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]].
Added lines 68-69:
!!! JoCaml
December 27, 2006, at 10:57 PM by 83.27.163.250 -
Changed lines 3-4 from:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]]. Zbadamy też bliżej FrTime.
to:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], biblioteki dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]], moduł ''Event'' [[http://caml.inria.fr/pub/docs/manual-ocaml/libref/Event.html]], oraz podejście obiektowe. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]]. Zbadamy też bliżej FrTime.
Added lines 63-70:

!!! Threads / Event

!!! Podejście obiektowe

!! Szerszy kontekst

!!! "Rachunki procesów" ([[http://en.wikipedia.org/wiki/Process_calculi | ''process calculi'']])
Changed line 62 from:
to:
Wzorowane na [[http://citeseer.ist.psu.edu/maraninchi98modeautomata.html]]. Ze stanami (trybami, ''modes'') programu są związane równania określające wartości strumieni (lokalnych i wyjściowych strumieni automatu), taka definicja przez przypadki. Stany zmieniają się zgodnie z funkcją przejścia z wartownikami (warunkami na strumieniach, które muszą być spełnione, żeby przejść do danego stanu).
Changed lines 55-57 from:
!!!! "Signals = Events"

to:
!!!! Zegary
Każde wyrażenie ma oprócz zwykłego typu typ zegarowy, mówiący jak jego części są taktowane, np. jak taktowanie wyniku funkcji zależy od taktowań argumentów funkcji. Zegar to strumień boolowski, przetaktowujący (spowalniający) jakiś inny zegar: tyknięcia zegara są w chwilach @@true@@ strumienia (względem tego innego zegara). Rozłącznie taktowane strumienie można łączyć w gęściej taktowane. Jeśli nasz proces @@a@@ jest wolniejszy niż proces @@b@@ z którym się komunikujemy, to próbkujemy @@b@@ zegarem dla @@a@@, jeśli @@b@@ jest wolniejszy, to budujemy strumień przytrzymujący ostatnią wartość @@b@@ do nadejścia następnej.

!!!! "
Events = Valued Signals"
Sygnały (czyli zdarzenia w terminologii ''Yampa''), to strumienie powstałe ze strumieni taktowanych innym zegarem: sygnał jest obecny, jeśli zegar oryginalnego strumienia ma tyknięcie, i wartością sygnału jest wartość z oryginalnego strumienia. Można dopasowywać wartości obecnych sygnałów na zasadzie dopasowywania wzorca: jeśli definiujemy strumień, to trzeba podać gałąź domyślną gdy nie ma żadnego z dopasowywanych sygnałów, a jeśli definiujemy sygnał, to przy braku dopasowania nie zostanie on wyemitowany.
Changed lines 45-48 from:
to:
Jest systemem synchronicznym. Podstawowymi obiektami są procesy, które komunikują się ze sobą przy pomocy nazwanych sygnałów. Procesy buduje się ze zwykłych wyrażeń OCamla, złożenia sekwencyjnego procesów ([@a; b@]: najpierw wykonaj podproces @@a@@, następnie @@b@@), złożenia równoległego (współbieżnego) procesów (kończy się, gdy obydwa podprocesy się kończą), operacji "czekaj do następnej chwili (@@pause@@)", operacji "oczekuj na nadejście sygnału o danej nazwie" (nazwy są wartościami, można je przekazywać jako parametry), operacji "wykonuj podproces do nadejścia sygnału o danej nazwie", operacji testującej obecność sygnału, etc. Sygnały jak zwykle przekazują wartości. Reactive ML ma bardzo ładną semantykę dzięki rozdzieleniu kroku systemu na dwie fazy: fazę obliczeń i generowania sygnałów oraz fazę odbierania sygnałów ("End of Instant's Reaction").

Jeśli w jednej chwili wyemitowano kilka wartości danego sygnału, to są one zwijane przez funkcję zadaną dla tego sygnału (@@gather@@), domyślnie budującą multizbiór. W trakcie pierwszej fazy obliczeń procesy oczekujące na dany sygnał są ustawiane w kolejkę do tego sygnału, pozostałe procesy tworzą kolejkę procesów aktywnych. W drugiej fazie, procesy które odebrały sygnał są wstawiane do kolejki procesów aktywnych, i system przechodzi do następnego kroku, w którym oblicza procesy z tej kolejki.

Changed lines 50-51 from:
to:
Jest to system synchroniczny. Podstawowymi pojęciami Lucid Synchrone są strumień i zegar.
Changed lines 53-54 from:
to:
Zwykłe wartości OCamla są zamieniane na strumienie stałe, funkcje liczą na strumieniach "po osiach" (pointwise). Można dostawiać wartość z przodu strumienia, opóźniając ten strumień, np. [@ s -. (0. fby s)@] to strumień przyrostów strumienia @@s@@. Proces ze stanem (np. strumień liczb naturalnych) można zrobić przez połączenie opóźnienia i rekurencji.
Added line 57:
Added line 59:
Changed lines 17-41 from:
->For each signal in a FrTime program, we construct a signal data structure. The
  data structure contains an update procedure, which computes the signal’s value, and a
  mutable field that stores the signal’s most recently computed value. Thus, there is an
  implicit notion of real time, which the system exhibits directly.

->A special thread called the signal manager is responsible for keeping signals current.
  It maintains an explicit graph of the dependencies between signals. For example,
  when we evaluate (even? seconds), the resulting behavior depends on seconds, so the
  signal manager needs to recompute it whenever seconds changes.

->The manager uses an asynchronous message queue to control all computation. For
  example, when seconds changes, the manager sends itself an update message for each
  dependent signal. When it dequeues such a message, it recomputes the corresponding
  signal. This in turn may demand recomputation of yet more signals, so evaluation proceeds
  recursively in a breadth-first, bottom-up manner.

->Some signals require re-evaluation after intervals of time. For example, seconds
  needs to update once every second. The signal manager supports this capability by
  keeping a prioritized “alarm” queue, which maps signals to update times. On each iteration
  of its processing loop, the manager checks whether the current time exceeds
  the earliest alarm in the queue. If so, it executes the corresponding update; otherwise,
  it sleeps until either the next alarm or the arrival of a message. Our asynchronous
  message-passing library makes this easy by providing a receive construct with a fine
  (millisecond-granularity) timeout parameter.
to:
-> For each signal in a FrTime program, we construct a signal data structure. The
   data structure contains an update procedure, which computes the signal’s value, and a
   mutable field that stores the signal’s most recently computed value. Thus, there is an
   implicit notion of real time, which the system exhibits directly.

-> A special thread called the signal manager is responsible for keeping signals current.
   It maintains an explicit graph of the dependencies between signals. For example,
   when we evaluate (even? seconds), the resulting behavior depends on seconds, so the
   signal manager needs to recompute it whenever seconds changes.

-> The manager uses an asynchronous message queue to control all computation. For
   example, when seconds changes, the manager sends itself an update message for each
   dependent signal. When it dequeues such a message, it recomputes the corresponding
   signal. This in turn may demand recomputation of yet more signals, so evaluation proceeds
   recursively in a breadth-first, bottom-up manner.

-> Some signals require re-evaluation after intervals of time. For example, seconds
   needs to update once every second. The signal manager supports this capability by
   keeping a prioritized “alarm” queue, which maps signals to update times. On each iteration
   of its processing loop, the manager checks whether the current time exceeds
   the earliest alarm in the queue. If so, it executes the corresponding update; otherwise,
   it sleeps until either the next alarm or the arrival of a message. Our asynchronous
   message-passing library makes this easy by providing a receive construct with a fine
   (millisecond-granularity) timeout parameter.

To rozwiązanie przypomina ''Adaptive Functional Programming'' [[http://citeseer.ist.psu.edu/acar01adaptive.html]]
.
Changed lines 11-12 from:
Podstawowym typem są sygnały: zdarzenia (''events'') i zachowania (''behaviors''): w rzeczywistości są to funkcje sygnałowe. System rejestruje sygnały "wynikowe" programu: punkty końcowe (''endpoints'') i uaktualnia się przez zaaplikowanie wszystkich (?) punktów końcowych do wejścia systemu. W tym sensie jest synchroniczny. Z drugiej strony, uaktualnienie następuje na życzenie bibliotek generujących wejścia systemu (wywołujących @@send_event@@ albo zmieniającą wartość danego zachowania @@set_cell@@). Sygnały są memoizowane dla danej chwili "w punktach złożenia" w każdym sygnale złożonym. Zauważ, że gdyby sygnały nie były funkcyjne tylko imperatywne -- gdyby modyfikowały się zamiast konstruować kontynuację -- to zepsułoby semantykę Reactive Toolkit, bo sygnały robiłyby w jednej chwili tyle kroków, ile razy są wykorzystane (chyba, żeby memoizację przesunąć z zastosowania sygnału na sam sygnał).
to:
Podstawowym typem są sygnały: zdarzenia (''events'') i zachowania (''behaviors''): w rzeczywistości są to funkcje sygnałowe. System rejestruje sygnały "wynikowe" programu: punkty końcowe (''endpoints'') i uaktualnia się przez zaaplikowanie wszystkich (?) punktów końcowych do wejścia systemu. W tym sensie jest synchroniczny. Z drugiej strony, uaktualnienie następuje na życzenie bibliotek generujących wejścia systemu (wywołujących @@send_event@@ albo zmieniającą wartość danego zachowania @@set_cell@@). Sygnały są memoizowane dla danej chwili "w punktach złożenia" w każdym sygnale złożonym. Zauważ, że gdyby sygnały nie były funkcyjne tylko imperatywne -- gdyby modyfikowały się zamiast konstruować kontynuację -- to zepsułoby semantykę Reactive Toolkit, bo sygnały robiłyby w jednej chwili tyle kroków, ile mają wystąpień (chyba, żeby memoizację przesunąć z zastosowania sygnału na sam sygnał).
Changed lines 14-41 from:
to:
Jest to w pełni asynchroniczna, imperatywna implementacja programowania reaktywnego. Cytując "FrTime: Functional Reactive
Programming in PLT Scheme" (Gregory Cooper and Shriram Krishnamurthi):

->For each signal in a FrTime program, we construct a signal data structure. The
  data structure contains an update procedure, which computes the signal’s value, and a
  mutable field that stores the signal’s most recently computed value. Thus, there is an
  implicit notion of real time, which the system exhibits directly.

->A special thread called the signal manager is responsible for keeping signals current.
  It maintains an explicit graph of the dependencies between signals. For example,
  when we evaluate (even? seconds), the resulting behavior depends on seconds, so the
  signal manager needs to recompute it whenever seconds changes.

->The manager uses an asynchronous message queue to control all computation. For
  example, when seconds changes, the manager sends itself an update message for each
  dependent signal. When it dequeues such a message, it recomputes the corresponding
  signal. This in turn may demand recomputation of yet more signals, so evaluation proceeds
  recursively in a breadth-first, bottom-up manner.

->Some signals require re-evaluation after intervals of time. For example, seconds
  needs to update once every second. The signal manager supports this capability by
  keeping a prioritized “alarm” queue, which maps signals to update times. On each iteration
  of its processing loop, the manager checks whether the current time exceeds
  the earliest alarm in the queue. If so, it executes the corresponding update; otherwise,
  it sleeps until either the next alarm or the arrival of a message. Our asynchronous
  message-passing library makes this easy by providing a receive construct with a fine
  (millisecond-granularity) timeout parameter.

Changed lines 3-4 from:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]].
to:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]]. Zbadamy też bliżej FrTime.
Changed lines 11-12 from:
to:
Podstawowym typem są sygnały: zdarzenia (''events'') i zachowania (''behaviors''): w rzeczywistości są to funkcje sygnałowe. System rejestruje sygnały "wynikowe" programu: punkty końcowe (''endpoints'') i uaktualnia się przez zaaplikowanie wszystkich (?) punktów końcowych do wejścia systemu. W tym sensie jest synchroniczny. Z drugiej strony, uaktualnienie następuje na życzenie bibliotek generujących wejścia systemu (wywołujących @@send_event@@ albo zmieniającą wartość danego zachowania @@set_cell@@). Sygnały są memoizowane dla danej chwili "w punktach złożenia" w każdym sygnale złożonym. Zauważ, że gdyby sygnały nie były funkcyjne tylko imperatywne -- gdyby modyfikowały się zamiast konstruować kontynuację -- to zepsułoby semantykę Reactive Toolkit, bo sygnały robiłyby w jednej chwili tyle kroków, ile razy są wykorzystane (chyba, żeby memoizację przesunąć z zastosowania sygnału na sam sygnał).
Changed lines 5-7 from:
!! Reactive Toolkit

!!! Reactive Toolkit ''FrCore''
to:
!!! Reactive Toolkit

!!!! Reactive Toolkit ''FrCore''
Changed lines 10-22 from:
!!! Reactive Toolkit ''Fr''

!! FrTime

!! Reactive ML

!! Lucid Synchrone

!!! "Behaviors = Streams"

!!! "Signals = Events"

!!! Automaty (w szerokim sensie)
to:
!!!! Reactive Toolkit ''Fr''

!!! FrTime

!!! Reactive ML

!!! Lucid Synchrone

!!!! "Behaviors = Streams"

!!!! "Signals = Events"

!!!! Automaty (w szerokim sensie)
Added lines 1-2:
!! Jak działają
Changed lines 8-9 from:
Podstawowym typem są funkcje sygnałowe, dla danego wejścia obliczające wyjście oraz kontynuację (funkcję sygnałową dla kolejnego kroku systemu). Z mniejszych funkcji sygnałowych składa się większe, tak że wyjścia jednych funkcji sygnałowych stają się wejściami innych. Obliczenia są synchroniczne: krok systemu to zaaplikowanie głównej funkcji sygnałowej do wejścia systemu, obliczenia "rozchodzą się ''top-down''".
to:
Podstawowym typem są funkcje sygnałowe, dla danego wejścia obliczające wyjście oraz kontynuację (funkcję sygnałową w miejsce obliczanej, dla kolejnego kroku systemu). Obliczanie kontynuacji oznacza, że funkcja sygnałowa może ewoluować, posiada pamięć (stan). Z mniejszych funkcji sygnałowych składa się większe, tak że wyjścia jednych funkcji sygnałowych stają się wejściami innych. Obliczenia są synchroniczne: krok systemu to zaaplikowanie głównej funkcji sygnałowej do wejścia systemu, obliczenia "rozchodzą się ''top-down''". Zdarzenia (''events'') to wartości funkcji sygnałowych będące typu @@option@@, wartość @@None@@ oznacza, że zdarzenie nie zaszło.
Changed lines 12-13 from:
to:
!! FrTime
Changed lines 1-2 from:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Semantyka Reactive Toolkit jest wzorowana na ''Yampa'' [[http://www.haskell.org/yampa/]], a implementacja na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]].
to:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Reactive Toolkit jest wzorowany na ''Yampa'' [[http://www.haskell.org/yampa/]], oraz na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]].
Changed lines 6-7 from:
to:
Podstawowym typem są funkcje sygnałowe, dla danego wejścia obliczające wyjście oraz kontynuację (funkcję sygnałową dla kolejnego kroku systemu). Z mniejszych funkcji sygnałowych składa się większe, tak że wyjścia jednych funkcji sygnałowych stają się wejściami innych. Obliczenia są synchroniczne: krok systemu to zaaplikowanie głównej funkcji sygnałowej do wejścia systemu, obliczenia "rozchodzą się ''top-down''".
Added line 10:
Changed lines 3-9 from:
!! Wstępne uwagi
Lucid Synchrone jest najbogatszym językiem spośród tych trzech, a Reactive
ML najprostszym. Lucid Synchrone i Reactive ML są z czasem dyskretnym, a Reactive Toolkit łączy czas ciągły ze zdarzeniami w dyskretnych chwilach (ale w obecnej wersji nie daje dostępu do zegara czasu ciągłego). Zegary w Lucid Synchrone są "pierwotne" i łatwo się nimi manipuluje (można przetaktować każdy proces), a w Reactive ML trzeba zegary symulować przy pomocy sygnałów (tzn. jeśli chce się przetaktować jakiś proces, to trzeba od początku napisać go jako reaktywny względem zegara emitującego sygnały).

!! Szkic semantyk
Wartości OCamla są w Lucid Synchrone zamieniane na strumienie wartości, a typy na typy strumieni wartości odpowiednich typów, np. @@int@@ to typ strumieni liczb całkowitych a @@1@@ to strumień jedynek. Inaczej jest w Reactive ML: wartości OCamla oraz zdarzenia są odseparowane, wartości OCamla są natychmiastowe i mają taką samą semantykę jak w OCamlu, zdarzenia mają specjalny typ [@ ('a, 'b) event@], gdzie [@'a@] to typ wartości sygnału wejściowego, a [@'b@] wyjściowego. Lucid Synchrone i Reactive ML są systemami z czasem dyskretnym: odpowiedzi na zdarzenia i emisje zdarzeń są podzielone na tury. Reactive Toolkit łączy czas ciągły: zachowania -- obiekty, które w każdej chwili posiadają określoną wartość, z czasem dyskretnym: zachodzącymi w określonych chwilach zdarzeniami.

Podstawowym bytem w Reactive ML są nazwane sygnały.
to:
!! Reactive Toolkit

!!! Reactive Toolkit ''FrCore''

!!! Reactive Toolkit ''Fr''

!! Reactive
ML

!!
Lucid Synchrone

!!! "Behaviors = Streams"

!!! "Signals = Events"

!!! Automaty (w szerokim sensie
)
December 25, 2006, at 02:43 AM by 83.27.167.154 -
Added lines 3-5:
!! Wstępne uwagi
Lucid Synchrone jest najbogatszym językiem spośród tych trzech, a Reactive ML najprostszym. Lucid Synchrone i Reactive ML są z czasem dyskretnym, a Reactive Toolkit łączy czas ciągły ze zdarzeniami w dyskretnych chwilach (ale w obecnej wersji nie daje dostępu do zegara czasu ciągłego). Zegary w Lucid Synchrone są "pierwotne" i łatwo się nimi manipuluje (można przetaktować każdy proces), a w Reactive ML trzeba zegary symulować przy pomocy sygnałów (tzn. jeśli chce się przetaktować jakiś proces, to trzeba od początku napisać go jako reaktywny względem zegara emitującego sygnały).

Added line 9:
Podstawowym bytem w Reactive ML są nazwane sygnały.
December 24, 2006, at 09:05 PM by 83.27.167.154 -
Changed lines 1-5 from:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]].

!! Szkic semantyki
Wartości OCamla są w Lucid Synchrone zamieniane na strumienie wartości, a typy na typy strumieni wartości odpowiednich typów, np
. @@int@@ to typ strumieni liczb całkowitych a @@1@@ to strumień jedynek. Inaczej jest w Reactive ML: wartości OCamla oraz zdarzenia są odseparowane, wartości OCamla są natychmiastowe i mają taką samą semantykę jak w OCamlu, zdarzenia mają specjalny typ [@ ('a, 'b) event@], gdzie [@'a@] to typ wartości sygnału wejściowego, a [@'b@] wyjściowego.
to:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]]. Semantyka Reactive Toolkit jest wzorowana na ''Yampa'' [[http://www.haskell.org/yampa/]], a implementacja na ''FrTime'' dla PLT Scheme [[http://citeseer.ist.psu.edu/cooper04frtime.html]].

!! Szkic semantyk
Wartości OCamla s
ą w Lucid Synchrone zamieniane na strumienie wartości, a typy na typy strumieni wartości odpowiednich typów, np. @@int@@ to typ strumieni liczb całkowitych a @@1@@ to strumień jedynek. Inaczej jest w Reactive ML: wartości OCamla oraz zdarzenia są odseparowane, wartości OCamla są natychmiastowe i mają taką samą semantykę jak w OCamlu, zdarzenia mają specjalny typ [@ ('a, 'b) event@], gdzie [@'a@] to typ wartości sygnału wejściowego, a [@'b@] wyjściowego. Lucid Synchrone i Reactive ML są systemami z czasem dyskretnym: odpowiedzi na zdarzenia i emisje zdarzeń są podzielone na tury. Reactive Toolkit łączy czas ciągły: zachowania -- obiekty, które w każdej chwili posiadają określoną wartość, z czasem dyskretnym: zachodzącymi w określonych chwilach zdarzeniami.
December 24, 2006, at 07:47 PM by 83.27.162.249 -
Added lines 1-5:
Porównujemy języki na bazie OCamla: ''Lucid Synchrone'' [[http://www.lri.fr/~pouzet/lucid-synchrone/]], ''Reactive ML'' [[http://rml.inria.fr/]], oraz bibliotekę dla OCamla ''Objective Caml Reactive Toolkit'' [[http://users.wpi.edu/~squirrel/ocamlrt/]].

!! Szkic semantyki
Wartości OCamla są w Lucid Synchrone zamieniane na strumienie wartości, a typy na typy strumieni wartości odpowiednich typów, np. @@int@@ to typ strumieni liczb całkowitych a @@1@@ to strumień jedynek. Inaczej jest w Reactive ML: wartości OCamla oraz zdarzenia są odseparowane, wartości OCamla są natychmiastowe i mają taką samą semantykę jak w OCamlu, zdarzenia mają specjalny typ [@ ('a, 'b) event@], gdzie [@'a@] to typ wartości sygnału wejściowego, a [@'b@] wyjściowego.

Edit · History · Print · Recent Changes · Search · Links
Page last modified on January 09, 2007, at 01:27 AM