Quais eram os pacotes principais da API do Java 1.0?

38

Lendo sobre o caso Google x Oracle, deparei-me com estas perguntas (aparentemente do juiz presidente)

...
Concorda-se que o seguinte seja verdade, pelo menos a partir de 1996?

A seguir, foram apresentadas as principais interfaces de programação de aplicativos Java: java.lang, java.util e java.io.

A linguagem de programação Java se refere ou requer algum método, classe ou pacote fora dos três acima?
...

fonte: Groklaw

Obviamente, existem muitas ramificações legais, Google e Oracle provavelmente discordam em alguns pontos, e eu não me importo . Deixe a lei para os advogados.

No entanto, suspeito que haja um pouco de história interessante aqui.

A minha pergunta é (como alguém que fez primeiro qualquer codificação Java por volta de 2001 na versão 1.3), na versão 1.0 do Java foi nada requerida fora de java.lang, java.utile java.iopara compilar um programa Java válido?

Como exemplo (usando o C # 5.0), a awaitpalavra-chave depende (entre outras coisas). O compilador não poderia funcionar para especificar sem essa classe.Task<T> GetAwaiter()

Equivalentemente, havia algum recurso principal de tempo de execução (como ClassLoader *) que dependia de outros pacotes?

Admito que pergunto por curiosidade, exatamente o que é necessário para o Java minimamente viável (a linguagem, ignorando todos os bits legais em torno dela) é interessante.

* Suponho que o ClassLoader tenha sido um recurso do Java 1.0, ele faz parte das especificações do 7.0 e presumivelmente muitas versões anteriores.

Kevin Montrose
fonte
3
de volta nos dias em java era uma linguagem simples ...
Jens Schauder
7
de volta aos dias em que java
Sara Chipps
2
Para sua informação, a awaitpalavra - chave não depende Task<T>. A Taskclasse só acontece para satisfazer as coisas que a awaitpalavra-chave que dependem (um método chamado GetAwaiter()etc).
Matt Hamilton
2
@ Matt - corrigido, deveria ter ido com yieldIEnumerator ou algo assim; tão animado para await.
Kevin Montrose
Então você basicamente quer saber de quais classes o java.lang.Object realmente dependia no JDK 1, certo?
scarfridge

Respostas:

55

Segundo a Wikipedia , a primeira versão formalmente lançada do Java foi a 1.0.2, em 23 de janeiro de 1996.

A primeira versão estável foi o JDK 1.0.2. é chamado Java 1

Há um arquivo do Java 1.0.2 e toda a documentação relacionada aqui :

  • Referência da API do JDK 1.0.2 (formato de livro)
  • Referência da API do JDK 1.0.2 (formato javadoc)
  • Tutorial Java
  • Especificação da linguagem Java (link quebrado, wayback'd aqui )
  • Especificação da máquina virtual Java

Não parece ser um download do JDK 1.0.2 pedaços aqui

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

Isso funciona para mim no momento em que escrevo.

Java 1.0.2 no Windows 7 x64

Eis o poder bruto e não mitigado do Java 1.0.2


Na especificação do idioma, as seguintes classes são mencionadas (citação única, citações não exaustivas):

  • Classe (seção 4.3.1)
  • String (seção 4.3.1)
  • Objeto (seção 4.3.2)
  • Aleatório (seção 4.4)
  • Tópico (seção 17.2)
  • ThreadGroup (seção 17.2)
  • Jogável (seção 11)
  • Erro (seção 11.2)
  • cargas e cargas de erros, tudo sob java.lang (seção 11.5.2.1 - 11.5.2.2)
  • RuntimeException (seção 11.2.1)
  • as "classes de matriz" [Ie assim por diante (seção 10.8 )

... em que ponto eu parei de olhar, porque, tecnicamente , [Iet. al. não estão nos java.lang, java.utilou java.iopacotes.

Exemplo:

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

Saídas

insira a descrição da imagem aqui

O comportamento é consistente entre o moderno e o 1.0.2

insira a descrição da imagem aqui

Jeff Atwood
fonte
Ouro Google-fu mais uma vez.
Kevin Montrose
@YannisRizos Você e eu. Esse foi o meu primeiro navegador.
World Engineer
@ WorldEngineer: Dou-lhe Mosaic .
Sbi
2

Havia menos de uma dúzia de pacotes no JDK original - estes mais applet, awt, awt.peer. Pode ter sido isso! É absolutamente provável - 99% de certeza - que esses três pacotes incluam todas as classes conhecidas explicitamente pela própria JVM principal e que não existam classes fora desses pacotes mencionadas nas especificações de idioma.

Ernest Friedman-Hill
fonte
1

O java.net também foi um dos primeiros pacotes disponíveis e foi ótimo desde o início, especialmente com o recurso de threading (agora o modelo Thread parece desatualizado em comparação com o que você tem em idiomas mais recentes, mas era ótimo na época).

Lembro-me de ter codificado um navegador da Web (muito incompleto, mesmo em comparação com o que existia na época) para aprender o 1.02 recém-publicado e, logo após, um servidor de aplicativos da Web completo (ainda usado na indústria). Isso foi muito antes da API do servlet e de todos serem convencidos de que era necessário usar estruturas pesadas para criar aplicativos http rápidos e confiáveis ​​em java.

Com o java.net (e o GC, e Threads, e exceptions e java.util), o java era um dos principais servidores de tecnologia (no lado oposto, o java.applet era doloroso desde o primeiro dia ...)

Denys Séguret
fonte
0

O Java 1.0 tinha exatamente seis pacotes de nível superior: java.applet, java.awt (com subpacotes java.awt.image e java.awt.peer), java.io, java.lang, java.net e java.util. É isso aí. Fonte: Patrick Chan, Java Developers Almanac 1998

mrzzmr
fonte