🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15722

Re: pl.comp.objects FAQ (Frequently Asked Questions and more)

#15722
From: Marcin 'Qrczak' Kowalczyk
Date: Mon, 05 Mar 2007 23:36
53 lines
4235 bytes
Dnia 04-03-2007, nie o godzinie 22:09 +0000, Sektor van Skijlen
napisał(a):

> Tak, tylko że jeśli "wierzymy w podział na obiekty wartościowe i
> niewartościowe" (czytaj: mamy oczy tam gdzie trzeba), to relacja 'is' w
> obiektach wartościowych jest nam zbędna, a '==' w obiektach niewartościowych
> również nie ma sensu.

Ten idealistyczny obraz, teoretycznie słuszny, sprawia pewne trudności
w językach, w których wiele podstawowych typów jest zmienialnych.

(Wyjątkowo nie dotyczy to C++, które pracuje w innym paradygmacie:
powszechnie niejawnie kopiuje obiekty, przez co zmienialność obiektów
ma węższe konsekwencje. Przy innym stylu programowania analogie między
językami przestają działać.)

Trudności polegają na tym, że jeśli np. jedyny typ stringów jest
zmienialny, to formalnie przestaje być typem wartościowym. Sam
napisałeś: „mutable string - jeśli mówimy o czymś takim, jak
StringBuilder - nie jest już typem wartościowym, gdyż zmienność obiektu
wchodzi w interakcję z jego tożsamością”. Tyle że w takim języku on jest
również powszechnie używany w roli typu wartościowego! Prawdopodobnie
częściej niż jako „zmienna stringowa”. Większość użyć wykorzystuje
zmienialność najwyżej w trakcie konstrukcji, a później taki obiekt już
nie jest zmieniany — za to różne moduły swobodnie przechowują wskaźniki
do niego, zakładając, że już się nie zmieni. Porównanie jego zawartości
staje się powszechne.

Stąd część języków wychodzi z założenia, że będzie to bardziej
praktycznie, jeśli domyślna równość w takim przypadku porówna zawartość.
Czyli dla takich obiektów mamy dwa sensowne warianty równości.

Zwłaszcza że tożsamość różnych prostych typów, np. kolekcji, częściej
istnieje na poziomie koncepcyjnym (klonujemy obiekt, kiedy mamy ochotę
zapamiętać jego bieżący stan, ale jeszcze go zmieniać, i pilnujemy się,
w które miejsce przekazujemy którego klona) niż w sensie jawnego
porównania tożsamości dwóch obiektów nieznanego pochodzenia.

Tak jest na przykład w Pythonie w przypadku list i słowników (ale nie
stringów, które są immutable).

Lisp i Scheme są zgodne z ogólną teorią, jeśli za podstawową równość
(czy też równoważność) przyjąć EQL / eqv?; ona nie zmienia się w czasie
i zmienialne obiekty porównuje po tożsamości, a liczby i znaki po
wartości (niestety nie można robić własnych typów wartościowych).
Ale ponieważ stringi, listy i tablice są dostępne wyłącznie w wersji
zmienialnej, mamy też EQUAL / equal?, które schodzi do ich elementów,
w dodatku rekurencyjnie z tą samą operacją.

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak@knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID: <1173137761.17765.52.camel@qrnik>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
References: <pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl> <eru75v$dmm$1@bandai.magma-net.pl> <ervbaa$am4$1@inews.gazeta.pl> <pan.2007.02.26.21.12.45.8078@go2.pl> <es6b6u$2ls$1@kujawiak.man.lodz.pl> <esbllu$51n$1@bandai.magma-net.pl> <esbv7t$7o$1@kujawiak.man.lodz.pl> <1172940339.25227.28.camel@qrnik> <escc9e$2h2$1@kujawiak.man.lodz.pl> <esd1k1$9bp$1@bandai.magma-net.pl> <esemb6$2r3$1@kujawiak.man.lodz.pl> <eses6u$8fm$1@inews.gazeta.pl> <esf3am$r52$1@bandai.magma-net.pl> <esfg25$b2m$1@kujawiak.man.lodz.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl>
Newsgroups: pl.comp.objects
Subject: Re: pl.comp.objects FAQ (Frequently Asked Questions and more)
Date: Tue, 06 Mar 2007 00:36:01 +0100
Organization: tp.internet - http://www.tpi.pl/
Lines: 85
Message-ID: <1173137761.17765.52.camel@qrnik>
References: <pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl>  <eru75v$dmm$1@bandai.magma-net.pl> <ervbaa$am4$1@inews.gazeta.pl>  <pan.2007.02.26.21.12.45.8078@go2.pl> <es6b6u$2ls$1@kujawiak.man.lodz.pl>  <esbllu$51n$1@bandai.magma-net.pl> <esbv7t$7o$1@kujawiak.man.lodz.pl>  <1172940339.25227.28.camel@qrnik> <escc9e$2h2$1@kujawiak.man.lodz.pl>  <esd1k1$9bp$1@bandai.magma-net.pl> <esemb6$2r3$1@kujawiak.man.lodz.pl>  <eses6u$8fm$1@inews.gazeta.pl> <esf3am$r52$1@bandai.magma-net.pl>  <esfg25$b2m$1@kujawiak.man.lodz.pl>
NNTP-Posting-Host: paf87.warszawa.sdi.tpnet.pl
Mime-Version: 1.0
X-Trace: atlantis.news.tpi.pl 1173137807 5468 217.96.225.87 (5 Mar 2007 23:36:47 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Mon, 5 Mar 2007 23:36:47 +0000 (UTC)
In-Reply-To: <esfg25$b2m$1@kujawiak.man.lodz.pl>
X-Mailer: Evolution 2.8.3 PLD Linux
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit