Account Options

  1. Anmelden
Das alte Google Groups wird demnächst nicht mehr unterstützt. Die neue Version ist jedoch nicht kompatibel mit Ihrem Browser.
Google Groups-Startseite
« Google Groups-Startseite
SIP-15 Value class encoding breaks reflection, structural types
Gegenwärtig gibt es mehrere Themen in dieser Gruppe, die zuerst angezeigt werden sollen. Damit dieses Thema zuerst angezeigt werden kann, muss diese Option bei einem anderen Thema entfernt werden.
Bei der Bearbeitung Ihrer Anfrage ist ein Fehler aufgetreten. Versuchen Sie es erneut.
Kennzeichnen
  Nachrichten 51 - 63 von 63 - Alle ausblenden  -  Alles übersetzen in die Sprache: Übersetzt (alle Originale anzeigen) < Ältere 
Bei der Gruppe, für die Sie eine Mitteilung verfassen, handelt es sich um eine Usenet-Gruppe. Wenn Sie in dieser Gruppe Nachrichten posten, ist Ihre E-Mail-Adresse für jeden im Internet sichtbar
Ihre Antwort wurde nicht gesendet.
Die Nachricht wurde übermittelt.
 
Von:
An:
Cc:
Nachtrag zu:
Cc hinzufügen | Nachtrag hinzufügen zu | Betreff bearbeiten
Betreff:
Bestätigung:
Geben Sie zur Bestätigung die im folgenden Bild angezeigten Zeichen ein bzw. die Zahlen, die durchgesagt werden, wenn Sie auf das Barrierefreiheitssymbol klicken. Hören Sie zu und geben Sie die gehörten Zahlen ein
 
martin odersky  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 17 Sep. 2012, 12:26
Von: martin odersky <martin.oder...@epfl.ch>
Datum: Mon, 17 Sep 2012 18:25:45 +0200
Lokal: Mo 17 Sep. 2012 12:25
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

So here is the current status:

I have pull requests for most outstanding value class tickets. We can now
handle the infamous bridge methods of SI-6260, even though error messages
can be improved. The crash when interacting with lazy vals is gone. Other
problems are solved by restrictions:

 - no value classes in structural refinements
 - value classes cannot unbox to other derived value classes.

It strikes me that in all this the previous suspect, fully polymorphic
value classes, did not make a difference, contrary to what I had assumed
and feared. So, should we still introduce that restriction, or drop it and
allow fully polymorphic value classes? I would be now be in favor of
dropping the restriction, but could probably be convinced otherwise.

Cheers

 - Martin

On Sat, Sep 15, 2012 at 9:57 PM, Pavel Pavlov <pavel.e.pav...@gmail.com>wrote:

--
Martin Odersky
Prof., EPFL <http://www.epfl.ch> and Chairman, Typesafe<http://www.typesafe.com>
PSED, 1015 Lausanne, Switzerland
Tel. EPFL: +41 21 693 6863
Tel. Typesafe: +41 21 691 4967

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Paul Phillips  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 17 Sep. 2012, 12:56
Von: Paul Phillips <pa...@improving.org>
Datum: Mon, 17 Sep 2012 09:56:14 -0700
Lokal: Mo 17 Sep. 2012 12:56
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

On Mon, Sep 17, 2012 at 9:25 AM, martin odersky <martin.oder...@epfl.ch> wrote:
> It strikes me that in all this the previous suspect, fully polymorphic value
> classes, did not make a difference, contrary to what I had assumed and
> feared. So, should we still introduce that restriction, or drop it and allow
> fully polymorphic value classes? I would be now be in favor of dropping the
> restriction, but could probably be convinced otherwise.

Test cases would be instrumental in convincing us one way or the
other.  If anyone out there has some time to exercise value classes
(the referenced bugs will be helpful in guiding what sorts of things
to test) it would be very helpful.

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Mark Harrah  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 17 Sep. 2012, 16:58
Von: Mark Harrah <dmhar...@gmail.com>
Datum: Mon, 17 Sep 2012 16:58:47 -0400
Lokal: Mo 17 Sep. 2012 16:58
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types
On Mon, 17 Sep 2012 18:25:45 +0200

martin odersky <martin.oder...@epfl.ch> wrote:
> So here is the current status:

> I have pull requests for most outstanding value class tickets. We can now
> handle the infamous bridge methods of SI-6260, even though error messages
> can be improved. The crash when interacting with lazy vals is gone.

There is a problem with type parameters getting messed up.  See my last comment in:

 https://issues.scala-lang.org/browse/SI-6358

> Other
> problems are solved by restrictions:

>  - no value classes in structural refinements

See my last comment on

 https://issues.scala-lang.org/browse/SI-6336

that  shows the return type needs to exclude value classes as well:

>  - value classes cannot unbox to other derived value classes.

Might need to include universal traits in that exclusion:

 https://issues.scala-lang.org/browse/SI-6337

> It strikes me that in all this the previous suspect, fully polymorphic
> value classes, did not make a difference, contrary to what I had assumed
> and feared. So, should we still introduce that restriction, or drop it and
> allow fully polymorphic value classes? I would be now be in favor of
> dropping the restriction, but could probably be convinced otherwise.

I don't know what the underlying cause is, but see:

 https://issues.scala-lang.org/browse/SI-6385

-Mark


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Pavel Pavlov  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 18 Sep. 2012, 06:37
Von: Pavel Pavlov <pavel.e.pav...@gmail.com>
Datum: Tue, 18 Sep 2012 03:37:32 -0700 (PDT)
Lokal: Di 18 Sep. 2012 06:37
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

More specimens from the same can of worms:

== test1.scala ==
trait Foo extends Any {
  def box1(x: Box1): String
  def box2(x: Box2): String

}

class Box1(val value: String) extends AnyVal

class Box2(val value: String) extends AnyVal with Foo {
  def box1(x: Box1) = "box1: ok"
  def box2(x: Box2) = "box2: ok"

}

object test1 {
  def main(args: Array[String]) {
    val b1 = new Box1("")
    val b2 = new Box2("")
    val f: Foo = b2
    println(f.box1(b1))
    println(f.box2(b2))
  }
}

=============
produce
-----
box1: ok
java.lang.ClassCastException: java.lang.String cannot be cast to Box2
    at Box2.box2(test1.scala:8)
-----

== test2a.scala ==
trait Foo[T <: AnyVal] extends Any {
  def foo(x: String): String
  def foo(x: T): String

}

class Box1(val value: String) extends AnyVal with Foo[Box2] {
  def foo(x: String) = "foo(String): ok"
  def foo(x: Box2) = "foo(Box2): ok"

}

class Box2(val value: String) extends AnyVal

object test2a {
  def main(args: Array[String]) {
    val b1 = new Box1(null)
    val b2 = new Box2(null)
    val f: Foo[Box2] = b1
    println(f.foo(""))
    println(f.foo(b2))
  }

}

==============
produce compile error:
-----
test2a.scala:8: error: double definition:
method foo:(x: Box2)String and
method foo:(x: String)String at line 7
have same type after erasure: (x: String)String
  def foo(x: Box2) = "foo(Box2): ok"
      ^
one error found
-----

while almost identical
== test2b.scala ==
trait Foo[T <: AnyVal] extends Any {
  def foo(x: String): String
  def foo(x: T): String

}

/*class Box1(val value: String) extends AnyVal with Foo[Box2] {
  def foo(x: String) = "foo(String): ok"
  def foo(x: Box2) = "foo(Box2): ok"

}*/

class Box2(val value: String) extends AnyVal with Foo[Box2] {
  def foo(x: String) = "foo(String): ok"
  def foo(x: Box2) = "foo(Box2): ok"

}

object test2b {
  def main(args: Array[String]) {
    val b2 = new Box2(null)
    val f: Foo[Box2] = b2
    println(f.foo(""))
    println(f.foo(b2))
  }
}

==============
compiles and runs flawlessly:
-----
foo(String): ok
foo(Box2): ok
-----

All these are variations of the same bug with non-uniform
value-class-unboxing in method signatures (I've tried to draw attention to
this problem twice in this thread but with no luck).

These bugs looks very similar to SI-6385 for me.


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Josh Suereth  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 18 Sep. 2012, 08:19
Von: Josh Suereth <joshua.suer...@gmail.com>
Datum: Tue, 18 Sep 2012 05:19:33 -0700 (PDT)
Lokal: Di 18 Sep. 2012 08:19
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

Actually, can you open a new bug for this?  Also thanks much for the
reports.  We've been listening, even if you haven't seen it on the ML.  
Value classes are top of my discussion for the Scala meeting today.


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Paul Phillips  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 18 Sep. 2012, 10:33
Von: Paul Phillips <pa...@improving.org>
Datum: Tue, 18 Sep 2012 07:33:35 -0700
Lokal: Di 18 Sep. 2012 10:33
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

I'd be fine with disallowing overloading involving value classes entirely.
 I think we can disallow a great deal where value classes are involved and
still hang onto the great majority of the current uses, which I am loathe
to give up.  I have watched erasure bugs like these go unsolved for years
so it stretches credulity to think we will be dashing off non-regrettable
solutions for 2.10.


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
martin odersky  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 18 Sep. 2012, 10:38
Von: martin odersky <martin.oder...@epfl.ch>
Datum: Tue, 18 Sep 2012 16:38:30 +0200
Lokal: Di 18 Sep. 2012 10:38
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

broken implementation of lazy vals. Let's see what we can do about it.

>  > Other
> > problems are solved by restrictions:

> >  - no value classes in structural refinements

> See my last comment on

>  https://issues.scala-lang.org/browse/SI-6336

> that  shows the return type needs to exclude value classes as well:

I agree, this needs to be added.

--
Martin Odersky
Prof., EPFL <http://www.epfl.ch> and Chairman, Typesafe<http://www.typesafe.com>
PSED, 1015 Lausanne, Switzerland
Tel. EPFL: +41 21 693 6863
Tel. Typesafe: +41 21 691 4967

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
martin odersky  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 05:20
Von: martin odersky <martin.oder...@epfl.ch>
Datum: Wed, 19 Sep 2012 11:20:08 +0200
Lokal: Mi 19 Sep. 2012 05:20
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

On Tue, Sep 18, 2012 at 4:33 PM, Paul Phillips <pa...@improving.org> wrote:
> I'd be fine with disallowing overloading involving value classes entirely.
>  I think we can disallow a great deal where value classes are involved and
> still hang onto the great majority of the current uses, which I am loathe
> to give up.  I have watched erasure bugs like these go unsolved for years
> so it stretches credulity to think we will be dashing off non-regrettable
> solutions for 2.10.

I now also think that the "partial unboxing" which was done to allow
overloading in value classes is more trouble than it's worth.

To remind everyone:

Partial unboxing was put in so we could write code like:

  class Meter(x: Double) extends AnyVal {
    def / (other: Meter): Double = ...
    def / (other: Double): Meter = ...
  }

With complete unboxing both erased signatures of "/" would be
(Double)Double, so we'd get a clash. With partial unboxing, "Meter" in the
value class itself would not be erased.

However, this irregularity leads to surprising bridge methods which are not
working correctly. That was Pavel's example (which I append below).

Now, I would argue that the scheme is too limiting anyway, and that there
exist more robust ways to avoid name clashes.
Too limited:

1) If we abstract out the operations into a universal trait, we do get an
erasure clash:

  trait MeterTrait extends Any {
    def / (other: Meter): Double
    def / (other: Double): Meter
  }
  class Meter(x: Double) extends AnyVal with MeterTrait {
    def / (other: Meter): Double = ...
    def / (other: Double): Meter = ...
  }

2) If we mix more than one value class we also get erasure clashes, as in:

   class Meter(x: Double) extends AnyVal {
     def / (other: Second): Speed = ...
     def / (other: Double): Meter = ...
   }
   class Second(x: Double) extends AnyVal ...

So the trick does not buy us much. Furthermore, we know that we can
disambiguate more robustly using implicit phantom parameters.  E.g.

   class Meter(x: Double) extends AnyVal {
     def / (other: Meter)(implicit dummy: MeterArg = null) = ...
     def / (other: Double): Meter = ...
   }
   object Meter {
     trait MeterArg
   }

So, I am for removing this special case.

What do people think?

 - Martin

Here's Pavel's problematic example:

== test1.scala ==
trait Foo extends Any {
  def box1(x: Box1): String
  def box2(x: Box2): String

}

class Box1(val value: String) extends AnyVal

class Box2(val value: String) extends AnyVal with Foo {
  def box1(x: Box1) = "box1: ok"
  def box2(x: Box2) = "box2: ok"

}

object test1 {

  def main(args: Array[String]) {
    val b1 = new Box1("")
    val b2 = new Box2("")
    val f: Foo = b2
    println(f.box1(b1))
    println(f.box2(b2))
  }

}

=============
produce
-----
box1: ok
java.lang.ClassCastException: java.lang.String cannot be cast to Box2
    at Box2.box2(test1.scala:8)
-----

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Roland Kuhn  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 06:25
Von: Roland Kuhn <goo...@rkuhn.info>
Datum: Wed, 19 Sep 2012 12:25:37 +0200
Lokal: Mi 19 Sep. 2012 06:25
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

While I am not in a position to make well thought-through proposals on this matter, I would like to say that

less magic + more regular = profit!

With that I mean more direct error messages (possibly with a clear work-around suggestion) instead of searching for why things break at a completely different place in the code mysteriously. If that means writing a few more characters as a library implementor, that’s a price I consider to be small.

Regards,

Roland

19 sep 2012 kl. 11:20 skrev martin odersky:

Roland Kuhn
Typesafe – The software stack for applications that scale.
twitter: @rolandkuhn

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Erik Osheim  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 10:57
Von: Erik Osheim <e...@plastic-idolatry.com>
Datum: Wed, 19 Sep 2012 10:57:18 -0400
Lokal: Mi 19 Sep. 2012 10:57
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

On Wed, Sep 19, 2012 at 11:20:08AM +0200, martin odersky wrote:
> I now also think that the "partial unboxing" which was done to allow
> overloading in value classes is more trouble than it's worth.

...

> With complete unboxing both erased signatures of "/" would be
> (Double)Double, so we'd get a clash. With partial unboxing, "Meter" in the
> value class itself would not be erased.

> However, this irregularity leads to surprising bridge methods which are not
> working correctly. That was Pavel's example (which I append below).

> Now, I would argue that the scheme is too limiting anyway, and that there
> exist more robust ways to avoid name clashes.

...

> So, I am for removing this special case.

> What do people think?

+1

Given that value classes currently exist primarily to avoid boxing I
support removing this feature, especially since it seems to add a lot
of complexity to the implementation. Users of value classes shouldn't
expect them to work like normal types in these cases.

-- Erik


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
martin odersky  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 13:15
Von: martin odersky <martin.oder...@epfl.ch>
Datum: Wed, 19 Sep 2012 19:15:29 +0200
Lokal: Mi 19 Sep. 2012 13:15
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

I have a new pull-request

  https://github.com/scala/scala/pull/1352

that eliminates halfboxing. Several reported bugs disappeared: Mark's last
variant of 3667, 3685 as well as Pavel's counter-examples on this list. So
this looks like a definite win.

With that pull-request we are currently good again: I see no more
outstanding critical bugs against value classes, except that we have to fix
the Java generic signatures. That should also be simpler now because
erasure got more regular.

More tests are very much appreciated.

Cheers

 - Martin

On Wed, Sep 19, 2012 at 4:57 PM, Erik Osheim <e...@plastic-idolatry.com>wrote:

--
Martin Odersky
Prof., EPFL <http://www.epfl.ch> and Chairman, Typesafe<http://www.typesafe.com>
PSED, 1015 Lausanne, Switzerland
Tel. EPFL: +41 21 693 6863
Tel. Typesafe: +41 21 691 4967

 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Paul Phillips  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 13:24
Von: Paul Phillips <pa...@improving.org>
Datum: Wed, 19 Sep 2012 10:24:04 -0700
Lokal: Mi 19 Sep. 2012 13:24
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types

On Wed, Sep 19, 2012 at 10:15 AM, martin odersky <martin.oder...@epfl.ch> wrote:
> With that pull-request we are currently good again: I see no more
> outstanding critical bugs against value classes, except that we have to fix
> the Java generic signatures. That should also be simpler now because erasure
> got more regular.

I opened that yesterday, but it probably is not done.

  https://github.com/scala/scala/pull/1345


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Mark Harrah  
Profil anzeigen   Übersetzen in die Sprache: Übersetzt (Original anzeigen)
 Weitere Optionen 19 Sep. 2012, 19:50
Von: Mark Harrah <dmhar...@gmail.com>
Datum: Wed, 19 Sep 2012 19:50:41 -0400
Lokal: Mi 19 Sep. 2012 19:50
Betreff: Re: SIP-15 Value class encoding breaks reflection, structural types
On Wed, 19 Sep 2012 19:15:29 +0200

martin odersky <martin.oder...@epfl.ch> wrote:
> I have a new pull-request

>   https://github.com/scala/scala/pull/1352

> that eliminates halfboxing. Several reported bugs disappeared: Mark's last
> variant of 3667, 3685 as well as Pavel's counter-examples on this list. So
> this looks like a definite win.

> With that pull-request we are currently good again: I see no more
> outstanding critical bugs against value classes, except that we have to fix
> the Java generic signatures. That should also be simpler now because
> erasure got more regular.

I think this is correct, except I believe the lazy val problem is still open:

 https://issues.scala-lang.org/browse/SI-6358

> More tests are very much appreciated.

I've posted a draft for the value class guide as an attachment here:

 https://issues.scala-lang.org/browse/SI-6398

I spent a fair amount of space on concrete examples of limitations as well as when allocations occur.  I'd appreciate corrections for the allocations section, additions to the introduction, additional examples of limitations, or just pointing out important omissions to the list.  I considered adding a section explicitly listing features they should interact ok with, like type parameters, case classes, and implicit classes.  Would that be useful?

In the process of writing the guide, I found:

 https://issues.scala-lang.org/browse/SI-6408

I mention that the SIP is the definitive reference for implementation details, but the SIP is actually rather out of date.

Finally, I think there needs to be an annotation @allocationBehavior(silent | warn | error) for value classes and maybe a @allowAllocation to override warnings/errors at a usage site.  It is difficult to know when allocations occur from first principles or just reading the code and javap is really the only reliable way.

-Mark


 
Sie müssen sich anmelden, bevor Sie Nachrichten veröffentlichen können.
Bevor Sie eine Nachricht posten können, müssen Sie zunächst dieser Gruppe beitreten.
Bitte aktualisieren Sie vor dem Posten in den Abonnementeinstellungen Ihren Spitznamen.
Sie haben nicht die erforderliche Berechtigung zum Posten.
Ende der Nachrichten < Ältere 
« Zurück zu Diskussionen « Neueres Thema     Älteres Thema »