classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: String/Hashtable boostrapping (again)


From: Etienne M. Gagnon
Subject: Re: String/Hashtable boostrapping (again)
Date: Tue, 17 Jul 2001 10:08:38 -0400
User-agent: Mozilla/5.0 (X11; U; Linux 2.4.6-586tsc i586; en-US; rv:0.9.1) Gecko/20010620

Patrick Doyle wrote:

However, I don't think that's the central issue.  There really is a
fundamental initialization problem here:
...
As classpath stands, I can't see any way to do this correctly.  Am I
missing it?  What is the sequence of events which causes these things to
be initialized properly?

Then, assuming there is such a correct sequence, doesn't this code still
seem somewhat obscure?  Should it be rewritten so as not to rely so
heavily on Java's precise initialization semantics, just for clarity?


I think you are expecting too much from the class libraries (Classpath). It is OK for Classpath to have "recursive" dependecies, as long as their expected behavior is consistent with the Java/JVM semantics except while bootstrapping the VM.

It is the task of the VM to bootstrap itslef to some stable state where it can start fulfilling the complete Java/JVM semantics, and it is not the class libraries task to anticipate the needs of the various VMs for minor/easily resolved issues like bootstrapping the String class. We certainly do not want to add any overhead to String.intern(), or make the String/Hastable code overly complex, just for the sake of simplifying the initial VM bootstrapping.

I say this because you might have to face many other bootstrapping problems in your VM. For example, imagine that you wanted to support class loading out of .jar files, but you wanted to do it using java.util.zip classes (why rewrite the whole thing in C/C++, when you can have nice and robust code for it written in Java?). You really don't want to bother the java.util.zip.* developers with your VM initialization/class loading problems to make this possible, instead, you want to handle these problems internally in you VM, keeping a nice separation of concerns between the libraries and the VM (as much as is possible).

As I said in another message, handling bootstrapping issues is not difficult. Yes it requires some care, but it is easily achieved with a special bootstrapping mode in your VM. While in bootstrapping mode, you can decide not to fullfill all of the Java/JVM semantics, for various reasons. One of such reasons is the impossibility to fullfill the semantics, e.g.: during initialization, a "ClassFormatError" is detected while parsing the "ClassFormatError.class" file...

I hope this will help you with your VM design.

Etienne
--
+--------------------------------------------------------------------+
| Étienne M. Gagnon                    mailto:address@hidden |
| Professeur adjoint            Téléphone: (514) 987-3000 poste 8215 |
| Bureau: PK-4930                        Télécopieur: (514) 987-8477 |
| Département d'informatique, UQÀM          http://www.info.uqam.ca/ |
| Auteur de SableVM                          http://www.sablevm.org/ |
| et de SableCC                              http://www.sablecc.org/ |
+--------------------------------------------------------------------+
| Etienne M. Gagnon                    mailto:address@hidden |
| Assistant Professor                Phone: (514) 987-3000 ext. 8215 |
| Office: PK-4930                                Fax: (514) 987-8477 |
| Department of Computer Science, UQAM      http://www.info.uqam.ca/ |
| Author of SableVM                          http://www.sablevm.org/ |
| and SableCC                                http://www.sablecc.org/ |
+--------------------------------------------------------------------+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]