Care au fost pachetele API „de bază” ale Java 1.0? (Inginerie software, Java, Istoric)

Kevin Montrose a intrebat.

Citind despre cazul Google vs. Oracle, am dat peste aceste întrebări (aparent de la judecătorul care prezidează procesul)


Este de acord că următoarele afirmații sunt adevărate, cel puțin începând cu 1996?

Interfața de programare a aplicațiilor Java era formată din următoarele pachete: java.lang, java.util și java.io.

Limbajul de programare Java se referă la sau necesită vreo metodă, clasă sau pachet în afara celor trei de mai sus?

sursă: Groklaw

Evident, există o mulțime de ramificații juridice, Google și Oracle probabil că nu sunt de acord asupra unor puncte și nu-mi pasă. Lăsați legea în seama avocaților.

Cu toate acestea, bănuiesc că există o parte interesantă de istorie aici.

Întrebarea mea este (ca cineva care a făcut pentru prima dată codare Java în jurul anului 2001, în versiunea 1.3), în versiunea 1.0 a Java a fost necesar ceva în afara de java.lang, , java.util, , și java.io pentru a compila un program Java valid?

Ca un exemplu (folosind C# 5.0), se poate spune că await este dependent de Task<T> GetAwaiter() (printre altele). Compilatorul nu ar putea funcționa conform specificațiilor fără acea clasă.

În mod echivalent, au existat caracteristici de bază ale runtime-ului (cum ar fi ClassLoader*) care depindeau de alte pachete?

Recunosc că întreb din curiozitate, exact ceea ce este necesar pentru Java minim viabil (limbajul, ignorând toate părțile legale din jurul său) este interesant.

*Sunt presupun că ClassLoader a fost chiar o caracteristică în Java 1.0, face parte din specificații în 7.0 și, probabil, în multe versiuni anterioare.

Comentarii

  • în zilele în care java era un limbaj simplu… –  > Por Jens Schauder.
  • pe vremea când java era un limbaj simplu…  > Por Sara Chipps.
  • Pentru informarea dvs. await nu depinde de Task<T>. Site-ul Task se întâmplă doar să satisfacă lucrurile pe care await cuvântul cheie face depinde de (o metodă numită GetAwaiter() etc.). –  > Por Matt Hamilton.
  • @Matt – am corectat, ar fi trebuit să fie cu yield și IEnumerator sau ceva de genul acesta; doar că sunt atât de entuziasmat de await. –  > Por Kevin Montrose.
  • Deci, în principiu, vrei să știi de ce clase depinde de fapt java.lang.Object în JDK 1, nu? –  > Por scarfridge.
4 răspunsuri
Jeff Atwood

Conform Wikipedia, , prima versiune lansată oficial a Java a fost 1.0.2, pe 23 ianuarie 1996.

Prima versiune stabilă a fost JDK 1.0.2. se numește Java 1

Există o arhivă cu Java 1.0.2 și toată documentația aferentă aici:

  • JDK 1.0.2 API reference (format carte)
  • Referința API JDK 1.0.2 (format javadoc)
  • Tutorial Java
  • Specificația limbajului Java (link rupt, wayback’d aici)
  • Specificația mașinii virtuale Java

Acolo apare să fie o descărcare a JDK 1.0.2 bits aici

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

La momentul redactării acestui articol, funcționează pentru mine.

PRIVIȚI PUTEREA BRUTĂ ȘI NEMĂRGINITĂ A JAVA 1.0.2


În specificația limbajului, se face referire la următoarele clase (o singură citare, nu citate exhaustive):

  • Clasa (secțiunea 4.3.1)
  • String (secțiunea 4.3.1)
  • Obiect (secțiunea 4.3.2)
  • Random (secțiunea 4.4)
  • Fire (secțiunea 17.2)
  • ThreadGroup (secțiunea 17.2)
  • Throwable (secțiunea 11)
  • Error (secțiunea 11.2)
  • o mulțime de erori, toate sub java.lang (secțiunea 11.5.2.1 – 11.5.2.2)
  • RuntimeException (secțiunea 11.2.1)
  • clasele „Array”, [I, , și așa mai departe (secțiunea 10.8)

… moment în care am încetat să mai caut, deoarece, din punct de vedere tehnic, , [I, , et. al. nu se află în java.lang, , java.util, , sau java.io pachete.

Exemplu:

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());
  }
}

Ieșiri

Comportamentul este consecvent între modern și 1.0.2

Comentarii

Ernest Friedman-Hill

Au existat mai puțin de o duzină de pachete în JDK-ul original – acestea plus applet, awt, awt.peer. S-ar putea să fi fost atât! Este absolut probabil — 99% sigur — că aceste trei pachete includeau toate clasele care erau cunoscute în mod explicit de nucleul JVM în sine și că nu existau clase în afara acestor pachete menționate în specificațiile limbajului.

Denys Séguret

java.net a fost, de asemenea, printre primele pachete disponibile și a fost grozav încă de la început, în special cu facilitatea de threading (acum modelul Thread pare depășit în comparație cu ceea ce aveți în limbajele mai recente, dar era grozav atunci).

Îmi amintesc că am codat un browser web (foarte incomplet, chiar și în comparație cu ceea ce exista la acea vreme) pentru a învăța proaspăta versiune 1.02 și, imediat după aceea, un server de aplicații web complet (încă folosit în industrie). Asta a fost cu mult înainte de servlet api și de a fi toată lumea convinsă că trebuie să folosești framework-uri grele pentru a face aplicații http rapide și fiabile în java.

Cu java.net (și GC, și Threads, și excepții și java.util), java era menit să devină o tehnologie majoră pe partea de server (în partea opusă, java.applet a fost dureros încă din prima zi…).

mrzzmr

Java 1.0 avea exact șase pachete de nivel superior: java.applet, java.awt (cu subpachetele java.awt.image și java.awt.peer), java.io, java.lang, java.net și java.util. Asta este tot. Sursă: Patrick Chan, Java Developers Almanahul Dezvoltatorilor Java 1998.