Article View: pl.comp.lang.funkcyjne
Article #519Re: Clean
From: Tomasz Zielonka
Date: Thu, 23 Oct 2003 21:04
Date: Thu, 23 Oct 2003 21:04
54 lines
3427 bytes
3427 bytes
DecatonE napisał: > Czy ktoś słyszał o języku Concurrent Clean? > Składnia na pierwszy rzut oka oparta bardzo ściśle > na Haskellu. > http://www.cs.kun.nl/~clean/ > Są tam nawet screen-shoty z gier (platformówek) w tym napisanych. Trochę się nim bawiłem. Jest podobny do Haskella nie tylko w składni. Oba są czysto funkcyjne, nie-gorliwe i mają podobne systemy typów (typy algebraiczne, klasy typów, wnioskowanie typów). Różnice też są. Najbardziej widoczną różnicą jest sposób włączenia operacji imperatywnych do języka z zachowaniem funkcyjności. Haskell stosuje do tego monady, Clean - Uniqueness Typing (nie wiem jak przetłumaczyć). UT to bardzo ciekawy i oryginalny pomysł (podobny mechanizm jest chyba w Mercury'm). W uproszczeniu polega on na tym, że w sygnaturze funkcji można zaznaczyć, że dany parametr jest unikalny, tzn. funkcja będzie posiadać jedyną referencję do niego. Dzięki temu można wykorzystać ten parametr w sposób normalnie niezgodny z czystą funkcyjnością, np. zmodyfikować go i zwrócić jako (niby) nową wartość, bo tego "oszustwa" i tak nikt nie będzie w stanie zaobserwować. Przykładem może być operacja uaktualnienia tablicy, która niby funkcyjnie zwraca nową tablicę, ale w rzeczywistości za kulisami modyfikuje podany jej parametr. UT wykorzystuje się też do wejścia/wyjścia. UT wydają się silniejsze od monady IO, bo pozwalają na większą kontrolę nad operacjami imperatywnymi. Jeżeli napiszemy funkcję typu *File -> *File, która ma zmodyfikować plik, mamy pewność, że funkcja ta nie wykonuje żadnych innych operacji IO. Z drugiej strony wymusza to trochę uciążliwy styl programowania, gdzie wszystko się jawnie przekazuje po całym programie, nawet stan świata (World) :). No i w Haskellu można z monadami robić różne fajne rzeczy, są transformatory monad, łatwiej jest zaimplementować wyjątki, itp. Inne różnice to: - rozdzielenie modułu na deklaracje i implementację - składnia (jednak jest inna) - biblioteka standardowa (zupełnie inna hierarchia klas typów, itp.) - ObjectIO - ponoć bardzo dobra biblioteka do programowania aplikacji okienkowych - nie sprawdzałem, bo wersja Linuksowa była traktowana po macoszemu - mniej kompilatorów, bibliotek, ... - ... sporo innych (czuję, że zapomniałem o czymś ważnym) Moim zdaniem warto poznać i Cleana, ale lepszy do nauki i praktyki jest Haskell. Pozdrawiam, Tomek -- .signature: Too many levels of symbolic links
Technical Details
Message-ID:
<slrnbpggj0.hr1.t.zielonka@zodiac.mimuw.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.gazeta.pl!news.internetia.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mailReferences:
<Xns941DD5BE5854Ddupajasio@127.0.0.1>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.gazeta.pl!news.internetia.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mail From: Tomasz Zielonka <t.zielonka@students.mimuw.edu.pl> Newsgroups: pl.comp.lang.funkcyjne Subject: Re: Clean Date: Thu, 23 Oct 2003 21:04:37 +0000 (UTC) Organization: MIMUW Lines: 54 Message-ID: <slrnbpggj0.hr1.t.zielonka@zodiac.mimuw.edu.pl> References: <Xns941DD5BE5854Ddupajasio@127.0.0.1> Reply-To: t.zielonka@students.mimuw.edu.pl NNTP-Posting-Host: zodiac.mimuw.edu.pl Mime-Version: 1.0 X-Trace: kenny.mimuw.edu.pl 1066943077 7485 10.1.1.1 (23 Oct 2003 21:04:37 GMT) X-Complaints-To: abuse@news.mimuw.edu.pl NNTP-Posting-Date: Thu, 23 Oct 2003 21:04:37 +0000 (UTC) User-Agent: slrn/0.9.7.4 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit