Jump to content
marcel

Frage an die Programmierer im Forum

Recommended Posts

chaosmaker85
Posted

Denke mit .Net macht man auch für die Zunkunft wenig falsch. Bei Web Anwendungen ist Python nicht schlecht

PHP ist mittlerweile auch richtig erwachsen geworden, mit dem zend Framework lassen sich sehr schnell Ergebnisse erzielen (vorrangig für's Web geeignet)

Share this post


Link to post
etherial
Posted

@Berliner: Informiere dich über Java. Es gibt keine Pointer. Es gibt nur Referenzen (der Unterschied ist, dass man mit Referenzen nicht rechnen kann). Und die Referenzen in Java sind deutlich mächtiger als die in C++.

 

Wo siehst du da Ähnlichkeiten zu C?

 

Jedes Assembler-Programm (insbesondere die hardwarenahen) kann ich in C schreiben - oder nicht? Mit Java nicht.

Jedes Programm in Java kann ich in C oder Assembler schreiben

 

=> die Abstraktion geht in diese Richtung: Assembler > C > Java

 

Ich habe mit C++ nie mehr als Übungsaufgaben gemacht. Aber die haben mir schon derart die Nerven geraubt, dass ich mit Java deutlich glücklicher war.

Spricht nicht für dich bzw. kommt öfter vor, ist aber ein Trugschluß.

 

Wenn dir C gefällt, dann ist das deine Sache.

 

Der leichte Einstieg in Java kann zu der Illusion verhelfen, man würde alles richtig machen. In C++ fällt einem manches leichter auf die Füße, was in Java durchgeht. Das ist nicht unbedingt schlecht.

 

Ich habe C++ vor Java gekonnt. Ich habe es auch nach Java noch benutzt. Und ich würde es eher so sehen:

- in C++ fällt mir leichter was auf die Füße

- in Java bricht der Compiler ab, wenn ein solcher Fehler auftritt (mach mal einen Buffer-Overflow in Java - viel Erfolg)

- nimm einen x-beliebien falschen Algorithmus: jeder Fehler im C++Algorithmus fällt später oder gleichzeitig zu einem im Java-algorithmus auf

- Compilierfehler in C++ sind auch kompilierfehler in Java

- Laufzeitfehler in C++ sind in Java oft schon Kompilierfehler (implizite Casts) aber zumindest Laufzeitfehler

- Memoryfehler in C++ (wiederverwendung von fehlallokiertem Speicherplatz) kann dir in Java gar nicht passieren

- am besten machst du mal ein Beispiel in dem ein Fehler im C-Programm früher auffällt als in einem äquivalenten Javaprogramm

 

Speichermanagement ist schön und gut, aber auch nicht zu 100% verläßlich. Sonst gäbe es keine Vorträge zu memory leaks in Java.

 

Speichermanagement ist zu 100% verlässlich. Speicherlecks in Java sind Programmierfehler. Jemand der in C++ eine Liste in einer Endlosschleife befüllt, lässt auch den Speicher volllaufen. Das Problem ist aber nicht typisch für C. Typisch ist hingegen, dass man in C/C++ bei komplexeren Programmen erhebliche Schwierigkeiten bekommt, wenn man herausfinden will ob die Lebenszeit einer Allokation abgelaufen ist oder nicht. Nicht umsonst gibt es in C++ eine Reihe von Garbage-Collection-Bibliotheken die insgesamt oft sogar deutlich primitiver sind, als der Garbage-Collector der JVM.

 

Und wenn mir jemand erzählt, er bräuchte das, weil er sonst nicht klarkommt, dann habe ich große Zweifel an der Codequalität.

 

Ich mache meine Arbeit so schnell, gut und verständlich (für andere) wie möglich. Es geht nich darum, dass ich kein C++ schreiben könnte, sondern es geht darum, dass ich dieselbe Funktionalität in höherer Qualität und in verständlicherer Weise in Java geschrieben bekomme.

Share this post


Link to post
marcel
Posted

Nochmal Danke für all die Anregungen. Ich habe mir mal Groovy installiert und werde erstmal damit etwas rumspielen.

Ist ein bisschen ungewohnt, auch grafische Komponenten wieder in einem reinen Texteditor zu bearbeiten.

Bei meiner Examensarbeit damals unter Turbo Pascal 6.0 hatte ich 90% des Quellcodes noch für die Bedienoberfläche und Funktionsdarstellungen gebraucht und nur 10% für die internen Berechnungen und die Ansteuerung der externen Schnittstellen. Da war Delphi dann schon sehr schön, mit ein paar Mausklicks für das gleiche Ergebnis.

Aber hier geht es ja nur um ein paar Parameter die man schnell ausprobiert hat.

 

Marcel

 

P.S. Ich wollte hier auch keinen Glaubenskrieg über die beste Sprache vom Zaun brechen. Ich suche nur ein Tool für Softwarelegasteniker wie mich. :)

Share this post


Link to post
berliner
Posted · Edited by berliner

@Berliner: Informiere dich über Java. Es gibt keine Pointer. Es gibt nur Referenzen (der Unterschied ist, dass man mit Referenzen nicht rechnen kann). Und die Referenzen in Java sind deutlich mächtiger als die in C++.

witzisch. Ich programmiere Java seit 1998 (JDK 1.02).

Jedes Assembler-Programm (insbesondere die hardwarenahen) kann ich in C schreiben - oder nicht? Mit Java nicht.

Jedes Programm in Java kann ich in C oder Assembler schreiben

 

=> die Abstraktion geht in diese Richtung: Assembler > C > Java

falsch, das sind alles nur Turingmaschinen und deshalb sind sie in jeder Richtung konvertierbar.

Wenn dir C gefällt, dann ist das deine Sache.

sowieso.

- in C++ fällt mir leichter was auf die Füße

- in Java bricht der Compiler ab, wenn ein solcher Fehler auftritt (mach mal einen Buffer-Overflow in Java - viel Erfolg)

Eine ArrayIndexOutOfBoundsException kommt in Java auch erst zur Laufzeit.

- nimm einen x-beliebien falschen Algorithmus: jeder Fehler im C++Algorithmus fällt später oder gleichzeitig zu einem im Java-algorithmus auf

Das halte ich für Unsinn. Ob ein fehlerhafter Algorithmus auffällt ist gar keine Frage der Programmiersprache, sondern des Testens. Ich wüßte nicht, warum etwa ein falsches Rechenergebnis in Java eher auffallen sollte.

- Compilierfehler in C++ sind auch kompilierfehler in Java

Java hat mit 1.6 und den dort eingeführten generischen Typen aufgeholt. Bis dahin war C++ in dem Bereich klar überlegen, und das, wo du doch die Typsicherheit so als Vorteil betonst.

- Laufzeitfehler in C++ sind in Java oft schon Kompilierfehler (implizite Casts) aber zumindest Laufzeitfehler

- Memoryfehler in C++ (wiederverwendung von fehlallokiertem Speicherplatz) kann dir in Java gar nicht passieren

Dafür wird in Java gerne mit Speicher rumgesaut, weil die Komplexität für den Programmierer nicht mehr sichtbar wird. Übrigens habe ich da schon böse, schwer zu findende Fehler erlebt. Mein Favorit ist ein Backend, das beim Zugriff auf die Datenbank mit einem Deadlock eingefroren ist. Und warum? Weil der Entwickler in schönster Java-Manier nicht auf Ressourcen geachtet hat, sondern sich auf den Garbage-Collector verlassen. Also hat er in einer Schleife, die ein paar tausendmal durchlaufen wird, immer wieder neue Datenbankverbindungen aus dem Pool angefordert. Die hat er auch nach der Benutzung korrekt freigegeben, aber die wirkliche Rückgabe an den Pool macht erst der Garbage-Collector, der das aber mit undeterministischer Verzögerung tut. Also waren immer sehr schnell alle Connections belegt. Das ist ein Beispiel dafür, wie die vermeintliche Einfachheit von Java zu sehr viel schwieriger zu lokalisierenden Fehlern führt. Und das passiert besonders Leuten, für die Java die erste Programmiersprache ist.

 

Ich habe auch schon schöne Fehler gesehen, wo sich jemand auf eine determistische Reihenfolge bei der Ausführung von GUI-Code verlassen hat. Dummerweise wird da vieles in Threads erledigt und in einer anderen Umgebung funktioniert dann plötzlich was nicht mehr. Solche Fehler sind auch sehr unlustig zu debuggen.

- am besten machst du mal ein Beispiel in dem ein Fehler im C-Programm früher auffällt als in einem äquivalenten Javaprogramm

Am besten ist, man macht gar keine Fehler.

Speichermanagement ist zu 100% verlässlich. Speicherlecks in Java sind Programmierfehler.

Das hat eine gewisse Komik. Speichermanagement gibt es doch gerade, um Programmierfehler von vornherein zu vermeiden.

Jemand der in C++ eine Liste in einer Endlosschleife befüllt, lässt auch den Speicher volllaufen. Das Problem ist aber nicht typisch für C. Typisch ist hingegen, dass man in C/C++ bei komplexeren Programmen erhebliche Schwierigkeiten bekommt, wenn man herausfinden will ob die Lebenszeit einer Allokation abgelaufen ist oder nicht.

Das geht sogar ziemlich leicht. VisualStudio zeigt mit im Debug-Modus jedes Leck mit Zeilennummer an.

Ich mache meine Arbeit so schnell, gut und verständlich (für andere) wie möglich. Es geht nich darum, dass ich kein C++ schreiben könnte, sondern es geht darum, dass ich dieselbe Funktionalität in höherer Qualität und in verständlicherer Weise in Java geschrieben bekomme.

Das glaube ich nicht. Man kann auch in Java schlechten Code schreiben. Der individuelle Stil und die Fähigkeiten sind dafür ausschlaggebender als die Sprache. Ich glaube, du hast ein etwas altmodisches Verständnis von C-Code mit Pointer-Arithmetik und dergleichen Zeug. Da gab's damals sicher viel Unrat, aber man wird nicht dazu gezwungen. Man kann in C++ fast wie in Java programmieren. Den einzigen großen Unterschied sehe ich in dem Ausformulieren von Destruktoren, aber das ist nicht wirklich wild. Deshalb das "fast".

 

Nochmal Danke für all die Anregungen. Ich habe mir mal Groovy installiert und werde erstmal damit etwas rumspielen.

Ist ein bisschen ungewohnt, auch grafische Komponenten wieder in einem reinen Texteditor zu bearbeiten.

Qt Creator hat auch einen Gui-Editor. Da muß man nur noch im Code die Slots und Signale verbinden und die Signalbehandlung ausprogrammieren.

P.S. Ich wollte hier auch keinen Glaubenskrieg über die beste Sprache vom Zaun brechen. Ich suche nur ein Tool für Softwarelegasteniker wie mich.

Meinst du, so eine Gelegenheit würde jemand auslassen? :P

Share this post


Link to post
maush
Posted

 

P.S. Ich wollte hier auch keinen Glaubenskrieg über die beste Sprache vom Zaun brechen. Ich suche nur ein Tool für Softwarelegasteniker wie mich. :)

Da mußt du nur ein paar Stichworde wie Visual Basic vs. Java vs. C++ einwerfen und die Spezies gehen aufeinander los wie die Kampfhähne :)

 

Was mir noch einfiel: Wenn du gern mit Delphi gearbeitet hast, da gibt es inzwischen die freie Entwicklungsumgebung namens Lazarus. Das ist wohl ein weiterentwickelter Clone. Da schwören viele alte Delphi Entwickler drauf. Vielleicht ist das was für dich.

Share this post


Link to post
vanity
Posted

 

P.S. Ich wollte hier auch keinen Glaubenskrieg über die beste Sprache vom Zaun brechen. Ich suche nur ein Tool für Softwarelegasteniker wie mich. :)

Da mußt du nur ein paar Stichworde wie Visual Basic vs. Java vs. C++ einwerfen und die Spezies gehen aufeinander los wie die Kampfhähne :)

 

Ich stelle jetzt nach Studium des Threads folgende Arbeitshypothese auf:

 

- Java-Entwickler korrelieren stark positiv mit passiven Buy 'n Holdern

- C++-Entwickler korrelieren stark positiv mit aktiven Stockpickern/Markettimern

- VB-Entwickler korrelieren mit überhaupt nichts

 

Kann das jemand bestätigen? :-

Share this post


Link to post
berliner
Posted · Edited by berliner

Hier gibt's übrigens so eine Art Übersicht über "Hello World" in allen erdenklichen Programmiersprachen: http://99-bottles-of-beer.net/

 

C++ (Die ist allerdngs nicht vollständig. Muß mal jemand korrigieren)

#include <iostream>
using namespace std;

int main()
   {
   int bottles = 99;
   while ( bottles > 0 )
       {
       cout << bottles << " bottle(s) of beer on the wall," << endl;
       cout << bottles << " bottle(s) of beer." << endl;
       cout << "Take one down, pass it around," << endl;
       cout << --bottles << " bottle(s) of beer on the wall." << endl;
       }
   return 0;
   }

 

Java

class bottles
{
 public static void main(String args[])
   {
   String s = "s";
   for (int beers=99; beers>-1;)
     {
     System.out.print(beers + " bottle" + s + " of beer on the wall, ");
     System.out.println(beers + " bottle" + s + " of beer, ");
     if (beers==0)
       {
       System.out.print("Go to the store, buy some more, ");
       System.out.println("99 bottles of beer on the wall.\n");
       System.exit(0);
       }
     else
       System.out.print("Take one down, pass it around, ");
     s = (--beers == 1)?"":"s";
     System.out.println(beers + " bottle" + s + " of beer on the wall.\n");
     }
   }
}

 

Python

for quant in range(99, 0, -1):
  if quant > 1:
     print quant, "bottles of beer on the wall,", quant, "bottles of beer."
     if quant > 2:
        suffix = str(quant - 1) + " bottles of beer on the wall."
     else:
        suffix = "1 bottle of beer on the wall."
  elif quant == 1:
     print "1 bottle of beer on the wall, 1 bottle of beer."
     suffix = "no more beer on the wall!"
  print "Take one down, pass it around,", suffix
  print "--"

 


Share this post


Link to post
etherial
Posted

C++ und Java sind keine Turingmaschinen, sie sind Turing-mächtig, d.h. ich kann mit beiden Sprachen die selben Probleme lösen die auch eine Turingmaschine lösen kann. Nix mit hin und her konvertieren: Mit C++ kann ich einen Registerwert setzen, mit Java nicht. Mit C++ kann ich an eine dedizierte Adresse schreiben, mit Java nicht.

 

Ein Buffer-Overflowist etwas anderes als eine ArrayIndexOutOfBoundsException - eher das Gegenteil. Wenn du schon 10 Jahre C programmierst, dann sollte dir dieses Risiko durchaus bekannt sein.

 

Vergleichen wir bitte nur Programmierer mit gleichen Fertigkeiten. Ein Programmierer, der sich nicht um die Resourcen kümmert, scheitert in beiden Sprachen - in C potentiell früher. In C wird er häufiger mit der Problematik konfrontiert (und lernt dann vermutlich auch schneller worauf er aufpassen muss). Das jetzt als Vorteil hinzustellen bedeutet aber soviel wie aus der Not ein Tugend zu machen.

 

Kleiner Hinweis: "Das halte ich für Unsinn" halte ich nicht für überzeugend.

Share this post


Link to post
ipl
Posted

 

P.S. Ich wollte hier auch keinen Glaubenskrieg über die beste Sprache vom Zaun brechen. Ich suche nur ein Tool für Softwarelegasteniker wie mich. :)

Da mußt du nur ein paar Stichworde wie Visual Basic vs. Java vs. C++ einwerfen und die Spezies gehen aufeinander los wie die Kampfhähne :)

 

Ich stelle jetzt nach Studium des Threads folgende Arbeitshypothese auf:

 

- Java-Entwickler korrelieren stark positiv mit passiven Buy 'n Holdern

- C++-Entwickler korrelieren stark positiv mit aktiven Stockpickern/Markettimern

- VB-Entwickler korrelieren mit überhaupt nichts

 

Kann das jemand bestätigen? :-

Ich war mal VB-Entwickler, bis ich zu Python übergelaufen bin und bin eher Buy 'n Holder. Wenns dir hilft.

 

P.S. Zur Ehrenrettung der Informatiker: nach meiner Empfehlung für Python habe ich mich aus dem Glaubenskrieg herausgehalten. Als Informatiker wird man schon Mitte 20 altersmilde... Die Kriege hat man da längst schon alle geführt gehabt. ^^

Share this post


Link to post
maush
Posted

Ich war mal VB-Entwickler, bis ich zu Python übergelaufen bin und bin eher Buy 'n Holder. Wenns dir hilft.

Nur so interessehalber: Wenn du von VB kommst denke ich du programmierst auch PC Programme mit Python. Welche IDE nimmst du da? Ausschließlich Windows? Was waren denn die Gründe für den Wechsel?

Share this post


Link to post
ipl
Posted · Edited by ipl

Nur so interessehalber: Wenn du von VB kommst denke ich du programmierst auch PC Programme mit Python. Welche IDE nimmst du da? Ausschließlich Windows? Was waren denn die Gründe für den Wechsel?

Mein Wechsel von VB auf Python kam in einer Zeit, als ich von Windows-Programmen zur Onlineentwicklung gewechselt bin. ^^ Als Zwischenschritt hatte ich noch PHP. Ich habe nur noch ein größeres offline-Projekt mit Python gemacht, wenn man die unzähligen Tools nicht mitzählt, die man in Python in 3 Minuten zusammenhackt, weil man z.B. ein paar Hundert Fotos nach einem bestimmten Schema umbenennen will. Das war dieses erwähnte Signalaufnahmeframework.

 

Ehrlich gesagt nehme ich gar keine richtige Python-IDE, sondern nur einen etwas besseren Editor: PSPad. Syntax-Highlighting für Python ist drin und auch die Klassen und Funktionen werden erkannt/aufgelistet, aber der Code wird nicht etwa kontextsensitiv ergänzt, wie in der VB-IDE und einen Debugger gibt es da auch nicht. Das war am Anfang eine große Umstellung, aber damals gab es glaub ich noch keine guten IDEs für Python. Mittlerweile habe ich überlegt, beim nächsten Projekt Eclipse mit Pydev auszuprobieren.

 

Die grafische Oberfläche für das Framework wurde von einem anderen Entwickler geschrieben, dafür kann ich deshalb nicht so richtig IDEs empfehlen.

 

Die Gründe für den Wechsel waren zunächst, dass ich Websysteme entwickeln wollte/musste und das mit VB nur über das eher schwerfällige ASP.NET und nur unter Windows ging und ich die Server unter Linux betreiben wollte. Im Offline-Bereich ist das nicht so eindeutig, da würde ich je nach Projekt evtl. immer noch VB nehmen. Der größte Vorteil von Python ist aber auch in diesem Bereich die Fülle an allen möglichen Bibliotheken, von Neuronalen Netzen bis hin zu Modulen zur Ausführung von Berechnungen auf Grafikkartenprozessoren. Außerdem ist es mit Python z.B. sehr einfach möglich, Test-driven Development zu realisieren - für einen "Hobbyentwickler" aber eher irrelevant. Ansonsten ist Python betriebssystemunabhängig und ich mag einfach die Syntax. Vieles, was in anderen Sprachen 5-10 schwer durchschaubare Zeilen erfordert, lässt sich in Python mit einem einzigen und dennoch klaren (!) Ausdruck bewältigen.

 

Python ist extrem weit weg von der CPU und einfach viel näher am Hirn des Entwicklers. ^^ Wenn ich eine Menge von Objekten habe, und eine Untermenge nach bestimmten Kriterien haben will, dann schreibe ich das auch so, statt erst eine neue leere Menge zu initialisieren und die erste im Zyklus durchzugehen und ausgewählte Elemente der zweiten hinzuzufügen.

 

Menge2 = [x for x in Menge1 if x > 10]     # Menge2 enthält alle Zahlen aus Menge1, die größer als 10 sind

 

Python hat sehr viele "schöne" Features, wie z.B. integrierte komplexe Zahlen, beliebig große ganze und Fließkommazahlen, unendliche Listen (sowas wie Arrays und in dem Fall unendlich groß, z.B. mit "allen" ungeraden Zahlen), etc. Wer zu sehr in der CPU-nahen Programmierung gefangen ist, weiß das nicht unbedingt zu schätzen, weil er sich daran gewöhnt hat, solche alltäglichen Probleme selbst zu lösen oder (teilweise längst unbewusst) zu umgehen. Aber wenn man die Freiheit erstmal hat, dann mag man sie nicht mehr hergeben. ;)

Share this post


Link to post
berliner
Posted

C++ und Java sind keine Turingmaschinen, sie sind Turing-mächtig, d.h. ich kann mit beiden Sprachen die selben Probleme lösen die auch eine Turingmaschine lösen kann.

Eben, und deshalb sind sie auch ineinander konvertierbar. Es ist nur eine Frage des Aufwands.

Nix mit hin und her konvertieren:

Eben doch.

Mit C++ kann ich einen Registerwert setzen, mit Java nicht.

Das sind Spitzfindigkeiten, die in keinem Fall zu Unterscheidung zwischen Assembler und Hochsprache taugen und demzufolge auch nicht in der Definition auftauchen. Die Behauptung C sei ein Hochassembler ist nur eine polemische Aussage von C-Hassern. Früher waren das eben die Pascal- oder COBOL-Programmierer. Übrigens kann man auch mit C++ nicht einfach so in Register schreiben. Man kann höchstens Speicherzugriffe innerhalb des virtuellen Adressraums des Programms machen.

Ein Buffer-Overflowist etwas anderes als eine ArrayIndexOutOfBoundsException - eher das Gegenteil. Wenn du schon 10 Jahre C programmierst, dann sollte dir dieses Risiko durchaus bekannt sein.

Ach was. Ein Pufferüberlauf ist ein Zugriff über die Grenzen eines reservierten Speicherbereichs hinaus. Ob dann eine ArrayIndexOutOfBoundsException oder irgendwas anderes kommt, hängt von dem verwendeten Konstrukt ab. Und äquvivalent zur ArrayIndexOutOfBoundsException, die von der VM ausgelöst wird, ist dann eben in C der segmentation fault, der vom OS kommt. Letzten Endes ist das das gleiche. Der einzige Unterschied ist, daß man das in Java behandeln kann, was aber normalweise den Fehler auch nicht ausgleichen kann, aber natürlich praktisch für Server-Anwendungen ist.

Vergleichen wir bitte nur Programmierer mit gleichen Fertigkeiten. Ein Programmierer, der sich nicht um die Resourcen kümmert, scheitert in beiden Sprachen - in C potentiell früher.

Aber in Java lernt er es gar nicht erst und er hat auch wenig Motivation es zu lernen, und das eben gerade, wo in Java viel server-seitig programmiert wird, also Anwendungen mit langer uptime. Da will man wirklich keinen unbedachten Umgang mit Ressourcen oder memory leaks haben.

Share this post


Link to post
Sven82
Posted
Python ist extrem weit weg von der CPU und einfach viel näher am Hirn des Entwicklers.

deshalb ist Python auch in OpenOffice als Skriptsprache enthalten, so dass man eigene Makros damit schreiben kann, vorausgesetzt man kann UNO spielen ;)

Share this post


Link to post
etherial
Posted

Eben, und deshalb sind sie auch ineinander konvertierbar. Es ist nur eine Frage des Aufwands.

 

Wo hast du deine Theorie gelernt? Du bist doch nicht studiert, oder?

 

Lies die Definition von Turingmächtigkeit auf Wikipedia nach. Da steht zusammengefasst, dass jede turing-mächtige Sprache die Ergebnisse einer Turingmaschine berechnen kann. Da steht nicht, dass jede Turingmaschine, das Ergebnis jeder Sprache berechnen kann.

 

Dass du mit Assembler alles hinkriegst, was du mit C machen kannst,

und dass du mit Java alles hinkriegst, was du Java machen kannst,

liegt daran, dass Java einige Abstraktionslevel höher als die beiden anderen Sprachen liegt.

 

Wenn dich das Wort Makroassembler stört (sollte sowieso nur polarisieren), dann nenne es eben "maschinennahe Hochsprache". Egal wie du es nennst, du kannst den Abstraktionsgrad von C nicht über den von Java heben. Da C++ ein Superset von C ist, bleibt auch der Abstraktionsgrad von C++ unter dem von Java.

 

Das sind Spitzfindigkeiten, die in keinem Fall zu Unterscheidung zwischen Assembler und Hochsprache taugen und demzufolge auch nicht in der Definition auftauchen.

 

Es ist der Beweis dafür, dass man das eine nicht in das andere konvertieren kann:

- "register int x = 0; geht in Java nicht.

- Ports der Graphikkarte auslesen geht auch nicht.

- Typen als array in den Speicher schreiben und als Objekt wieder auslesen geht auch nicht

- Speicher als Array beschreiben und dann als Funktion aufrufen geht auch nicht

- inline assembler geht in Java nicht

 

C hat durchaus seine Berechtigung - in der Systemprogrammierung. Warum wohl? Weil man beim Schreiben eines Treibers nunmal auf die Hardware eingehen muss. Und weil es bei Betriebsystemen unter anderem eben auch darum geht die Rechnerkapzitäten optimal auszunutzen.

 

Man kann höchstens Speicherzugriffe innerhalb des virtuellen Adressraums des Programms machen.

 

Interessant ... vielleicht kann ich da ja noch was lernen:

 

Ich dachte immer, dass das Speichermanagement von Unix und Windows überwiegend in C geschrieben ist. Somit müsste auch das Mapping von logischen Adressen auf physische von C übernommen werden. Muss man dazu tatsächlich Assembler bemühen?

 

Ach was. Ein Pufferüberlauf ist ein Zugriff über die Grenzen eines reservierten Speicherbereichs hinaus.

 

Ich hab dir extra den Wikipedia-Artikel verlinkt. Buffer-Overflow ist im allgemeinen Sprachgebrauch synonym zur Buffer-Overflow-Attacke. Ich hoffe, das du nach dem Studium des Artikels meinst was ich meine:

 

Auf Programmiersprachenebene kann die Gefahr von Pufferüberläufen durch die Verwendung von Programmiersprachen, die konzeptionell sicherer als C/C++ sind, verringert oder ausgeschlossen werden.

Share this post


Link to post
berliner
Posted

Lies die Definition von Turingmächtigkeit auf Wikipedia nach. Da steht zusammengefasst, dass jede turing-mächtige Sprache die Ergebnisse einer Turingmaschine berechnen kann. Da steht nicht, dass jede Turingmaschine, das Ergebnis jeder Sprache berechnen kann.

Belehr nicht nicht bzw. paß nächstes Mal in der Vorlesung besser auf. Ein Programm in jeder turing-mächtigen Sprache läßt sich in eine Abfolge von loops und ifs umwandeln und daraus dann wieder zurück in jede andere turing-mächtige Sprache.

Wenn dich das Wort Makroassembler stört (sollte sowieso nur polarisieren), dann nenne es eben "maschinennahe Hochsprache".

Na jetzt plötzlich. Warum diskutieren wir dann hier lange rum, wenn du du selber weißt, daß der Begriff Unsinn ist?

Egal wie du es nennst, du kannst den Abstraktionsgrad von C nicht über den von Java heben. Da C++ ein Superset von C ist, bleibt auch der Abstraktionsgrad von C++ unter dem von Java.

merkwürdige Argumentation.

 

Es ist der Beweis dafür, dass man das eine nicht in das andere konvertieren kann:

- "register int x = 0; geht in Java nicht.

- Ports der Graphikkarte auslesen geht auch nicht.

- Typen als array in den Speicher schreiben und als Objekt wieder auslesen geht auch nicht

- Speicher als Array beschreiben und dann als Funktion aufrufen geht auch nicht

Und wenn das jemand in Java einbaut, dann wird daraus ein "Hochassembler"?

- inline assembler geht in Java nicht

Geht in C auch nur, weil es der Compiler mischt. Bau eine Java-Interpreter, der Java mit Bytecode mischt und dann geht's da auch.

C hat durchaus seine Berechtigung - in der Systemprogrammierung. Warum wohl?

Du solltest nicht so frisch und frei C mit C++ verwechseln.

 

Ich dachte immer, dass das Speichermanagement von Unix und Windows überwiegend in C geschrieben ist. Somit müsste auch das Mapping von logischen Adressen auf physische von C übernommen werden. Muss man dazu tatsächlich Assembler bemühen?

 

Ich vermute, auch in Assembler kommt man nur an den virtuellen Adressraum ran. Möglicherweise geht was mit shared memory. Aber ich programmiere nun mal in C++ alles andere als hardwarenah, und deshalb wirst du jemand andere fragen müssen. Lustigerweise wurde Java ursprünglich mal als Sprache zur Programmierung von Geräten entworfen. Die Real-Time Specification for Java sieht übrigens Zugriffe auf physikalische Speicherbereiche vor:

 

The RTSJ defines classes for programmers wishing to directly access physical memory from code written in the Java language. RawMemoryAccess defines methods that allow the programmer to construct an object that represents a range of physical addresses.

 

Ich hab dir extra den Wikipedia-Artikel verlinkt. Buffer-Overflow ist im allgemeinen Sprachgebrauch synonym zur Buffer-Overflow-Attacke.

 

Ich hoffe, das du nach dem Studium des Artikels meinst was ich meine:

Sag einfach gleich, was du meinst.

Auf Programmiersprachenebene kann die Gefahr von Pufferüberläufen durch die Verwendung von Programmiersprachen, die konzeptionell sicherer als C/C++ sind, verringert oder ausgeschlossen werden.

Klar kann es das, aber das macht aus C++ keinen "Hochassembler": Ada ist bestimmt sicherer als Java. Wird Java deshalb zum "Hochassembler"?

 

Schau einfach mal hier nach.. Da geht's um die "Steelman" requirements an "high order languages". Da kommt das raus:

 

Language  "No"  "Partial"  "Mostly"  "Yes"  Percentage of Answers with "Mostly" or "Yes" 
Ada 	3 	5 	11 	94 	93%
C 	32 	21 	16 	44 	53%
C++ 	19 	17 	23 	54 	68%
Java 	20 	12 	22 	59 	72%

Interessant, oder? Der Abstand zwischen C++ und Java ist nur 4%, der zwischen Ada und Java 21%. Ist etwas veraltet. Inzwischen hat Java bei Templates zu C++ aufgeholt, aber trotzdem interessant. Aber von C++ gibt's auch bald eine Überarbeitung mit interessanten, neuen Sachen.

Share this post


Link to post
ipl
Posted · Edited by ipl

Ich dachte immer, dass das Speichermanagement von Unix und Windows überwiegend in C geschrieben ist. Somit müsste auch das Mapping von logischen Adressen auf physische von C übernommen werden. Muss man dazu tatsächlich Assembler bemühen?

 

Ich vermute, auch in Assembler kommt man nur an den virtuellen Adressraum ran. Möglicherweise geht was mit shared memory.

Die Frage, ob man in C, C++ oder Assembler an physischen Adressraum rankommt, ist eher eine Frage, ob der Code Kernel-Privilegien hat oder nicht.

 

Edit:

Und bezüglich Turingmaschinen - ja, von der Mächtigkeit der Berechnungen sind alle gängigen Programmiersprachen untereinander und mit Turingmaschinen äquivalent, die Programme sind also auch ineinander konvertierbar. Das sagt aber 1. nichts über den Ressourcenzugriff (Speicher, Interrupts, etc.) aus und 2. auch nichts darüber, wie effektiv man darin programmieren kann.

Share this post


Link to post
unser_nobbi
Posted · Edited by unser_nobbi

Edit:

Und bezüglich Turingmaschinen - ja, von der Mächtigkeit der Berechnungen sind alle gängigen Programmiersprachen untereinander und mit Turingmaschinen äquivalent, die Programme sind also auch ineinander konvertierbar. Das sagt aber 1. nichts über den Ressourcenzugriff (Speicher, Interrupts, etc.) aus und 2. auch nichts darüber, wie effektiv man darin programmieren kann.

 

Schoenes Beisiel ist "Ook!" :lol: Ist auch aequivalent zu einer Turingmaschine .... jedoch schwer zu lesen .. :P

Unten ein Programm zur Ermittlung der Fibonaccizahlen in "Ook!" :P (Coding ist aber ohne Kommentarzeilen - habs auch nur kopiert ;)):

 

"Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.

Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook.

Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook.

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook!

Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook? Ook.

Ook? Ook. Ook? Ook. Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook! Ook?

Ook! Ook! Ook? Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook!

Ook? Ook! Ook? Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook.

Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook.

Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook.

Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook.

Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook?

Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook? Ook! Ook! Ook? Ook!

Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook! Ook! Ook? Ook. Ook? Ook. Ook.

Ook? Ook. Ook! Ook! Ook? Ook! Ook? Ook! Ook? Ook! Ook? Ook! Ook? Ook! Ook? Ook! Ook? Ook! Ook? Ook!

Ook? Ook! Ook? Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook? Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook?

Ook. Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook? Ook! Ook? Ook. Ook? Ook.

Ook? Ook. Ook? Ook! "

Share this post


Link to post
Sven82
Posted
th_futschlach.gif

Share this post


Link to post
thomas80
Posted · Edited by thomas80

Um mal auf die Eingangsfrage zurückzukommen:

 

Ist nicht hardware-nahe Programmierung erforderlich, sollte man Java können. Die Libraries, die man in Java vorfindet, sind gigantisch gross (EMF z.B.) und

neue, dynamische, modulare Konzepte (Jigsaw/OSGi). Mit OSGi kann ja bekanntermaßen gegen dynamische Services programmieren.

 

Ein Konzept, dass künftig wegweisend sein wird.

 

Über modellgetriebene Entwicklung muss ich mich ja nicht auslassen. Mit EMF machts jedenfalls richtig Spass (NASA setzt es nicht umsonst ein....).

 

Deshalb Java ( auch wenn Java ein paar Schwachstellen hat: Type erasure bei Generics, Garbage Collector kaum beeinflussbar, String Implementierung, keine Closures)

Share this post


Link to post
ipl
Posted · Edited by ipl
NASA setzt es nicht umsonst ein...

Hach, die NASA. Die setzt aber auch wirklich jeden Mist ein. :rolleyes: Das ist wie mit Teflonpfannen. Die stammen angeblich auch aus der Raumfahrt. NASA kocht nicht umsonst mit Teflon!

 

Die haben was weiß ich für Anwendungen für, und die haben weder mit Hobby-Programmen noch mit Kochen zu tun.

Share this post


Link to post
unser_nobbi
Posted
NASA setzt es nicht umsonst ein...

Hach, die NASA. Die setzt aber auch wirklich jeden Mist ein. :rolleyes: Das ist wie mit Teflonpfannen. Die stammen angeblich auch aus der Raumfahrt. NASA kocht nicht umsonst mit Teflon!

 

 

Es gibt Firmen, die setzen bewusst JAVA (und die anderen Dinge, wie EMF) bewusst nicht für sicherheitsrelevante Applikationen ein; z.B. Firmen aus dem Gesundheitswesen.

 

Aber ich denke für zu Hause ist irgendein C oder auch Java schon ok (oder natürlich Ook! :lol:). Für Ook! gibt es bereits auch schon Compiler für verschiedene Plattformen.

Share this post


Link to post
etherial
Posted

Es gibt Firmen, die setzen bewusst JAVA (und die anderen Dinge, wie EMF) bewusst nicht für sicherheitsrelevante Applikationen ein; z.B. Firmen aus dem Gesundheitswesen.

 

Was setzen die ein?

Share this post


Link to post
H.B.
Posted

Es gibt Firmen, die setzen bewusst JAVA (und die anderen Dinge, wie EMF) bewusst nicht für sicherheitsrelevante Applikationen ein; z.B. Firmen aus dem Gesundheitswesen.

 

Was setzen die ein?

 

z.B. ADA (Militär, Luftfahrt, Kraftwerke)

Share this post


Link to post
thomas80
Posted · Edited by thomas80
NASA setzt es nicht umsonst ein...

Hach, die NASA. Die setzt aber auch wirklich jeden Mist ein.

 

Naja, für die wirklich wichtigen und teuren Sachen ( Marsmission) wird auf die bewährte (verteilte) modellgetriebene Softwareentwicklung (EMF+CDO) zurürckgegriffen und nicht auf Mist a la PHP und Co. <_<

 

 

...Diese Kombination aus modellgetriebener Architektur und Enterprise-Eigenschaften machte CDO attraktiv für eine ganze Reihe wirklich großer Spieler. So setzt zum Beispiel das Jet Propulsion Laboratory (JPL) der NASA das CDO Model Repository für Mission Planning und Control der kommenden Marsmission ein. Die Kanadische Space Agency hat ein sehr interessantes Projekt von autonom agierenden Robotern, die auf einem CDO-gestützten Distributed Shared Model operieren. Die US-amerikanische Firma Echostar setzt CDO seit Jahren erfolgreich zum feingranularen Asset-Management einer Flotte von sechs Orbitalsatelliten ein. Bombardier Schweden zeigte eindrucksvoll, wie es mit CDO gelang, einem existierenden EMF-Werkzeug zur Planung von Gleis- und Signalsystemen innerhalb einer knappen Woche Entwicklungsarbeit neue Charakteristika wie Multi-User-Fähigkeit und transparente Versionierung einzuhauchen. Das Kanadische Verteidigungsministerium setzt CDO bereits seit mehreren Jahren in einem (leider streng geheimen) Projekt ein und stellt dazu einen full-time Committer ab....

 

Quelle: Eclipse Magazin: Interview

 

 

 

 

[Es gibt Firmen, die setzen bewusst JAVA (und die anderen Dinge, wie EMF) bewusst nicht für sicherheitsrelevante Applikationen ein; z.B. Firmen aus dem Gesundheitswesen.

 

Ich verstehe diese Aussage nicht. Begründe sie mal !

 

 

Eclipse Modeling Framework (EMF)ist absolut ausgereift. Das merkt allmählich auch SAP, obwohl die das auch vor 3 Jahren hätten merken können. Die kommende Version von Eclipse (e4) basiert z.B. auf EMF.

 

Sicherlich ist anfangs ein gewisses Know-How erforderlich (Kenntnisse in modellgetriebene Entwicklung, Kenntnisse in EMF und Eclipse Pluginprogrammierung, sehr gute Java Kenntnisse...), aber danach will man EMF einfach nicht mehr missen.

 

Die Vorteile von EMF :

 


  • Java Code mit Annotation ist gleich UML-Modell ist gleich XML Dokument.
     
    Validierung ist ganz einfach möglich (Füge Contraint in UML Modell ein (in Java Code sowas zu programmieren, kann unschön werden, denn was haben Constraints in Business-Logik zu tun.... )
     
    Persistenz in Form von XML/XMI ist schon frei Haus dabei.
     
    Der Reflection-Mechanismus von EMF ist dem von Java deutlich überlegen an Performanz und Schönheit der API.
     
    Minimaler Overhead für den Einsatz von Standalone(also ohne Eclipse) EMF (ca.450KB)

 

Im Gesundheitswesen wird sicherlich auch Java/EMF eingesetzt.

 

Siehe auch Open Healthcare Framework

 

 

Ich bleibe dabei: Java kann man überall einsetzen (ausser für die hardware-nahe Programmierung).

Share this post


Link to post
unser_nobbi
Posted · Edited by unser_nobbi

Ich verstehe diese Aussage nicht. Begründe sie mal !

 

Eclipse Modeling Framework (EMF)ist absolut ausgereift. Das merkt allmählich auch SAP, obwohl die das auch vor 3 Jahren hätten merken können. Die kommende Version von Eclipse (e4) basiert z.B. auf EMF.

 

 

Es gibt z.B. im Gesundheitswesen kritische Applikationen, bei denen sich (absolute Markführer) gegen Java entscheiden; zumindest für die Kontroll-/ Steuerfunktionen. Was die für den Frontend nehmen, weiss ich nicht.

 

Diese nehmen für die kritischen Funktionen einen C-Dialekt (C oder C++, wenn ich mich recht erinnere).

 

Problem von Frameworks ist wohl, dass Du da "nicht drin steckst" -> wer ist dafür haftbar, wenn es einen Bug gibt ?

 

Wenn Du als Anwender von SAP nen Dump erhältst, aussteigst oder einfach nur wartest, bist Du halt als ein Anwender solch spezieller Produkte evtl. bereits tot.:o

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...