Article View: pl.comp.lang.funkcyjne
Article #775Re: j. funkcyjne - jakie zastosowania?
From: Artur Siekielski
Date: Fri, 20 Jan 2006 06:05
Date: Fri, 20 Jan 2006 06:05
42 lines
3477 bytes
3477 bytes
czwartek, 19 sty, Tomasz Zielonka: >>> Jestem nowy w temacie języków funkcyjnych - w jakich zastosowaniach >>> spisują się one najlepiej? >> Właśnie uczestniczę w takim małym projekcie, którego celem jest stworzenie >> symulatora pewnego modelu obliczeń mobilnych. Model jest zdefiniowany >> matematycznie. Implementacja jądra symulatora została wykonana w Haskellu >> (choć na początku Haskell miał służyć tylko do stworzenia prototypu). > Mozna dowiedziec sie czegos wiecej, np. czy to projekt komercyjny czy > akademicki? opensource? Jest to projekt akademicki, robiony w Instytucie Podstaw Informatyki PAN w Sopocie. Kod źródłowy nie jest w tej chwili udostępniany, ale myślę, że nie byłoby z tym problemu. Sam model matematyczny to hipersieci Petriego. Ma on tę zaletę nad podobnymi formalizmami, że można stosować model checking. Pierwsza wersja naiwnego model checkera została stworzona w Haskellu, jednak w tym wypadku sprawa wydajności okazała się kluczowa, a ciężko robić optymalizacje w leniwym Haskellu czy choćby wnioskować, co się aktualnie oblicza. Sprawa jest dziwna, bo szacując matematycznie ilość potrzebnych obliczeń w pewnym przykładzie nie wychodzi ich dużo, a Haskell oblicza to długo. Problemem jest zapewne wielokrotne wykonywanie tych samych obliczeń (dlaczego nie ma prostego sposobu na "function memoization"?!), ale mimo użycia profilera nie udało mi się znaleźć tych kluczowych miejsc... Ostatecznie ma być użyty lepszy algorytm modelcheckujący (co nie jest trywialne, bo logika modelu jest niestandardowa), a model checker ma być przepisany na coś imperatywnego (Java...). Symulator jest skonstruowany następująco: model jest zaimplementowany w Haskellu, wyświetlanie modelu jest realizowane przez program uDrawGraph, służący do wyświetlania i edytowania grafów, a połączenie pomiędzy Haskellem a uDrawGraphem jest napisane w Javie. Niestety połączenie Haskella z Javą jest robione przez stdout/stdin, ponieważ nie udało mi się znaleźć działającego sposobu na wywoływanie Haskella z Javy (w drugą stronę o dziwo się da). Gdybym dzisiaj miał decydować o języku implementacji, byłbym za jakimś MLem, bo miałbym tę samą ekspresywność, a język jest bardziej praktyczny (i chyba nawet są jakieś MLe kompilowane do bajtkodu JVM...). Aha, pisząc w Haskellu dosięgła nas następująca zmora: okazało się, że żeby zrobić "coś", trzeba wprowadzić monadę, co wymagałoby przepisania praktycznie całego programu (oczywiście ze zmianą wszystkich typów funkcji włącznie)...
Technical Details
Message-ID:
<dqpuif$g25$1@opal.futuro.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!not-for-mailReferences:
<dpc61g$f0l$1@news.onet.pl> <dqouds$run$1@opal.futuro.pl> <slrndt000n.evc.tomasz.zielonka@localhost.localdomain>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!not-for-mail From: Artur Siekielski <gruesome@REMOVEpoczta.onet.pl> Newsgroups: pl.comp.lang.funkcyjne Subject: Re: j. funkcyjne - jakie zastosowania? Date: Fri, 20 Jan 2006 06:05:03 +0000 (UTC) Organization: FARR Lines: 42 Message-ID: <dqpuif$g25$1@opal.futuro.pl> References: <dpc61g$f0l$1@news.onet.pl> <dqouds$run$1@opal.futuro.pl> <slrndt000n.evc.tomasz.zielonka@localhost.localdomain> NNTP-Posting-Host: 25-m.sm-rozstaje.pl Mime-Version: 1.0 X-Trace: opal.futuro.pl 1137737103 16453 83.142.178.25 (20 Jan 2006 06:05:03 GMT) X-Complaints-To: usenet@futuro.pl NNTP-Posting-Date: Fri, 20 Jan 2006 06:05:03 +0000 (UTC) X-Sux: USA User-Agent: slrn/0.9.8.1pl1 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit