Programmiersprachen vergleichen durch einfache Programme
Hallöchen,
ich dachte mir, man könnte doch mal die verschiedensten Sprachen zusammenrufen und sie alle das selbe Programm erstellen lassen. Soll heißen, wir wählen ein Thema, etwas simples was man schnell machen kann, und jeder schreibt das ganze mal in seiner am liebsten benutzten Sprache. Das soll dem Zweck dienen, am Ende einen Vergleich aufstellen zu können, welche Sprache dafür am besten geeignet war, welcher Syntax am besten aussieht oder am besten angeordnet ist und sowas eben. Oder wie groß die EXE Datei zum Schluss dann ist.
Vorschlag meinerseits:
Wie wäre es zum Auftackt mit einer einfachen Übung - ein springender Ball im Bildschirm? (Nicht als Fensteranwendung sonder als Screen)
Das ist extra so einfach und ohne viel Spielraum gehalten (für den Anfang), damit man später besser vergleichen kann, wie viele Zeilen welche Programmiersprache benötigt hat, wie groß die EXE und ist und sowas eben.
Von daher, es sollten dann folgendes hier reingestellt werden:
Zitat
- Die compilierte .exe Datei
- den dazugehörigen Sourcecode (Falls es sich dabei um eine Datei handelt, die nur mit bestimmten programmen geöffnet werden kann, dann bitte per Textdokument abspeichern, dass man den Syntax betrachten kann)
- Angaben zur benutzten Sprache, welche man verwendet hat
- Effektive Zeilen (ohne Kommentare oder Absätze)
- Gesamte Anzahl Zeilen (Alle Zeilen incl. Absätzen und Kommentaren)
...
So, das wäre mein Vorschlag. Hätte denn jemand Interesse, mitzumachen?
Oder gibt es noch Vorschläge zum Ablauf hier, oder neue Themen?
1.) Das am weitesten verbreitet Beispielprogramm ist Hallo Welt. Es gibt bereits eine Seite, auf der diverse Sprachen anhand von HW miteinander verglichen werden (ich empfehle Brainfuck).
2.) Die Größe der kompilierten Datei ist abhängig vom Compiler (und seinen Einstellungen), dem System und der Implementierung. Wenig aussagekräftig.
3.) Das Verteilen von fertig kompilierten Programmen sollte nach Möglichkeit vermieden werden. Da kann man sich leicht was wegholen.
hm klingt soweit gut, jedoch waere ich nicht unbedingt fuer eine vollbildanwendung, da sowas mit manchen sprachen aeusserst unguenstig ist ... imho z.B bei Java ..
zudem sollte man noch sagen, ob und wenn ja, welche API genutzt werden soll ...
zudem sind graphikanwendingen sowieso ungeeignet, da fuer graphik vornehmlich API genutzt werden muss und API ist sowieso in jeder sprache groesstenteils gleich ...
ich waere ehr fuer ein Programm, das sich auf die grundlagen beschraenkt, z.B. einen Text ausgeben, zwei Zahlen von der Tastatur einlesen und dann das Produkt ausgeben
sozusagen ein etwas erweitertes Hallo Welt Programm
Jup, Hallo Welt kenn ich auch^^ Das war das erste was ich gemacht habe. Aber, ich dachte ja sowieso an mehrere Beispiele, nicht nur eines. Deshalb schlag ich vor, den Ball im Screen springen lassen, und als nächste Möglichkeit dann das Hallo Welt Programmchen...
Zitat
3.) Das Verteilen von fertig kompilierten Programmen sollte nach Möglichkeit vermieden werden. Da kann man sich leicht was wegholen.
...
Wie genau ist das jetzt gemeint? Etwas abschauen oder so? Gut, aber man muss ja schlussendlich auch das Resultat begutachten, ob der Code denn überhaupt funktioniert. Somit muss zwangsweise eine exe Dabei sein. Außerdem, aus einem fertigen Programm kann man noch immer nicht den Syntax erkennen, wie etwas geschrieben wurde, und da sich die Sprachen ja auch schonmal unterscheiden, wird es noch schwerer dort etwas abzuschauen.
Programmgröße, nun ja, es macht schon einen Unterschied ob es nun 5 KB oder 200 KB sind oder? Und dann wählt man eben einen möglichst passenden compiler der es mit der besten Performance und Größe compiliert. Na ja, und man könnte noch die Größe des Sourcecodes nehmen, da ist ja ASCII Text, und könnte in einer einfachen TXT Datei verglichen werden.
Möchte denn jemand mitmachen?
EDIT: Ok, Luki, kein Problem. Eine Fensteranwendung könnt man auch machen. Wie wäre es dann (nach deiner Idee) mit einem Taschenrechner der die 4 Grundrechenarten beherscht? ( + | - | * | /)
Bei der API würde ich die WinAPI mit einschließen. Sonst könnte man noch Direct X oder open GL nehmen, aber die benötigt man ja eher bei Vollbildanwendungen... Ich denke mal, es steht erst einmal frei, welche API oder?
Original geschrieben von Sunny Wie genau ist das jetzt gemeint? Etwas abschauen oder so?
...
Ich bezog mich eher darauf, daß man sich einen Virus einfangen könnte. Es braucht dazu nur zwei Rechner mit nicht ganz aktueller Antivirensoftware...
Es bleibt das Problem, daß fertige Binaries (abgesehen von der Frage, ob das Programm überhaupt funktioniert) kaum aussagekräftig sind. Die Größe einer Binary hängt von unzähligen Faktoren ab (zu der oben genannten Liste will ich an dieser Stelle noch das Betriebssystem hinzufügen).
APIs sollte man nach Möglichkeit vermeiden... Es gibt einfach zu viele Möglichkeiten. Ein Programm, das versucht, direkt mit X zu interfacen wird unglaublich kompliziert aussehen, obwohl der meiste Code nur für X draufgeht.
Den einfachen, konsolenbasierten Rechner halte ich für eine gute Idee. Vielleicht könnte man ihn noch um ein paar Funktionen erweitern (Potenzen und Quadratwurzeln gehören zum Standardrepertoire der meisten (höheren) Sprachen).
hm, na ja, wenn ich aber das Fenster genau mittig des Desktops platzieren will, kann ich doch über die WinAPI die Auflösung abfragen und das dadurch machen... Es sieht vielleicht komplexer aus, aber das ist es ja dann auch^^
Also die WinAPI halte ich in machen fällen schonmal für nützlich, bei einem so simplen Programm ansich noch nicht so sehr, aber auch Kleinigkeiten kann man dort ja nutzen. (Fenstertext oder Icon ändern, wobei das ja nur kleine Spielerei ist)... Ach ja, ich meinte mit Rechner eigentlich nich den Konsolenbasierenden, sonder eine Fensteranwendung... Für was wären denn die Anderen?
Hm, aber irgendwie muss man die Programme ja dann doch testen, also mit EXE... Dann schlage ich vor, die exen hochzuladen, und ich teste sie auf Viren durch und stelle mich als Tester bereit. Ich sag euch aber schonmal gleich, wer mir hier die Platte löscht, dem bin ich ehrlich böse!^^
So, ja dann machen wir doch zu Beginn mal einen Taschenrechner. Mit den 4 Rechenarten (wahlweise + quadrat und Quadratwurzel.)
Natuerlich hab ich jetzt auf Fehlerbehandlung und Eingabeueberpruefung verzichtet .. sollte das gewuenscht sein, liefere ich das natuerlich gerne nach ^^
So ich liefer nun die GUI version nach ...
Natuerlich muss man nicht den ganzen code schreiben .. das meisste uebernimmt die Visuelle Umgebung ^^ ... und hier ist natuerlich eine Ueberpruefung dabei, ob das Eingegebene auch wirklich Zahlen sind.
-----
[edit] Neue Version hochgeladen. Mit dem kleinen Kasten unter der Anzeige kann man den Rechner wieder auf 0 setzen.
[/edit]
-----
Ach ja, ich hab Quadrat und Wurzel vorerst nicht mit eingebaut, weil Luki das ja auch nicht getan hat.^^
Und Konsolenprogrammierung hab ich noch nie gemacht, daher nur eine Fensteranwendung.
So, ich hoffe es beteiligen sich noch ein paar Leutchen hier. Der Rechner kann auch noch einfacher aufgebaut sein, hauptsache die 4 Rechenarten sind dabei.
Erlaubt ist jede Sprache...
Ach, und bitte den Sourcecode nicht so wie Luki posten, dass macht alles so unübersichtlich. Besser wäre es, per *.txt Datei hochzuladen.
Weil es alles einfach einzubauen war, beherrscht das Teil die Fuktionen +, -, *, /, Potenzierung, Quadratwurzel und Modulo. Es hat sogar Tooltips.
Eingabeüberprüfung und Fehlerbehandlung sind schon eingebaut (entweder direkt bei C++ oder bei FLTK).
Das Programm basiert auf OpenGL und läßt sich auf jedem System kompilieren, auf dem OpenGL verfügbar ist.
Ich habe den Code in der FLTK-IDE (fluid version 1.0104) gemacht und nicht nachträglich verändert, deshalb ist er etwas unübersichtlich.
Anmerkung:
"Benötigt" beschreibt, was man alles installiert haben muß, um das Programm kompilieren zu können (oder ausführen, bei Interpretersprachen).
"Kompiliert als" gibt an, wie der Compiler aufgerufen wurde (wenn diese Angabe möglich ist).
"Art der Binary" ist hier nebensächlich und nur aus Gründen der unnötigen Vollständigkeit angegeben.
Alle "KB"-Angaben wurden durch das korrektere "KiB" ersetzt.
Original geschrieben von Ineluki hm ... also wenn ich mir den codeunfang etc so ansehe ... da wuerd ich sagen, mit Delphi hat sich das am besten gemacht ^^
Was sagt ihr dazu ?
...
Kommt drauf an.
Mit einer anderen API, bzw. einem anderen Toolkit oder als Konsolenapp wäre die C++-Version vielleicht Delphi gefährlich geworden; allerdings hatte ich da mit der Eingabe ein paar Probleme. Vielleicht mache ich noch eine Konsolenversion, mal sehen.
bei einem so einfachen problem kannst du den quellcode auch fast 1:1 uebernehmen und mit suchen und ersetzen die syntaxunterschiede ausgleichen und es wird laufen ....
die wichtigen unterschiede der sprachen zeigen sich meist erst, bei etwas komplexeren sachen
Gut, jetzt hat jeder mal einen Einblick in die Welt der anderen Sprache bekommen^^ Womit könnte man weiter machen? Das "hallo Welt" ist wohl etwas zuuuu einfach, als dass dort große Unterschiede wären. Jemand einen Vorschlag? Sonst könnte man nochmal auf den Springenden Punk im Screen zurückgreifen.
@Jeez ... also soo gefaellt mir dein Code schon viel besser ^^ .. aber haettest dui nicht while statt for(; verwenden koennen ? ^^
so und aus spass an der freude hab ich auch noch gleich das ganze mit dem springenden Ball im Fenster gemacht ... natuerlich alles ohne schnoerkel oder so ^^
Original geschrieben von Ineluki @Jeez ... also soo gefaellt mir dein Code schon viel besser ^^ .. aber haettest dui nicht while statt for(;;) verwenden koennen
...
Ein unkonditionales while tut genau das Gleiche wie ein unkonditionales for. Es ist an sich relativ egal, was man nimmt.
Hier das Hallo Welt mal in perl
[edit]Als kleines Goodie noch ein Programm, das eine Reihe von Dateien als Parameter nimmt und deren inhalt ausgibt:
[/edit]
@Jeez .. ich weiss .. aber solche forausdruecke koennten unsere anfaenger abschrecken, weil es ueberhaupt nicht dem entspricht, wozu eigentlich eine forschleife urspruenglich da war .. naemlich etwas hochzaehlen
So und hier noch ein beispiel, wo die OOP sehr schoen zur Anwendung kommt ... das Ballbeispiel als Multiball mit 5 baellen .. viel spass dabei ... ich weiss, das konzept ist nicht ganz bugfrei .. aber was solls ^^ ... die physik dahinter: beim zusammenstoss zweier kugeln tauschen sie ihre impulse, sowohl in Betrag als auch Richtung
Das Listing dazu:
Ein paar Anmerkungen:
Das ganze hat auch Exception Handling und fügt die benötigten Klassen einzeln hinzu, anstatt das gesamte Package... kostet aber auch nur ein paar Zeilen mehr.