¿Cuáles fueron los paquetes API "principales" de Java 1.0?

38

Al leer sobre el caso de Google v Oracle, me encontré con estas preguntas (aparentemente del juez presidente)

...
¿Está de acuerdo en que lo siguiente es cierto, al menos a partir de 1996?

Las siguientes fueron las principales interfaces de programación de aplicaciones Java: java.lang, java.util y java.io.

¿El lenguaje de programación Java se refiere o requiere algún método, clase o paquete fuera de los tres anteriores?
...

fuente: Groklaw

Obviamente, hay muchas ramificaciones legales, Google y Oracle probablemente no estén de acuerdo en algunos puntos, y no me importa . Deje la ley a los abogados.

Sin embargo, sospecho que hay un poco de historia interesante aquí.

Mi pregunta es (como alguien que primero hizo ninguna Java codificación de alrededor de 2001 en la versión 1.3), en la versión 1.0 de Java fue nada fuera necesario de java.lang, java.utily java.iopara compilar un programa Java válido?

Como ejemplo (usando C # 5.0), la awaitpalabra clave depende (entre otras cosas). El compilador no podría funcionar según las especificaciones sin esa clase.Task<T> GetAwaiter()

De manera equivalente, ¿hubo alguna característica principal de tiempo de ejecución (como ClassLoader *) que dependiera de otros paquetes?

Admito que pregunto por curiosidad, lo que es exactamente necesario para Java mínimamente viable (el lenguaje, ignorando todas las partes legales que lo rodean) es interesante.

* Supongo que ClassLoader era incluso una característica en Java 1.0, es parte de la especificación en 7.0 y presumiblemente muchas versiones anteriores.

Kevin Montrose
fuente
3
en los días en que Java era un lenguaje simple ...
Jens Schauder
77
en los días en que java
Sara Chipps
2
Para su información, la awaitpalabra clave no depende Task<T>. La Taskclase simplemente satisface las cosas de las que depende la awaitpalabra clave (un método llamado etc.). GetAwaiter()
Matt Hamilton
2
@Matt - corregido, debería haber ido con yieldIEnumerator o algo así; tan excitado para await.
Kevin Montrose
Entonces, básicamente, quieres saber de qué clases java.lang.Object realmente dependía en JDK 1, ¿verdad?
scarfridge

Respuestas:

55

Según Wikipedia , la primera versión de Java lanzada formalmente fue 1.0.2, el 23 de enero de 1996.

La primera versión estable fue el JDK 1.0.2. se llama Java 1

Hay un archivo de Java 1.0.2 y toda la documentación relacionada aquí :

  • Referencia de API JDK 1.0.2 (formato de libro)
  • Referencia de API JDK 1.0.2 (formato javadoc)
  • Tutorial de Java
  • Especificación del lenguaje Java (enlace roto, camino atrás aquí )
  • Especificación de máquina virtual Java

No parece ser una descarga de los bits JDK 1.0.2 aquí

http://www.pascal-man.com/download/download-jdk.shtml

A mí me funciona al momento de escribir.

Java 1.0.2 en Windows 7 x64

VEA EL PODER CRUDO INMITIGADO DE JAVA 1.0.2


En la especificación del lenguaje, se hace referencia a las siguientes clases (cita única, citas no exhaustivas):

  • Clase (sección 4.3.1)
  • Cadena (sección 4.3.1)
  • Objeto (sección 4.3.2)
  • Aleatorio (sección 4.4)
  • Hilo (sección 17.2)
  • ThreadGroup (sección 17.2)
  • Lanzable (sección 11)
  • Error (sección 11.2)
  • cargas y cargas de errores, todo en java.lang (sección 11.5.2.1 - 11.5.2.2)
  • RuntimeException (sección 11.2.1)
  • las "clases de matriz", [Ietc. (sección 10.8 )

... y en ese momento dejé de mirar porque, técnicamente , [Iet. Alabama. No estamos en el java.lang, java.utilo java.iolos paquetes.

Ejemplo:

class Test {
  // Compare namespaces of built-ins object and int[]
  public static void main(String[] args){
    int[] arr = new int[0];
    Object obj = new Object();

    Class arrClass = arr.getClass();
    Class objClass = obj.getClass();

    Class arrSuper = arrClass.getSuperclass();

    System.out.println("plain jane Object - " + objClass.getName());
    System.out.println();
    System.out.println("int[] - "+arrClass.getName());
    System.out.println("super of int[] - "+arrSuper.getName());
  }
}

Salidas

ingrese la descripción de la imagen aquí

El comportamiento es consistente entre moderno y 1.0.2

ingrese la descripción de la imagen aquí

Jeff Atwood
fuente
Oro Google-fu una vez más.
Kevin Montrose
@YannisRizos Tú y yo los dos. Ese fue mi primer navegador web.
Ingeniero mundial
@WorldEngineer: te doy Mosaico .
sbi
2

Había menos de una docena de paquetes en el JDK original: estos más applet, awt, awt.peer. Eso puede haber sido! Es absolutamente probable, 99% seguro, que estos tres paquetes incluyan todas las clases que la JVM central conocía explícitamente, y que no había clases fuera de estos paquetes mencionadas en la especificación del lenguaje.

Ernest Friedman-Hill
fuente
1

java.net también estuvo entre los primeros paquetes disponibles y fue excelente desde el principio, especialmente con la función de subprocesos (ahora el modelo de subprocesos parece anticuado en comparación con lo que tiene en los idiomas más recientes, pero fue genial entonces).

Recuerdo haber codificado un navegador web (muy incompleto, incluso en comparación con lo que existía en ese momento) para aprender el 1.02 recién publicado y, justo después, un servidor de aplicaciones web completo (todavía utilizado en la industria). Eso fue mucho antes de que la API de servlet y todo el mundo fuera persuadido de que tienes que usar marcos pesados ​​para hacer aplicaciones http rápidas y confiables en Java.

Con java.net (y el GC, y los subprocesos, y las excepciones y java.util) Java estaba destinado a ser un lado importante del servidor de tecnología (en el lado opuesto, java.applet fue doloroso desde el primer día ...)

Denys Séguret
fuente
0

Java 1.0 tenía exactamente seis paquetes de nivel superior: java.applet, java.awt (con subpaquetes java.awt.image y java.awt.peer), java.io, java.lang, java.net y java.util. Eso es. Fuente: Patrick Chan, Java Developers Almanac 1998

mrzzmr
fuente