Java-Linux

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 05.04.2010 12:04:19

denkbar wäre natürlich, daß man aus der Java-VM eine Java und C/C++ VM bastelt, aber wer will das schon ? Das war ja nicht einmal deine Intention
Ich habe es nun schon einige Male erkärt:
Die JVM ist vor allem ein Bytecode-Interpreter.
Ob man JAVA oder C/C++ für die JVM kompiliert ist ziemlich egal.
Es gibt schon eine sehr lange Liste von Sprachen (verschieden von JAVA), die für die JVM kompilieren.
Mit C und C++ geht das auch.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 05.04.2010 12:38:40

gerdich hat geschrieben: Ich habe es nun schon einige Male erkärt:
Die JVM ist vor allem ein Bytecode-Interpreter.
Ob man JAVA oder C/C++ für die JVM kompiliert ist ziemlich egal.
8O
klar :? , und weil du das so genau weißt, machst du extra für diese Frage einen Thread auf :wink:
gerdich hat geschrieben: Wäre es nicht denkbar C-,C++-Code in Java-Bytecode zu kompilieren?

der Thread ist völlig absurd und du bist es offensichtlich auch ... aber den Moderatoren zu liebe, sage ich jetzt nichts mehr

Benutzeravatar
schorsch_76
Beiträge: 2629
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von schorsch_76 » 05.04.2010 13:13:19

Um wiedet etwas on topic zu werden werf ich mal diesen Link hier rein: http://en.wikipedia.org/wiki/Java_Virtu ... _compilers

Linux ist in C geschrieben. Als neue Architektur wäre das meiner persönlichen Meinung nach möglich den Linuxkernel auf einer JVM laufen zu bekommen. So würde dann die Hierarchie der Software etwa aussehen:

Gnu / Userland
Linux in JVM
JVM
"Echtes OS"
Hardware

Da das gesamte Userland in binärer Form vorliegt müsste dafür auch das ganze USerland nach Javabytecode übersetzt werden.

Da fallen mir weitere Probleme ein:
- Systemcalls in den Kernel funktionieren in der x86/x86_64 Welt über TRAP`s (Kernel Ringe) [1]
- Interrupthandling
- Performance / Overhead an Software bis "Linux" an der Reihe ist.
- Speichermanagement. Trennung Userspace / Kernelspace (Kernel Ringe). Einer der wichtigsten Punkte moderner Betriebssysteme. Denkt an Win95 und Co zurück *schauder*. Ein Programm kann die ganze Kiste zum Absturz bringen.

ABER: Was bringt dir das für einen Vorteil?

Gruß

schorsch

EDIT: Um noch meine persönliche Meinung über Bytecode jeder Art (Dotnet/JVM/etc) zum Ausdruck zu bringen: Wiso muss ich meinen Code in eine nicht maschinenspezifische Form bringen um dann von irgendeiner VM/Runtime/Whatever ausgeführt zu werden? Die Leute beklagen sich doch eh immer: "Was soll das den sein? Das gibts ja nicht das der neue Rechner sooo langsam ist!!! So eine sch...öne Software!". Erhebliche Softwarekomponeten Austauschen dass das ganze komplexe Projekt/Programm dann auf einer neuen Architektur läuft hat noch nie wirklich geklappt. Deshalb sehe ich den Vorteil der Bytecode Geschichte nicht. Siehe dazu auch Fefe [2] [3]

[1] http://de.wikipedia.org/wiki/Betriebssy ... kingsystem
[2] http://blog.fefe.de/?ts=b5546b0c
[3] http://blog.fefe.de/?ts=b555be2c

Benutzeravatar
Saxman
Beiträge: 4233
Registriert: 02.05.2005 21:53:52
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: localhost

Re: Java-Linux

Beitrag von Saxman » 05.04.2010 16:54:22

gms hat geschrieben:[...]aber den Moderatoren zu liebe, sage ich jetzt nichts mehr
Das ist aber sehr nett von dir. ;)
"Unix is simple. It just takes a genius to understand its simplicity." - Dennis Ritchie

Debian GNU/Linux Anwenderhandbuch | df.de Verhaltensregeln | Anleitungen zum Review und zum Verfassen von Wiki Artikeln.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 05.04.2010 19:14:47

Saxman hat geschrieben:
gms hat geschrieben:[...]aber den Moderatoren zu liebe, sage ich jetzt nichts mehr
Das ist aber sehr nett von dir. ;)
bin ich doch immer :D

und weil ich so nett bin, poste ich sogar noch einen Link, den "gerdich" sicherlich interessant finden wird:
http://www.axiomsol.com/pro_serv/compiler.php

selbstverständlich kann auch dieser Compiler nicht an den Limitierungen der JVM vorbeiwurschteln, daher gibt es auch diese sogenannte "Restrictions":
http://www.axiomsol.com/ampc_manual/index.html hat geschrieben: 1. All scalar data types are 1 word long. They are "char", "short", "int", "long", "long long", "float", "double", ...
2.
gms hat geschrieben: ist eigentlich keine "Restriction"
3. Goto statements across functions or blocks not allowed.
4. fork() followed by exec() functionality is implemented differently.
5. Memory size models for stack and heap are FEMTO, PICO, NANO, MICRO, TINY, SMALL, MEDIUM, LARGE, and HUGE. They are 0.25 meg, 0.5 meg, 1 meg, 2 megs, 4 megs, 8 megs, 16 megs, 20 megs, and 32 megs respectively. TINY model (4 megs) is the default.
6. The JVM limits each function/method to occupy at most 64KB of binary code space. Any function/method that is bigger than that will be caught by the JVM and execution is halted.
7. It is encouraged that the source file names to have only characters that are valid C identifier characters. This is to avoid the possibility of the Jasmin assembler not being able to parse file names used in function calls (method invocations) due to the existence of non-identifier character(s).
Punkt 1 ist wahrscheinlich, damit die Pointer-Arithmetic von C überhaupt in den Griff bekommen werden kann, und die "unsigned" Datentypen werden auch anscheinend stillschweigend in das "signed" Äquivalent übergeführt.
C/C++ Entwickler können sich sicherlich vorstellen, wer dann die eigentliche Portierung der Code Basis übernehmen muß, sicherlich nicht der Compiler :wink:

Gruß
gms

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 09:56:49

witzig ist das Teil ja, aber hier das Ergebnis von einem sehr einfachen Test:

Code: Alles auswählen

gms@gms2 ~/test2 $ cat test2.c
#include <stdio.h>
#include <limits.h>

int main()
{
  unsigned char uc = (unsigned char) -1;
  unsigned short us = (unsigned short) -1;
  unsigned long ul = (unsigned long) -1;

  printf("sizeof %s = %ld ( %d bit )\n","char",sizeof(char),CHAR_BIT);
  printf("sizeof %s = %ld\n","short",sizeof(short));
  printf("sizeof %s = %ld\n","int",sizeof(int));
  printf("sizeof %s = %ld\n","long",sizeof(long));
  printf("sizeof %s = %ld\n","long long",sizeof(long long));
  printf("sizeof %s = %ld\n","float",sizeof(float));
  printf("sizeof %s = %ld\n","double",sizeof(double));
  printf("sizeof %s = %ld\n","long double",sizeof(long double));

  printf("uc=%ld\n",(long) uc );
  printf("us=%ld\n",(long) us );
  printf("ul=%ld\n",(long) ul );
  return 0;
}
das erwartete Ergebnis:

Code: Alles auswählen

gms@gms2 ~/test2 $ gcc -o test2 test2.c -std=c89 -Wall
gms@gms2 ~/test2 $ ./test2
sizeof char = 1 ( 8 bit )
sizeof short = 2
sizeof int = 4
sizeof long = 8
sizeof long long = 8
sizeof float = 4
sizeof double = 8
sizeof long double = 16
uc=255
us=65535
ul=-1
und das zu erwartende falsche Ergebnis in Java:

Code: Alles auswählen

gms@gms2 ~/test2 $ java test2
sizeof char = 1 ( 8 bit )
sizeof short = 1
sizeof int = 1
sizeof long = 1
sizeof long long = 1
sizeof float = 1
sizeof double = 1
sizeof long double = 1
uc=-1
us=-1
ul=-1

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Java-Linux

Beitrag von michaels » 06.04.2010 10:17:37

Naja, das liegt wahrscheinlich ganz einfach daran, das es (soweit ich weiß) kein sizeof Äquivalent in Java gibt...

(das soll nur eine Erklärung für das Ergebnis sein mehr nicht!)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 10:34:40

michaels hat geschrieben:Naja, das liegt wahrscheinlich ganz einfach daran, das es (soweit ich weiß) kein sizeof Äquivalent in Java gibt...

(das soll nur eine Erklärung für das Ergebnis sein mehr nicht!)
sizeof ist auch kein C-Routine, das sollte schon vom Compiler richtig gesetzt werden und wenn man die "Restrictions" dieses Compilers beachtet, dann sind diese sizeof Ergebnisse ja sogar richtig.
Allerdings muß ein C Programm annehmen, daß wenn ein "char" eine Länge von 1 hat und ein "long long" eine Länge von 1 hat, das diese Datentypen gleich lang sind und daher "long long" auch nur den Bereich von 8bit umfassen kann. Laut Standard ist z.B bei "sizeof(char)" kein Padding oder sonstiges erlaubt )
Noch schlimmer ist aber das falsche Ergebnis bei den Casts

Gruß
gms

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 15:23:40

selbstverständlich kann auch dieser Compiler nicht an den Limitierungen der JVM vorbeiwurschteln, daher gibt es auch diese sogenannte "Restrictions":

http://www.axiomsol.com/ampc_manual/index.html hat geschrieben:1. All scalar data types are 1 word long. They are "char", "short", "int", "long", "long long", "float", "double", ...
2.
Unsinn!!!

Von der JVM kommen diese Beschränkungen bestimmt nicht, sonst würde auch Java keine Datentypen länger als ein Byte kennen:

Java-Datentypen:
http://www.datasource.de/programmierung ... typen.html

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Java-Linux

Beitrag von bmario » 06.04.2010 15:34:45

gerdich hat geschrieben:
selbstverständlich kann auch dieser Compiler nicht an den Limitierungen der JVM vorbeiwurschteln, daher gibt es auch diese sogenannte "Restrictions":

http://www.axiomsol.com/ampc_manual/index.html hat geschrieben:1. All scalar data types are 1 word long. They are "char", "short", "int", "long", "long long", "float", "double", ...
2.
Unsinn!!!

Von der JVM kommen diese Beschränkungen bestimmt nicht, sonst würde auch Java keine Datentypen länger als ein Byte kennen:

Java-Datentypen:
http://www.datasource.de/programmierung ... typen.html
Deine Logik ist Unsinn. Du hast nur gezeigt, das Java diese Einschränkung nicht hat. Das beweist nicht, dass die JVM diese Einschränkung nicht hat.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 15:43:26

Meine Logik ist korrekt.
Du hast nicht verstanden, was gms gesagt hat.

Er hat behauptet, dass ein C-zu-Bytecode-Compiler keine Datentypen länger als ein Byte haben könne, weil die JVM dies nicht zuliesse.

Wenn aber ein Java-zu-Bytecode-Compiler Datentypen länger als ein Byte kennt ist nicht einzusehen, warum ein C-Compiler das nicht können darf.

Die "Restrictions" des C-Compilers von gms können also keinesfalls von der JVM stammen.




Denken ist eine Kunst, die nicht jeder beherrscht!!!

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Java-Linux

Beitrag von bmario » 06.04.2010 15:58:07

gerdich hat geschrieben:Denken ist eine Kunst, die nicht jeder beherrscht!!!
Wie wahr :roll:

Und du behauptest, weil Java Datentypen beherrscht die länger als ein Byte sind, muss es auch die JVM können.
Nach der selben Logik müsste die JVM dann auch Collections können müssen.

Nebenbei, ich habe keine Ahnung ob die JVM es nun kann oder nicht. Und es ist mir völlig egal, aber deine Begründung ist schlicht und einfach falsch.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 16:02:23

gerdich hat geschrieben: Du hast nicht verstanden, was gms gesagt hat.

Er hat behauptet, dass ein C-zu-Bytecode-Compiler keine Datentypen länger als ein Byte haben könne, weil die JVM dies nicht zuliesse.
so einen Unsinn habe ich nie behauptet
gerdich hat geschrieben: Wenn aber ein Java-zu-Bytecode-Compiler Datentypen länger als ein Byte kennt ist nicht einzusehen, warum ein C-Compiler das nicht können darf.
es gibt jedenfalls unter C eine größere Zahl von Datentypen, wovon einige durch die JVM nicht unerstützt werden ( Das habe ich schon behauptet, bevor ich diesen Compiler gefunden habe )
Daher kann ein solcher Compiler auch nicht 100% C89-konform agieren ( vorrausgesetzt die JVM wird nicht entsprechend erweitert )
gerdich hat geschrieben: Die "Restrictions" des C-Compilers von gms können also keinesfalls von der JVM stammen.
dieser Compiler löst das Problem mit der fehlenden Unterstützung der JVM für Pointer-Arithmetik dadurch, daß er alle primitiven Datentypen mit gleicher Länge erzeugt.
Direkt kann man das also nicht der JVM anlaßten, insofern hast du recht.
Tatsache bleibt aber immer die fehlende Unterstützung für alle C-Datentypen, daher muß immer irgendein fauler Kompromiss geschlossen werden. z.B der Fehler by den Type-Casts ist auf die fehlende Unterstützung der JVM für Unsigned-Datentypen zurückzuführen.

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Java-Linux

Beitrag von bmario » 06.04.2010 16:19:57

@gms: Was mir grade auffällt:
gms hat geschrieben: das erwartete Ergebnis:

Code: Alles auswählen

gms@gms2 ~/test2 $ gcc -o test2 test2.c -std=c89 -Wall
gms@gms2 ~/test2 $ ./test2
sizeof char = 1 ( 8 bit )
sizeof short = 2
sizeof int = 4
sizeof long = 8
sizeof long long = 8
sizeof float = 4
sizeof double = 8
sizeof long double = 16
uc=255
us=65535
ul=-1
Warum erwartest du für ul=-1? Logischer wäre doch ähnlich wie bei uc und ul 2^64-1 ? Könntest du das kurz erklären wie das zustande kommt?

Mario
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 16:30:25

Code: Alles auswählen

  unsigned char uc = (unsigned char) -1;
  unsigned short us = (unsigned short) -1; // us bekommt den Wert 
  unsigned long ul = (unsigned long) -1;
nach dieser Initialisierung haben alle Variablen den Maximalwert angenommen, das ist bei "unsigned char" der Wert 255 und bei "unsigned short" der Wert 65535

Code: Alles auswählen

  printf("uc=%ld\n",(long) uc );
  printf("us=%ld\n",(long) us );
  printf("ul=%ld\n",(long) ul );
}
hier werden alle Variablen vom Datentyp 'unsigned ...' in den Datentyp 'long' umgewandelt. Bei 'uc' und 'us' soll dabei natürlich der Wert erhalten bleiben, daher 255 und 65535
Der Maximalwert von 'unsigned long' ergibt beim umwandeln in 'long' jedoch einen Overflow, daher ist hier das korrekte Ergebnis: -1

edit: laut C Standard darf hier bei dieser Umwandlung selbst bei einem Overflow kein Fehler ausgeworfen werden
Zuletzt geändert von gms am 06.04.2010 16:36:03, insgesamt 1-mal geändert.

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 16:35:39

es gibt jedenfalls unter C eine größere Zahl von Datentypen, wovon einige durch die JVM nicht unerstützt werden ( Das habe ich schon behauptet, bevor ich diesen Compiler gefunden habe )
Welcher Assembler unterstützt schon native alle Datentypen von C!
Datentypen kann man im Quelltext sogar selb er definieren!

Du behauptest auch, dass JVM nur numerische 1-Byte-Typen unterstützt und keine unsigned.
Das kann sein. Aber ein valables Argument hast du dafür nicht gebracht. Dein Argument war ein Denkfehler.
Du hast nur erwähnt, dass dein C-Compiler nur numerische 1-Byte-Typen zulässt.

Das lässt aber keinerlei direkte Rückschlüsse auf die JVM zu (wie der Fall "Java" zeigt.)
Das ist also nicht mehr als ein Denkfehler.

Eine Konvertierung ist von unsigned zu signed ist für einen Compiler überhaupt kein Problem. Davon sieht der C-Programmierer gar nichts-

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 16:39:27

wenn sonst irgend jemand diesbezügliche Fragen hat, dann antworte ich sicherlich sehr gerne darauf. Ich bin es aber leid, jemanden etwas zu erklären, der meine Erklärung überhaupt nicht verstehen will ...( oder kann ? )

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 17:00:05

Ich habe nur bedauernswerterweise den Eindruck, dass du anderen Teilnehmern Dinge erklären willst, die du selber nicht verstanden hast.


Der Spezifikation der JVM entnehme ich folgende Datentypen:
http://java.sun.com/docs/books/jvms/sec ... html#31446


signed:

byte
short
int
long

unsigned:
char

Welcher andere Assembler bietet mehr?


Ich möchte gerne die Möglichkeit eines Linux auf der JVM diskutieren.
Aber mit deinen unqualifizierten Behauptungen vertreibst du die Experten aus dem Thread.

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Java-Linux

Beitrag von bmario » 06.04.2010 17:43:16

Wenn du nicht nur die Einleitung lesen würdest, hättest du auch die Tabelle 3.3 gefunden: http://java.sun.com/docs/books/jvms/sec ... html#37906

Diese gibt gms vollkommen recht. Und er hat nie behauptet die JVM hätte 1-Byte Datentypen, er hat lediglich die "Restrictions" dieses C-Compiler gequotet. Und dort hieß es 1-word.
1 word = 4 Byte = 32 Bit

Und nochmals, die JVM ist nicht dazu gedacht um komplexe Betriebssysteme aus zuführen. Weder in Bezug auf Geschwindigkeit noch in Bezug auf Funktionalität. Geh dir bitte mal einen Linuxkernel im Quellcode anschauen, z.B. Version 0.1. Dann schau mal, wieviel Assembler das Ding enthält und wieviele "C-Hacks". Bis das überhaupt mit so einem Teil kompiliert, da ist der St.-Nimmerleins-Tag schon dreimal vorbei. (Oder auch e18 released).

Du glaubst uns nicht? Dann nimm den Code und portiere ihn, wenn du es schaffst halten wir dich für Gott.

Mario
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 17:55:00

Du hast wohl meine Tabelle nicht gelesen und nicht verstanden was Bytecode bedeutet.

Bytecode bedeutet, dass ein word 8 bit sind.

JVM kennt Datentpen von 1Word, 2Word, 4 Word.
Signed und unsigned.

Es ist egal wie dieser Compiler implementiert ist.
Und es ist möglich die C-Datentypen auch richtig zu implementieren.

Es ist keine gottgegebene Beschränkung, dass sizeof ein Word zurückliefert.
Und de facto tut es das auch gar nicht.
Deine Tabelle liefert nur die interne Berechnung der Datentypen.
Hier wandelt JVM einige Datentypen lokal in int um, um dann zu rechnen.

Davon hat hier niemand gesprochen.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von gms » 06.04.2010 17:58:01

bmario hat geschrieben:Und er hat nie behauptet die JVM hätte 1-Byte Datentypen, er hat lediglich die "Restrictions" dieses C-Compiler gequotet. Und dort hieß es 1-word.
danke, hauptsächlich weil du mir damit bestätigst, daß ich mit ein bißchen guten Willen auch verstanden werden kann :D

Gruß
gms

Benutzeravatar
schorsch_76
Beiträge: 2629
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Java-Linux

Beitrag von schorsch_76 » 06.04.2010 19:48:40

Hallo gerdich,

ich glaube ich verstehe worauf du hinauswillst. Die Grösse eines Datentypes ist laut Standard irrelevant (afaik). Sonst wäre bsp eine C Implementierung des gcc auf einem Linux/m68k und Linux/amd64 nicht möglich wenn beide Standardkonform sein sollen. Insbesondere fällt mir da ein

Code: Alles auswählen

amd64
sizeof(int) == 4

Code: Alles auswählen

m68k
sizeof(int) == 2
Insbesonders war dies wichtig bei der Umstellung von 32 Bit Code auf 64 Bit Code. Dies verursachte deutliche Probleme in vielen Softwareprojekten. "Man" geht oft, seht oft einfach davon aus, dass ein char = 1 Byte ist. Ein int = 4 Bytes, etc. Dies ist dann oft Code der zwar auf Architektur x86 läuft aber bsp auf einem m68k nicht läuft da ein int eben nur 2 Byte gross ist.

Gruß

schorsch

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 22:26:09

Wir fallen unter jegliches Niveau.

Nachdem nun aus den Spezifikationen feststeht, dass die Position von gms nicht haltbar ist gehen die Lügen los.

Ich zitiere gms:
gms@gms2 ~/test2 $ java test2
sizeof char = 1 ( 8 bit )
sizeof short = 1
sizeof int = 1
sizeof long = 1
sizeof long long = 1
sizeof float = 1
sizeof double = 1
sizeof long double = 1
uc=-1
us=-1
ul=-1
1 und nicht 4.

Das ist meine Antwort auf:
bmario hat geschrieben:Und er hat nie behauptet die JVM hätte 1-Byte Datentypen, er hat lediglich die "Restrictions" dieses C-Compiler gequotet. Und dort hieß es 1-word.

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Java-Linux

Beitrag von bmario » 06.04.2010 22:43:06

Wird jetzt von der Heise-Foren-Software jedem Forentroll ein Account auf df.de erstellt?

Wie auch immer. Und ich wiederhole mich, gms hat aus dem AMPC User Manual zitiert, in dem schwarz auf weiß steht, dass alle scalaren Datentypen die Länge von 1 word besitzen. Siehe Hier.
Das was du gepostest hast, ist die Ausgabe des folgenden Codes:

Code: Alles auswählen

gms@gms2 ~/test2 $ cat test2.c
#include <stdio.h>
#include <limits.h>

int main()
{
  unsigned char uc = (unsigned char) -1;
  unsigned short us = (unsigned short) -1;
  unsigned long ul = (unsigned long) -1;

  printf("sizeof %s = %ld ( %d bit )\n","char",sizeof(char),CHAR_BIT);
  printf("sizeof %s = %ld\n","short",sizeof(short));
  printf("sizeof %s = %ld\n","int",sizeof(int));
  printf("sizeof %s = %ld\n","long",sizeof(long));
  printf("sizeof %s = %ld\n","long long",sizeof(long long));
  printf("sizeof %s = %ld\n","float",sizeof(float));
  printf("sizeof %s = %ld\n","double",sizeof(double));
  printf("sizeof %s = %ld\n","long double",sizeof(long double));

  printf("uc=%ld\n",(long) uc );
  printf("us=%ld\n",(long) us );
  printf("ul=%ld\n",(long) ul );
  return 0;
}
Und zwar indem man ihn mit AMPC kompiliert und unter der JVM ausführt. Und das da 1 steht ist ganz simpel, schau es dir noch mal in Ruhe an, denk mal drüber nach. Kleiner Tipp, wie groß waren doch gleich alle skalaren Datentypen, wie es im Handbuch aufgeführt wird noch mal?

mario

ps: Wenn du uns jetzt weiter flamen willst, vergiss bitte nicht ein gepflegtes "!!!1einself!"
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

gerdich
Beiträge: 27
Registriert: 12.02.2010 15:17:39

Re: Java-Linux

Beitrag von gerdich » 06.04.2010 22:50:58

Nochmals das Zitat von gms
gms@gms2 ~/test2 $ java test2
sizeof char = 1 ( 8 bit )
8 Bit




Aber VIEL schlimmer noch!!
gms hat behauptet, dass diese 1-Byte Datentypen Restriktionen der JVM seien, die kein C-Compiler umgehen könnte.
(Das heisst auf Deutsch: Jeder C-Compiler auf der JVM KANN NUR 1-Byte-Datentypen umfassen. Das ist blanker Unsinn!!!)

Hier nochmals das Zitat:
selbstverständlich kann auch dieser Compiler nicht an den Limitierungen der JVM vorbeiwurschteln, daher gibt es auch diese sogenannte "Restrictions":
Blanker Unsinn.

Antworten