Article View: pl.comp.lang.funkcyjne
Article #822Re: Ocaml i GUI
From: Tomasz Zielonka
Date: Wed, 03 May 2006 08:53
Date: Wed, 03 May 2006 08:53
52 lines
3328 bytes
3328 bytes
Wojciech Muła wrote:
> Tomasz Zielonka wrote:
>> Często reklamuje się go jako język funkcyjny z efektywną implementacją,
>> ale wiele funkcyjności i elegancji poświęcono w nim dla efektywności,
>> czasem w głupi sposób.
>
> Na przykład co?
Na przykład imperatywny typ string. Rozumiem imperatywne łańcuchy w C++
- tam modyfikuję przeważnie prywatną kopię. W OCamlu przy semantyce
przekazywania obiektów przez referencję to dosyć dziwny wybór. Łatwo coś
zepsuć. Rozważ poniższy przykład:
# let f = function false -> "aaa" | true -> "bbb";;
val f : bool -> string = <fun>
# (f false).[0] <- 'X';;
- : unit = ()
# (f true).[0] <- 'Y';;
- : unit = ()
# (f false);;
- : string = "Xaa"
# (f true);;
- : string = "Ybb"
Dodatkowo brak w standardowych bibliotekach funkcji do konwersji
string->char list i na odwrót. Dziwi mnie trochę opinia Xaviera Leroy na
ten temat:
Actually, the list representation of strings is so repugnant that I
don't even want to include "explode" and "implode" coercions between
string and char list in the standard library. A standard library
should steer users away from algorithmically-inefficient code. By
not having implode and explode in the library, I hope OCaml
programmers will come to the realization that the proper way to
operate on strings is either via block operations (the String
module, regexps, etc), or by recursion on integer indices.
A więc traktuje się programistów OCamla jak dzieci, które trzeba
prowadzić za rączkę, żeby nie zrobiły sobie krzywdy. Efekt jest taki, że
wiele osób samodzielnie pisze implode i explode.
Mi osobiście bardzo podoba się to, że w Haskellu type String to
po prostu lista znaków. Ten sposób podkreśla, czym rzeczywiście
jest ciąg znaków. Niemożliwe jest stworzenie typu napisowego, który
jest efektywnościowo idealny - dlatego przy projektowaniu języka
czasem lepiej jest w ogóle zapomnieć o efektywności i skupić się na
elegancji. Efektywność można osiągnąć używając zewnętrznej,
niestandardowej reprezentacji napisów, odpowiedniej do aktualnych
wymagań wydajnościowych.
Pozdrawiam
Tomasz
Technical Details
Message-ID:
<slrne5grnp.6gh.tomasz.zielonka@tomekz.gem.lan>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mailReferences:
<slrne4snad.1kc.wojciech_mula@cat.tac> <b0t65257k8c02jllv07gi54eudpjcckhlu@4ax.com> <slrne57sq1.a9m.wojciech_mula@cat.tac> <e326qc$n7g$1@atlantis.news.tpi.pl> <slrne5a0k7.b8e.tomasz.zielonka@tomekz.gem.lan> <e335ql$shu$1@nemesis.news.tpi.pl> <slrne5bdkn.bs4.tomasz.zielonka@tomekz.gem.lan> <slrne5c2na.17d.wojciech_mula@cat.tac>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail From: Tomasz Zielonka <tomasz.zielonka@gmail.com> Newsgroups: pl.comp.lang.funkcyjne Subject: Re: Ocaml i GUI Date: Wed, 3 May 2006 08:53:55 +0000 (UTC) Organization: ATMAN Lines: 52 Message-ID: <slrne5grnp.6gh.tomasz.zielonka@tomekz.gem.lan> References: <slrne4snad.1kc.wojciech_mula@cat.tac> <b0t65257k8c02jllv07gi54eudpjcckhlu@4ax.com> <slrne57sq1.a9m.wojciech_mula@cat.tac> <e326qc$n7g$1@atlantis.news.tpi.pl> <slrne5a0k7.b8e.tomasz.zielonka@tomekz.gem.lan> <e335ql$shu$1@nemesis.news.tpi.pl> <slrne5bdkn.bs4.tomasz.zielonka@tomekz.gem.lan> <slrne5c2na.17d.wojciech_mula@cat.tac> Reply-To: tomasz.zielonka@gmail.com NNTP-Posting-Host: host70-grc.spray.net.pl Mime-Version: 1.0 X-Trace: node1.news.atman.pl 1146646435 55686 83.143.44.70 (3 May 2006 08:53:55 GMT) X-Complaints-To: abuse@atman.pl NNTP-Posting-Date: Wed, 3 May 2006 08:53:55 +0000 (UTC) User-Agent: slrn/0.9.8.1pl1 (Debian) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit