View Issue Details

IDProjectCategoryView StatusLast Update
0000266LDMud 3.5LPC Compiler/Preprocessorpublic2011-02-24 21:33
ReporterlarsAssigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionwon't fix 
Target Version3.5.0 
Summary0000266: Value comparison '===' for mappings/arrays
DescriptionShort: Comparison-by-Value ("===") for Arrays and Mappings
From: wolf.dieter@dallinger.de
Date: 2001-10-09
Type: Feature
State: New

The '==' operator compares mappings and arrays by reference. It would be nice
to have a second operator which compares by value.

For closures this would mean that closures are identical if their targets are
the same. So a local lfun closure could compare equal to an alien lfun closure
if both designate the same object::lfun.

------------------

From: "Wolf Dieter Dallinger" <wolf.dieter@dallinger.de>
To: "Lars Duening" <lars@bearnip.com>
References: <000c01c19b9d$a3643a30$0200a8c0@wolf> <0003976460141131_mailit@localhost>
Subject: Re: Echter Vergleich zweier Ausdruecke mittels Operatoren === und !== =
Date: Wed, 16 Jan 2002 13:40:39 +0100

-----Urspr?ngliche Nachricht-----
Von: "Lars Duening" <lars@bearnip.com>
An: <wolf.dieter@dallinger.de>
Gesendet: Sonntag, 13. Januar 2002 01:38
Betreff: Re: Echter Vergleich zweier Ausdruecke mittels Operatoren === und
!== =


Hi, Lars!

> Wolf Dieter Dallinger wrote on Saturday, January 12 2002, 11:52:22:
>
> >Ich schlag 'nen Operator === vor, mit dem sich zwei Ausdruecke auf
gleichen
> >Inhalt testen lassen.
>
> Das hast du schon vor drei Monaten schon mal vorgeschlagen (f-011015-2,
und
> es ist eine gute Idee) :-)

Ja, ich stand auch vor dem selben Problem, welches ich jetzt aber anders
l?sen konnte. Ich h?tte Mappings vergleichen m?ssen. An sich kein Problem,
aber wieso nicht gleich die gro?e L?sung mit if(mapping1===mapping2).

> Eine Frage: Wie willst du Objekte vergleichen?

Hm, der Hintergedanke ist eigentlich eher, Mappings und Arrays gleichen
Inhaltes auch vergleichen zu koennen. Bei einem Objekt soll nur dann
Gleichheit bestehen, wenn es das selbe ist. Abgesehen davon scheint mir das
Vergleichen von Objekten nicht wirklich eine erfolgversprechende Aufgabe.
Sich dar?ber Gedanken zu machen ist allerdings interessant.

Bei Lambda-Closures widerrum k?nnte man auch zwei scheinbar verschiedene
durch Byte-weisen Vergleich als gleich erkennen. Dies w?re allerdings eine
Sache f?r den Mud-Treiber. Hintergund: Ein Objekt A verpasst anderen
Objekten eine an einen Closure-Container gebundene Lambda-Closure.
Zwischendurch wird A zerst?rt, wieder geladen, und f?hrt mit seiner Arbeit
fort. Die alten und neuen Lambdas sind gleich, auch wenn dies so nicht zu
erkennen ist.

> >Gerne nat?rlich auch eine hart codierte Implementierung. *g*
>
> Ich wollte schon fragen: wieso einen Operator, wenn du eh eine
LPC-Funktion
> aufrufst :-)

Ein Operator ist im Quelltext deutlichst besser zu lesen, und er geh?rt
einfach zu den anderen Operatoren. Ausserdem halte ich solch einen
Operator/eine Funktion f?r zwingend notwendig. Ein h?ufiger Einsatz des
Operators halte ich f?r wahrscheinlich.

> > Eine LPC-Implementierung fuer das Master-Objekt kann ich gerne
> > programmieren.
>
> Wenn du Lust hast, kannst du das ja erstmal als simul-efun implementieren.

Ja, das werd ich machen. Dann komm ich wieder... *g*

> --
> Lars Duening; lars@bearnip.com
> PGP Key: http://www.bearnip.com/lars/pgp-lars.asc
>


Viele Gr?sse

Pulami@UNItopia
TagsNo tags attached.

Relationships

related to 0000762 closed explicit identity operator for pointer equality 

Activities

zesstra

2011-02-14 16:53

administrator   ~0001987

We should decide upon 0000762 and this one in one go... ;-)

Coogan

2011-02-24 00:37

reporter   ~0002034

I think that a "compare by value" is indeed not simple for arrays and mappings. I also think that we'd open Pandora's box: for one use case, two arrays are equal when they have exactly the same length and, on each particular index, the same element. In another use case one might say that two arrays are equal as long as they contain the same elements and simply the element order is different.

Or one says, it's sufficient if the two things to compare are equal up to a certain level of recursion.

I do not support that idea here and would leave it up to the programmer-to-use to implement a compare function adequate to what he accepts as equal.

Gnomi

2011-02-24 08:32

manager   ~0002037

I agree with Coogan.

zesstra

2011-02-24 09:13

administrator   ~0002039

Me too.

zesstra

2011-02-24 21:33

administrator   ~0002042

OK, then I close this. If you think there should be more discussion, please tell me.

Issue History

Date Modified Username Field Change
2004-11-26 23:19 lars New Issue
2009-09-30 16:23 zesstra Project LDMud => LDMud 3.5
2011-02-14 16:50 zesstra Relationship added related to 0000762
2011-02-14 16:53 zesstra Note Added: 0001987
2011-02-14 16:53 zesstra Status new => feedback
2011-02-14 17:02 zesstra Target Version => 3.5.0
2011-02-24 00:37 Coogan Note Added: 0002034
2011-02-24 08:32 Gnomi Note Added: 0002037
2011-02-24 09:13 zesstra Note Added: 0002039
2011-02-24 21:33 zesstra Note Added: 0002042
2011-02-24 21:33 zesstra Status feedback => closed
2011-02-24 21:33 zesstra Resolution open => won't fix