Korzystanie z Haskell dla dużych systemów czasu rzeczywistego: jak (jeśli?)?

Byłem ciekaw, czy możliwe jest zastosowanie mocy Haskell do osadzonego realtime world, i w googling znalazłem Atom Pakiet. Zakładam, że w złożonym przypadku kod może mieć wszystkie klasyczne błędy C-awarie, uszkodzenia pamięci itp., które następnie muszą być przypisane do oryginalnego kodu Haskell, który spowodował je. Jest to więc pierwsza część pytania: "Jeśli miałeś doświadczenie z atomem, jak poradziłeś sobie z zadaniem debugowania błędy niskiego poziomu w skompilowanym kodzie C i naprawianie ich w oryginalnym kodzie Haskell ?"

Szukałem więcej przykładów dla atomu, ten wpis na blogu wspomina o wynikowym kodzie C 22KLOC (i oczywiście bez kodu:), dołączony przykład jest zabawką. to i to odniesienia mają nieco bardziej praktyczny kod, ale na tym się kończy. A powodem, dla którego umieściłem "spore" w temacie jest to, że jestem najbardziej zainteresowany, Czy mógłbyś podzielić się swoimi doświadczeniami z pracy z wygenerowano kod C w zakresie 300KLOC+.

Ponieważ jestem początkującym Haskellem, oczywiście mogą być inne sposoby, których nie znalazłem z powodu moich nieznanych niewiadomych, więc wszelkie inne wskazówki dla samokształcenia w tej dziedzinie byłyby bardzo mile widziane - i to jest druga część pytania - "Jakie byłyby inne praktyczne metody (jeśli) robienia rozwoju w czasie rzeczywistym w Haskell?". Jeśli multicore jest również na zdjęciu, to jest to dodatkowy plus: -)

(o wykorzystaniu samego Haskella w tym celu: z tego, co czytałem w ten wpis na blogu, śmieciarstwo i lenistwo w Haskell sprawia, że jest to raczej nieeterministyczne planowanie, ale może w ciągu dwóch lat coś się zmieniło. Real world Haskell programming pytanie na tak było najbliżej tego tematu)

Uwaga: "real-time" powyżej byłoby bliższe "hard realtime" - jestem ciekaw, czy jest możliwe zapewnienie, że czas pauzy, gdy główne zadanie nie jest wykonywane jest poniżej 0,5 ms.

Author: Community, 2009-08-12

5 answers

W Galois używamy Haskell do dwóch rzeczy:

  • Soft real time( warstwy urządzeń systemu operacyjnego, sieci), gdzie czasy reakcji 1-5 ms są wiarygodne. GHC generuje szybki kod i ma mnóstwo wsparcia dla dostrajania GC i scheduler, aby uzyskać właściwe timingi.
  • dla prawdziwych systemów czasu rzeczywistego Edsl są używane do generowania kodu dla innych języków, które zapewniają silniejsze Gwarancje czasu. Np. Cryptol, Atom i drugi pilot.

Więc należy uważać, aby odróżnić EDSL (drugi pilot lub Atom) z języka gospodarza (Haskell).


Kilka przykładów systemów krytycznych, a w niektórych przypadkach systemów czasu rzeczywistego, pisanych lub generowanych przez Haskella, produkowanych przez Galois.

EDSLs

Systemy

  • HaLVM -- lekki mikrokernel do wbudowanych i mobilnych aplikacji
  • TSE -- urządzenie sieciowe typu cross-domain (poziom bezpieczeństwa)
 47
Author: Don Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 14:41:36

Minie dużo czasu, zanim pojawi się system Haskell, który zmieści się w małej pamięci i może zagwarantować czasy pauzy poniżej milisekundy. Społeczność Haskell implementors po prostu nie wydaje się być zainteresowany tego rodzaju cel.

Istnieje zdrowe zainteresowanie używaniem Haskella lub czegoś podobnego do Haskella do kompilacji do czegoś bardzo wydajnego; na przykład, Bluespec kompiluje się na sprzęcie.

Myślę, że nie spełni Twoich potrzeb, ale jeśli jesteś zainteresowany Programowanie funkcyjne i systemy wbudowane powinieneś poznać Erlang .

 6
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-12 03:36:35

Andrzej,

Tak, debugowanie problemów poprzez wygenerowany kod z powrotem do oryginalnego źródła może być trudne. Jedną z rzeczy, które Atom Zapewnia, jest środek do badania wyrażeń wewnętrznych, a następnie pozostawia, jeśli do Użytkownika, jak obsługiwać te sondy. Do testowania pojazdów budujemy nadajnik (w atomie) i przesyłamy sondy na magistralę CAN. Możemy następnie przechwycić te dane, sformatować je, a następnie wyświetlić je za pomocą narzędzi takich jak GTKWave, zarówno w post-processingu, jak i w czasie rzeczywistym. Do symulacji oprogramowania, sondy są traktowane inaczej. Zamiast pobierać dane sondy z protokołu CAN, do kodu C wykonuje się haki, aby bezpośrednio podnieść wartości sondy. Wartości sondy są następnie wykorzystywane w ramach testów jednostkowych (rozproszonych z Atom) w celu określenia, czy test przejdzie lub nie i obliczyć zasięg symulacji.

 6
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-17 13:14:17

Nie wydaje mi się, aby Haskell, ani inne języki zbierane ze śmieci były bardzo dobrze dostosowane do systemów w czasie rzeczywistym, ponieważ GC mają tendencję do amortyzacji swoich czasów w krótkich przerwach.

Pisanie w atomie nie jest dokładnie programowaniem w Haskell, ponieważ Haskell tutaj może być postrzegany jako czysto preprocesor dla rzeczywistego programu, który piszesz.

Myślę, że Haskell jest awesome preprocesorem, a używanie DSEL ' ów jak Atom jest prawdopodobnie świetnym sposobem na stworzenie sporych systemów w czasie rzeczywistym, ale ja Nie wiem, czy Atom pasuje do ustawy, czy nie. Jeśli nie, jestem prawie pewien, że jest to możliwe (i zachęcam każdego, kto to robi!), aby zaimplementować DSEL, który to robi.

Posiadanie bardzo silnego pre-procesora jak Haskell dla języka niskopoziomowego otwiera ogromne okno możliwości implementacji abstrakcji poprzez generowanie kodu, które są znacznie bardziej niezgrabne, gdy są implementowane jako generatory tekstu kodu C.

 4
Author: Peaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-12 12:31:05

Wygłupiałem się z atomem. Jest całkiem fajny, ale myślę, że jest najlepszy dla małych systemów. Tak działa w ciężarówkach i autobusach i wdraża rzeczywiste, krytyczne aplikacje, ale to nie znaczy, że aplikacje te są koniecznie duże lub złożone. To naprawdę jest dla trudnych aplikacji w czasie rzeczywistym i dokłada wszelkich starań, aby każda operacja trwała dokładnie tyle samo czasu. Na przykład, zamiast instrukcji if / else, która warunkowo wykonuje jedną z dwóch gałęzi kodu, które mogą różni się czasem działania, posiada instrukcję "mux", która zawsze wykonuje obie gałęzie przed warunkowym wyborem jednej z dwóch obliczonych wartości(więc całkowity czas wykonania jest taki sam, niezależnie od wybranej wartości). Nie ma żadnego znaczącego systemu typów innych niż wbudowane typy (porównywalne z C), które są wymuszane przez wartości GADT przekazywane przez Monad atomu. Autor pracuje nad statycznym narzędziem weryfikacji, które analizuje wyjściowy kod C, co jest całkiem fajne (wykorzystuje SMT solver), ale myślę, że Atom skorzystałby z większej liczby funkcji i kontroli na poziomie źródłowym. Nawet w mojej aplikacji wielkości zabawki (kontroler latarki LED), zrobiłem szereg błędów dla początkujących, że ktoś bardziej doświadczony z pakietu może uniknąć, ale to spowodowało błędny kod wyjściowy, że wolałbym zostać złapany przez kompilator zamiast przez testowanie. Z drugiej strony nadal jest w wersji 0.1.coś takiego niewątpliwie nadchodzi.

 4
Author: solrize,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 22:48:42