🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.funkcyjne
Article #775

Re: j. funkcyjne - jakie zastosowania?

#775
From: Artur Siekielski
Date: Fri, 20 Jan 2006 06:05
42 lines
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-mail
References: <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