Thread View: pl.comp.lang.funkcyjne
6 messages
6 total messages
Started by DecatonE
Thu, 23 Oct 2003 18:58
Clean
Author: DecatonE
Date: Thu, 23 Oct 2003 18:58
Date: Thu, 23 Oct 2003 18:58
10 lines
1212 bytes
1212 bytes
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.
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
Re: Clean
Author: 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
Re: Clean
Author: DecatonE
Date: Fri, 24 Oct 2003 06:55
Date: Fri, 24 Oct 2003 06:55
30 lines
1861 bytes
1861 bytes
Tomasz Zielonka...
Dzięki za wyczerpującą wypowiedź.
Chyba pobawię się Cleanem, ale raczej po Haskellu ;)
> - ... sporo innych (czuję, że zapomniałem o czymś ważnym)
Pewnie o "concurrency" :)
Zobacz ten dokument:
http://citeseer.nj.nec.com/nocker91concurrent.html
Jest tam mowa o tworzeniu "parallel processes" i "interleaved
processes" ({P} i {I}), o kanałach komunikacyjnych...
Używa się tego jakoś tak (taka naiwna implementacja generatora
liczb Fibonacciego):
Fib 0 -> 1 |
Fib 1 -> 1
Fib n -> +l left right, |
left: {P} Fib(-l n 1),
right: {P} Fib(-l n 2) ;
W CleanBook tego nie znalazłem (może słabo szukałem...).
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
www.smlnj.org | Standart ML
Re: Clean
Author: Tomasz Zielonka
Date: Fri, 24 Oct 2003 07:27
Date: Fri, 24 Oct 2003 07:27
19 lines
1375 bytes
1375 bytes
DecatonE napisał: > >> - ... sporo innych (czuję, że zapomniałem o czymś ważnym) > > Pewnie o "concurrency" :) Wydaje mi się, że "concurrency" działało tylko na jakichś transputerach. Aktualna implementacja tego nie wspiera. Szkoda - bo to rzeczywiście mogła być ciekawa rzecz. Zatem "Concurrent" w Cleanie jest troche na wyrost. > adam Pozdrawiam, Tomek -- .signature: Too many levels of symbolic links
Re: Clean
Author: DecatonE
Date: Fri, 24 Oct 2003 08:08
Date: Fri, 24 Oct 2003 08:08
38 lines
2390 bytes
2390 bytes
Tomasz Zielonka...
> Wydaje mi się, że "concurrency" działało tylko na jakichś
> transputerach. Aktualna implementacja tego nie wspiera. Szkoda -
> bo to rzeczywiście mogła być ciekawa rzecz.
Można się i "konkurencyjnymi" rozwiązaniami posłużyć:
Alice:
http://www.ps.uni-sb.de/alice/
Oparty na Standard ML (duża kompatybilność)
Mozart:
http://www.mozart-oz.org
Engine (VM) wspólny z Alice, język bez kontroli typów czasu kompilacji.
Trochę dziwaczny (dużo klamer;)
ConcurrentML:
http://cml.cs.uchicago.edu/index.html
Mało wiem na razie, dokumentacja w znacznej części under-construction..
Concurrent Haskell, Parallel Haskell:
http://www.cs.mu.oz.au/fpu/ghc-guides/set/book-hslibs.html
http://www.macs.hw.ac.uk/~dsg/gph/docs/4.06/users_guide/concurrent-and-
parallel.html
http://citeseer.nj.nec.com/jones96concurrent.html
Dopiero czekają na przetrwienie przeze mnie ;)
Pewnie jest tego trochę więcej jeszcze...
Nie wiadomo czym zainteresować się w sposób szczególny.
Pod względem składni najbardziej odpowiada mi chyba Haskell
jednak (trochę bardziej niż SML). Nieco sobie o niej poczytałem
(ale monad nie strawiłem całkiem ;).
adam
--
rectifier[X]mesa.eu.org | e-mail (change [X] into @)
www.mesa.eu.org | my b&w photographs
Re: Clean
Author: DecatonE
Date: Fri, 24 Oct 2003 09:55
Date: Fri, 24 Oct 2003 09:55
7 lines
1214 bytes
1214 bytes
DecatonE... > Pewnie jest tego trochę więcej jeszcze... Choćby Erlang, zapomniałem... ;) adam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads