🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Clean

#519
From: Tomasz Zielonka
Date: Thu, 23 Oct 2003 21:04
54 lines
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-mail
References: <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