Welche Programmiersprachen gefallen euch neben C und C++?
-
Vorwort: Ich programmiere in C++ seit knapp 10 Jahren. War von Anfang an begeistert und positiv überrascht (Destruktoren, Templates). Aber die Sprache hat eben auch ihre hässlichen Warzen. C mag ich nicht so. Es ist doch nur "portable assembly" und bietet in Sachen Abstraktion zu wenig für meinen Geschmack.
Welche Sprachen mir noch so gefallen? Rust! Und wenn ich irgendwann mal wieder selbst geschriebenen Code auf einer JVM oder DVM laufen lassen will, dann würde ich es mit Kotlin probieren.
-
Vielleicht doch noch etwas, das bisher nicht erwähnt wurde (auch wenn mich der OP nicht gerade motiviert hat, ernsthaft zu antworten ;)):
Ich bin von Lua sehr angetan, vor allem wegen der Flexibilität der Sprache bei gleichzeitig sehr kleinem Interpreter. Von Haus aus kennt die Sprache noch nicht einmal OOP, aber sie ist dank Metatables so dynamisch, dass man OOP so gut mit vorhandenen Sprachelementen hinzu-implementieren kann, dass man gar nicht mehr merkt, dass der Sprache selbst eigentlich keine OOP direkt untersützt. Auch dass das kleine Ding Operator Overloading beherrscht, finde ich sehr erfreulich.
Was ich an Lua nicht mag, ist dass Indizes mit 1 beginnen - bei den ganzen zusätzlichen "+1/-1" zur Korrektur bei Index-Berechnungen merkt man schon, dass bei 0 zu beginnen, die "natürlichere" Variante ist, besonders wenn man viel mit Indizes und "Ranges" hantiert.
Auch dass alle numerischen Berechnungen mit
double
-Werten erfolgen stört mich, allerdings auch nur da ich die Sprache in einem System einsetze, wo ich viel mitint64
-Werten zu tun habe, deren Wertebereich auch voll ausgenutzt wird. Diese lassen sich in Lua in Gegensatz zuint32
, nur sehr umständlich korrekt mitdouble
-Werten abbilden.Dennoch, Lua ist meistens eine gute Wahl wenn man in einem Softwareprojekt irgendwann mal Skripting-Funktionalität benötigt und das Ganze dennoch schlank halten möchte, die Entwicklung einer eigenen Skriptsprache zu aufwändig ist, oder aus NIH-Gründen abgelehnt wird (Hurra! Noch eine neue Sprache! ;)).
-
Hi Finnegan,
Die Frage der Indices ist in Delphi optimal gelöst, da gibt man an, von wo bis wo die gehen sollen.
Gruß Mümmel
-
Kotlin sieht ja mal sehr interessant aus. Danke für den Tipp. Vor allem wird als Plattform Android und Javascript unterstützt.
-
Finnegan schrieb:
Was ich an Lua nicht mag, ist dass Indizes mit 1 beginnen - bei den ganzen zusätzlichen "+1/-1" zur Korrektur bei Index-Berechnungen merkt man schon, dass bei 0 zu beginnen, die "natürlichere" Variante ist
Ja, wenn man routinemäßig den Index auf die Startadresse addiert, um die Zieladresse zu erhalten, ist es natürlicher, mit Index 0 anzufangen. Sonst ja eher nicht - natürlicher ist, von 1 an zu zählen.
Finnegan schrieb:
Diese lassen sich in Lua in Gegensatz zu
int32
, nur sehr umständlich korrekt mitdouble
-Werten abbilden.wie machst Du das denn mit dem int64-auf-double-Abbilden?
-
Finnegan schrieb:
Ich bin von Lua sehr angetan,
ich auch.
Finnegan schrieb:
vor allem wegen der Flexibilität der Sprache bei gleichzeitig sehr kleinem Interpreter. Von Haus aus kennt die Sprache noch nicht einmal OOP, aber sie ist dank Metatables so dynamisch, dass man OOP so gut mit vorhandenen Sprachelementen hinzu-implementieren kann, dass man gar nicht mehr merkt, dass der Sprache selbst eigentlich keine OOP direkt untersützt. Auch dass das kleine Ding Operator Overloading beherrscht, finde ich sehr erfreulich.
Das ist ja mal das blödeste Argument: OOP in einer Nicht-OO-Sprache durch zusätzliche Krücken betreiben. Nein, da kann ich ja auch sagen "Das tolle an C und ASM ist, das ich da auch mit Hilfsmitteln OOP machen kann."
Eine Sprache soll MIR Arbeit abnehmen! Warum soll ich der Sprache Arbeit abnehmen? Wenn ich OOP machen will, nehme ich eine OO-Sprache. Davon gibt es reichlich zur Auswahl, z.B. AngelScript.
Und wenn Lua mir keine OO-Features anbietet, dann mache ich das damit auch nicht. Ich benutze Lua so, wie es gedacht wurde: für Scripte und Konfigurationen. Dafür ist Lua 1A geeignet.
Finnegan schrieb:
Was ich an Lua nicht mag, ist dass Indizes mit 1 beginnen - bei den ganzen zusätzlichen "+1/-1" zur Korrektur bei Index-Berechnungen merkt man schon, dass bei 0 zu beginnen, die "natürlichere" Variante ist, besonders wenn man viel mit Indizes und "Ranges" hantiert.
Ehm, jeder nicht Informatiker oder C-lastige Programmierer fängt bei 1 an zu zählen. Sage einem Schüler "Zähl mal bitte bis 10!", und er wird nicht mit "0" anfangen. Selbst jeder Informatiker wird in der Freizeit bei 1 anfangen zu zählen.
Finnegan schrieb:
Auch dass alle numerischen Berechnungen mit
double
-Werten erfolgen stört mich, allerdings auch nur da ich die Sprache in einem System einsetze, wo ich viel mitint64
-Werten zu tun habe, deren Wertebereich auch voll ausgenutzt wird. Diese lassen sich in Lua in Gegensatz zuint32
, nur sehr umständlich korrekt mitdouble
-Werten abbilden.Verstehe ich nicht, wie das funktionieren soll? Da sollten doch irgendwann falsche Berechnungen bei dir auftauchen?
Warum kompilierst du das Lua nicht einfach mit dem passenden int64? Immerhin kann man das durch ein Makro bei Lua machen. Auf alten Systemen ohne FPU wird Lua meistens mit int32 kompiliert, weil Fließkomma da nur mit Emulation funktionieren würde und zu langsam wäre. Dann solltest du Lua auch an deine Bedürfnisse anpassen können...
-
Zee++ schrieb:
Welche Programmiersprachen gefallen euch neben C und C++?
- C gefällt mir nicht
- C++ gefällt mir zwar besser, aber auch nicht perfekt
- Java find ich vom Grundsatz her angenehmer als C++ (mit Abstrichen)
- Bevorzugen tue ich seit einigen Jahren C#
Viele Sprachen die gerne auch als "C++"-Nachfolger propagiert werden sagen mir garnicht zu. Entweder akzeptiert man das es gänzlich andere Sprachen sind und stellt sie auch entsprechend vor, oder man sollte sich Semantisch und Syntaktisch an C++ orientieren (nicht in allen Details, C++ hat einige Mängel, aber auch nicht so das man sich fragt warum man dann überhaupt C++ erwähnt).
Gänzlich nicht gefallen tuen mir die an Pascal und Basic orientierten Sprachen, alle Sprachen wo man selbst mit C++ weniger Klammern nutzt...
-
QuickBasic
-
Ich habe mal eine wenig zu Kotlin recherchiert. Wirklich nett aber ich starte doch erst einmal mit Java durch. Das sollte für all meine Projekte reichen und geht auch gut von der Hand.
Ist eigentlich mal anzusehen ob bei C und C++ dieser Header/Source Quatsch weg fällt? Wir haben 2017, da muss man sich sowas nun wirklich nicht mehr freiwillig antun.
-
Wolltest du diesem pösen, pösen Forum nicht fernbleiben?
-
Zee++ schrieb:
Ist eigentlich mal anzusehen ob bei C und C++ dieser Header/Source Quatsch weg fällt? Wir haben 2017, da muss man sich sowas nun wirklich nicht mehr freiwillig antun.
Zwingt dich ja keiner zu. Kannst doch alles in cpps schreiben...
-
Zee++ schrieb:
Ich habe mal eine wenig zu Kotlin recherchiert. Wirklich nett aber ich starte doch erst einmal mit Java durch. Das sollte für all meine Projekte reichen und geht auch gut von der Hand.
Mit Java 8 ist Java gar nicht mehr so schlecht und ich benutze sie heute ganz gerne. Gibt zwar noch ein paar Dinge die man vermisst und man mehr Code schreiben muss, aber ich finde, eine Sprache sollte irgendwann auch mal einen Schlußstrich ziehen können.
Zee++ schrieb:
Ist eigentlich mal anzusehen ob bei C und C++ dieser Header/Source Quatsch weg fällt? Wir haben 2017, da muss man sich sowas nun wirklich nicht mehr freiwillig antun.
Der Header-Quatsch ist so ziemlich das einzige wofür ich C++ hasse. Ansonsten finde ich C++ super, wenn man mich nicht zwingt jeden Template-Magic-Unsinn zu benutzen (für die die es mögen und können, soll es drin sein).
-
Schlangenmensch schrieb:
Zee++ schrieb:
Ist eigentlich mal anzusehen ob bei C und C++ dieser Header/Source Quatsch weg fällt? Wir haben 2017, da muss man sich sowas nun wirklich nicht mehr freiwillig antun.
Zwingt dich ja keiner zu. Kannst doch alles in cpps schreiben...
Nein, kann man eben nicht. Außer du willst ihn in die Pfanne hauen, das er eine riesige Datei hat. Was aber keine Lösung ist. Es geht um Lösungen, nicht um Unsinn.
-
Hi Artchi,
Artchi schrieb:
Der Header-Quatsch ist so ziemlich das einzige wofür ich C++ hasse.
Eindeutig schlechtes Sprachdesign.
Das ist in Delphi um Welten besser gelöst:
Da hat jede Datei einen "Headder-Teil" und einen "Programm-Teil"
interface stellt die Headder-Datei dar und implementation die eigentliche Programmdatei
Die uses-Angaben entsprechen den include-Anweisungen.
Alles im Interface-Teil ist nach außen sichtbar, der Rest nicht.
Dazu noch ein par andere syntaktische Schnerzchen.unit EineUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons; type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; Label1: TLabel; TBitBtn1: TBitBtn; private { Private-Deklarationen } public { Public-Deklarationen } function Irgendwas( Parameter : integer ) : String; end; var GrussForm: TGrussForm; implementation {$R *.dfm} uses NochNeUnit; function TForm1.Irgendwas( Wert : integer): String; var n : integer; begin case Wert of 1 : n := Label1.Caption := 'Müller'; 2 : n := Label1.Caption := 'Meier' end; end; end.
Der einzige Nachteil ist, dass an Stelle von {} begin und end geschrieben werden muss, und das Zuweisungen wie
a += b;
oder
a = (b < c ) ? c : b;
in Delphi nicht möglich sind. Gewöhnt man sich aber auch dran.Gruß Mümmel
-
Artchi schrieb:
Schlangenmensch schrieb:
Zee++ schrieb:
Ist eigentlich mal anzusehen ob bei C und C++ dieser Header/Source Quatsch weg fällt? Wir haben 2017, da muss man sich sowas nun wirklich nicht mehr freiwillig antun.
Zwingt dich ja keiner zu. Kannst doch alles in cpps schreiben...
Nein, kann man eben nicht. Außer du willst ihn in die Pfanne hauen, das er eine riesige Datei hat. Was aber keine Lösung ist. Es geht um Lösungen, nicht um Unsinn.
Das ist Reaktion auf Zee++s anderen Thread, wo er genau dieses Vorhaben beschrieb, und ziemlich pampig wurde, weil ihm nicht gefiel, dass ihm von diesem Vorhaben abgeraten wurde.
-
Wo wurde ich denn pampig. Da hast bloß nicht gerafft worum es mir da ging.
P.S. Lösche lieber meinen Account, oder weißt du auch nicht was ich damit meine?
-
muemmel schrieb:
Das ist in Delphi um Welten besser gelöst:
Da hat jede Datei einen "Headder-Teil" und einen "Programm-Teil"und was ist, wenn man an eine externe Library linken will, deren Quellcode nicht offen ist? In C/C++ reichen dem Compiler dazu die Header. Wie ist das in delphi?
-
zufallswert schrieb:
muemmel schrieb:
Das ist in Delphi um Welten besser gelöst:
Da hat jede Datei einen "Headder-Teil" und einen "Programm-Teil"und was ist, wenn man an eine externe Library linken will, deren Quellcode nicht offen ist? In C/C++ reichen dem Compiler dazu die Header. Wie ist das in delphi?
Du weisst schon dass die VCL in der Starter Edition ohne Quellcode geliefert wird? Es ist kein Problem...
So Ähnlich ... warum in D DI File existieren.
-
Artchi schrieb:
Das ist ja mal das blödeste Argument: OOP in einer Nicht-OO-Sprache durch zusätzliche Krücken betreiben. Nein, da kann ich ja auch sagen "Das tolle an C und ASM ist, das ich da auch mit Hilfsmitteln OOP machen kann."
Das ist ein sehr oberflächliches Urteil: Das Kernargument war nicht dass man OOP irgendwie dazufrickeln kann, sondern dass man es am Ende "gar nicht mehr merkt, dass die Sprache kein OOP direkt unterstützt". Mein Satz war zwar etwas holprig formuliert, aber die Information lässt sich durchaus noch herausdestillieren. Das C-Analogon dazu wäre dass man nach einem "#include <oop.h>" glaubt, in C++ weiter zu programmieren (zumindest was Objektorientierung angeht).
Artchi schrieb:
Eine Sprache soll MIR Arbeit abnehmen! Warum soll ich der Sprache Arbeit abnehmen? Wenn ich OOP machen will, nehme ich eine OO-Sprache. Davon gibt es reichlich zur Auswahl, z.B. AngelScript.
Und wenn Lua mir keine OO-Features anbietet, dann mache ich das damit auch nicht. Ich benutze Lua so, wie es gedacht wurde: für Scripte und Konfigurationen. Dafür ist Lua 1A geeignet.Ich sehe das nicht so eng: Ich empfinde die Abstraktionen, die OOP ermöglicht, auch in kleineren Skripten als sehr praktisch. Es reicht die Funktionalität einmal zu implementieren, und dann eine kleine Datei einzubinden, wenn man sie benötigt (include von einmal geschriebenen ~100 Zeilen). Sicher braucht man das nicht immer, und ich bin auch kein Freund davon, es mit der OOP allzu wild zu trieben, wie es beispielsweise Java tut. Ich implementiere in Lua allerdings die Logik diverser Objekte in einer 3D-Welt, und dort kommt mir das durchaus gelegen, da man damit von der Programmstruktur her elegant ein Interface and die "Weltobjekte" flanschen kann.
Artchi schrieb:
Finnegan schrieb:
Was ich an Lua nicht mag, ist dass Indizes mit 1 beginnen - bei den ganzen zusätzlichen "+1/-1" zur Korrektur bei Index-Berechnungen merkt man schon, dass bei 0 zu beginnen, die "natürlichere" Variante ist, besonders wenn man viel mit Indizes und "Ranges" hantiert.
Ehm, jeder nicht Informatiker oder C-lastige Programmierer fängt bei 1 an zu zählen. Sage einem Schüler "Zähl mal bitte bis 10!", und er wird nicht mit "0" anfangen. Selbst jeder Informatiker wird in der Freizeit bei 1 anfangen zu zählen.
Ich verstehe die Argumentation dahinter, mit 1 anzufangen, geschenkt. Meine persönliche Erfahrung damit ist allerdings, dass damit Indexberechnungen oft komplizierter wurden, so dass ich es letztendlich eher als Nachteil empfand. Das kann allerdings auch vornehmlich an dem liegen, was ich implementiert habe, vielleicht fällt es in anderdem Code weniger auf. Als typisches Beispiel sei hier die Adressierung von Elementen in einem eindimensionalen Array genannt, welches ich als zweidimensionale, x/y-adressierte Matrix interpretieren möchte:
So etwas wiei = ((y - 1) * width + (x - 1)) + 1
anstatti = y * width + x
ist mir halt oft genug untergekommen*, um meinen Mißmut über die Array-Adressierung auf das derzeitige Level zu steigern. Ich komme damit klar, aber "mögen" tue ich es deshalb nicht.*Nachtrag: Wenn ich mir das gerade nochmal so ansehe, fällt mir auf, dass ich die Berechnung nicht wirklich vereinfacht habe, das Beispiel ist also nicht so gut gewählt ... dennoch hatte ich immer den Eindruck, dass solche -1/+1-Korrekturen für den Index häufiger notwendig sind, als in vergleichbarem Code in Sprachen, wo Arrays bei 0 beginnen. Für mich sind dadurch einige Algorithmen oft ein wenig unübersichtlicher geworden, obwohl ich zugebe, dass das auch Gewöhnungssache sein kann. Und auch wenn es subjektiv sein mag: Das "nicht mögen" ist nicht unbegründet
Artchi schrieb:
Finnegan schrieb:
Auch dass alle numerischen Berechnungen mit
double
-Werten erfolgen stört mich, allerdings auch nur da ich die Sprache in einem System einsetze, wo ich viel mitint64
-Werten zu tun habe, deren Wertebereich auch voll ausgenutzt wird. Diese lassen sich in Lua in Gegensatz zuint32
, nur sehr umständlich korrekt mitdouble
-Werten abbilden.Verstehe ich nicht, wie das funktionieren soll? Da sollten doch irgendwann falsche Berechnungen bei dir auftauchen?
Man bildet den
int64
mit zweinumber
-Werten ab, und kümmert sich "manuell" um Übertrag bei Berechnungen (auch hier ist selbstgebaute OOP mit überladenen Operatoren hilfreich). Unterm Strich ist das de facto schon eine kleine BigInt-Implementierung, daher "umständlich". Ich denke dass sich 32-bit-integer-Operationen korrekt mitdouble
-Werten implementieren lassen ist dir bewusst (?).Artchi schrieb:
Warum kompilierst du das Lua nicht einfach mit dem passenden int64? Immerhin kann man das durch ein Makro bei Lua machen. Auf alten Systemen ohne FPU wird Lua meistens mit int32 kompiliert, weil Fließkomma da nur mit Emulation funktionieren würde und zu langsam wäre. Dann solltest du Lua auch an deine Bedürfnisse anpassen können...
Das wäre eine Möglichkeit, allerdings benötige ich auch Fließkommaberechnungen*, daher ist den
number
-Typen komplett durchint64
zu ersetzen keine gute Lösung. Da ich LuaJIT verwende, nutze ich derzeit den von dieser Implementation zur Verfügung gestellten 64-bit-Datentypen. Dennoch wäre es mir lieber wenn so etwas von der Sprache direkt unterstützt würde.* Das hägt in meinem Fall mit den absoluten Weltkoordinaten zusammen, die ich verwende. Das System unterstützt sehr große Welten, daher ist eine absolute Weltkoordinate ein (
int64
,float
)-Paar, da reine Fließkomma-Werte auf große Entfernungen eine zu hohe Ungenauigkeit hätten. Die meisten Berechnungen werden zwar in relativen Koordinaten und definitiv nicht mit Lua durchgeführt, dennoch ist es hilfreich, wenn sich solche Koordinaten ohne allzu viel Gepfriemel auch mit Lua handhaben lassen.
-
Zeus schrieb:
zufallswert schrieb:
muemmel schrieb:
Das ist in Delphi um Welten besser gelöst:
Da hat jede Datei einen "Headder-Teil" und einen "Programm-Teil"und was ist, wenn man an eine externe Library linken will, deren Quellcode nicht offen ist? In C/C++ reichen dem Compiler dazu die Header. Wie ist das in delphi?
Du weisst schon dass die VCL in der Starter Edition ohne Quellcode geliefert wird? Es ist kein Problem...
davon gehe ich mal aus, daß es kein Problem ist. Aber wenn muemmel erklärt, daß es ein Vorteil von delphi sei, daß der Header Teil des Implementationsfiles ist, wie geht das dann beim Anbinden von nicht-offenen Libraries? In C/C++ braucht man dazu nur den Header, nicht die Implementation.