Welche Sprache kann C++ Konkurrenz machen?
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Das mit den fixen Array-Größen finde ich allerdings krass, scheint aber gelöst zu sein.
Dies ist schon recht lange gelöst, wen ich mich nicht täusche, seit Delphi 32Bit wurde.
Und dies sogar sehr gut, ich wüsste in der Schnelle nicht, wie ich folgendes in C lösen sollte.
function gtk_clist_new_with_titles(columns: gint; titles: ppchar): PGtkWidget; cdecl; external gtklib;
const list_Titel: array of string = ('N', 'Name', 'Spalte3', 'Spalte4'); begin list_Titel[0] := list_Titel[0] + 'ummer'; Insert('vergessen', list_Titel, 2); clist := gtk_clist_new_with_titles(Length(list_Titel), PPChar(list_Titel));
Eine weitere Stilblüte finde ich z.B. auch den Zoo an sprintf Funktionen (bei der WinAPI). Wieviele sprintf Varianten gibt es?
Ja, da gibt es viele, aber die kann ich als Pascal Coder alle auch nutzen, ich muss nur die entrechende lib einbinden.
const lib_stdio='c'; function printf(str:PChar):cint;varargs cdecl;external lib_stdio; function fprintf(stream:cFILE; str:PChar):cint;varargs cdecl;external lib_stdio;
Für die meisten fällen reicht das gewöhnlich Writeln. Und da entfällt das mühsame hantieren mit %x.
Writeln('Raster: x: ', x, ' y: ', y);
Aus Kundensicht wäre Lazarus tatsächlich die beste Sprache für viele Anwendungsfälle, da man schnell zu Ergebnissen kommt. Persönlich will ich mich mit einem halbtoten Projekt allerdings nicht auseinandersetzen.
Definitiv, mit der LCL erzeuge ich innert kürzester Zeit eine Dialog-Maske, welche dann auch sehr einfach genutzt werden kann. Würde ich dies mit nativen GTKx machen, bräuchte ich viel länger. Und wie schon gesagt, man kann unter Linux entwickeln und lässt es über eine Cross-Compiler laufen und schon hat man eine Windows-App.
Und Tot ist es überhaupt nicht, das Project ist quick lebendig, fast täglich Neuerungen.
Und wen man sich mal an Lazarus gewöhnt hat, verteufelt man alle Editoren wie Codeblook und co.
Mit dem kommerziellen Delphi sieht es ein wenig anders aus, seit es nicht mehr Borland ist kann ich mich nicht mehr anfreunden.Was ein Manko von FPC ist, C++ - Libs kann man (noch) nicht anbinden. Aber da gibt es zum Glück sehr wenige, einzig bekanntes was mir gerade in den Sinn kommt ist QT.
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Das mit den fixen Array-Größen finde ich allerdings krass, scheint aber gelöst zu sein.
Jetzt wäre es interresant zu wissen, ob es sich auch wie
std::vector::push_back()
verhält, heißt ob neue Capacity gleich alte Capacity × 1.5 ist.
-
@Mathuas sagte in Welche Sprache kann C++ Konkurrenz machen?:
Ja, da gibt es viele, aber die kann ich als Pascal Coder alle auch nutzen, ich muss nur die entrechende lib einbinden.
Möchte man dies?
Es geht hier weniger um
fprintf
sondern um Funktionen wiesprintf_s
,snprintf_s
,sprintf
,StringCbPrintf
,... Ich glaube in der Summe gibt es 30-50 sprintf Varianten bei Visual Studio, aufgeteilt in ASCII, Unicode und TCHAR Varianten.Unter C++20 gibt es
std::format
und damit kann man sehr viele Fälle erschlagen. Vor C++20 nutzte ich eine selbst geschriebene Printf Variante basierend auf densprintf
Funktionen, wie z.B._vscprintf
.
-
@Quiche-Lorraine sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Das mit den fixen Array-Größen finde ich allerdings krass, scheint aber gelöst zu sein.
Jetzt wäre es interresant zu wissen, ob es sich auch wie
std::vector::push_back()
verhält, heißt ob neue Capacity gleich alte Capacity × 1.5 ist.Meinst du sowas ?
const ia: array of integer = (1, 2, 3); var i: Integer; begin Insert(4, ia, Length(ia)); for i := 0 to Length(ia) - 1 do begin WriteLn(ia[i]); end; end.
FPC kann die array verlängern, bis es keinen Platz mehr gibt, wen dies erreicht wird, bekommt die array einen neuen Speicherbereich und die alten Daten werden dann ins neue Array kopiert.
Nachtrag:
Habe gerade ein Experiment mit folgendem Code gemacht.const ia: array of integer = (1, 2, 3); var i: SizeInt; p: Pointer; begin Insert(4, ia, Length(ia)); p := @ia[0]; WriteLn(PtrUInt(p)); for i := 0 to 1000000000000 do begin Insert(i, ia, Length(ia)); if i mod 100000000 = 0 then begin Write('.'); end; if p <> @ia[0] then begin p := @ia[0]; WriteLn(PtrUInt(p)); end; end; end.
Ausgabe:
$ ./project1 140377880358992 .140377880326224 140377880293456 140377880031328 140377879703648 140377879048288 140377877737568 140377875116128 140377869873248 140377859387488 140377838415968 140377796472928 140377712586848 140377544814688 140377209270368 .140376538181728 ..140375196004448 ...140372511649888 .......140367142940768 .............140356405522528 ...........................140334930686048 ......................................................140291981013088 .......................................................Getötet
Am Ende, war mein Speicher inklusive Swap-Disk voll.
-
@Quiche-Lorraine meint den internen Vergrößerungsfaktor der Kapazität (>= Size), damit nicht bei jedem Einfügen jedesmal ein neues Array erzeugt werden muß.
Selbst bei C++ variiert dieser Faktor aber je nach Implementierung der Standard-Library (meist1.5
oder2
), der beste Wert ist aber wohl der Goldene Schnitt1.618...
(bzw.(1+sqrt(5))/2
), s.a. die Konversation vector growth factor of 1.5.@Mathuas: Die Frage ist also, wie dieser bei Pascal umgesetzt ist (denn das sieht man aus deinem Code nicht direkt - nur, daß sich der Zeigerwert verändert)?
Edit: Schreib den Code mal um, daß er (nur) bis z.B. 1000 einfügt und gib dann die Größe aus, wenn sich der Zeigerwert ändert. Dann sollte sich dieser Faktor ermitteln lassen.
-
@Th69 sagte in Welche Sprache kann C++ Konkurrenz machen?:
damit nicht bei jedem Einfügen jedesmal ein neues Array erzeugt werden muß.
Ich dachte, dies sieht man bei meinem Beispiele. Die Anzahl der ... verdoppelt sich in etwa, besonders ab einer Grösse von 64KByte.
Ich habe den Code ein wenig abgeändert, so das man es besser sieht.
$ ./project1 . 6 30 78 65506 147426 311266 638946 1294306 2605026 5226466 10469346 20955106 41926626 83869666 . 167755746 .. 335527906 ... 671072226 ....... 1342160866 ............. 2684338146 ........................... 5368692706
Änderung im Code:
// WriteLn(PtrUInt(p)); WriteLn(i:15);
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Mathuas Gibt es einen Grund, weshalb Pascal nie der Durchbruch gelungen ist? Kenne einige, die davon schwärmen.
Pascal hatte doch den Durchbruch und war in den 80ern und frühen 90ern auf DOS Mainstream.
-
@Tyrdal sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Mathuas Gibt es einen Grund, weshalb Pascal nie der Durchbruch gelungen ist? Kenne einige, die davon schwärmen.
Pascal hatte doch den Durchbruch und war in den 80ern und frühen 90ern auf DOS Mainstream.
Ich habe mich vll. ungenau ausgedrückt: Pascal hatte seine Höhen, aber hat sich letztendlich nicht durchgesetzt.
Ich muss aber sagen: Wäre ich Lehrer an einer Schule, dann würde ich Lazarus/FPC unterrichten: Einfach weil das ein guter Einstieg wäre, man schnell zu Ergebnissen kommt und ich dadurch mehr Schüler mitnehmen würde.
An einer Uni mit Informatik-Schwerpunkt, hat das aber meiner Ansicht nach nichts zu suchen. Einfach deshalb, weil diese Sprache in der Wirtschaft nicht relevant ist.
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Ich muss aber sagen: Wäre ich Lehrer an einer Schule, dann würde ich Lazarus/FPC unterrichten: Einfach weil das ein guter Einstieg wäre, man schnell zu Ergebnissen kommt und ich dadurch mehr Schüler mitnehmen würde.
An einer Uni mit Informatik-Schwerpunkt, hat das aber meiner Ansicht nach nichts zu suchen. Einfach deshalb, weil diese Sprache in der Wirtschaft nicht relevant ist.Genau dies ist der Punkt, wen Schulen anstelle von C Pascal nehmen würden, wäre Pascal viel verbreiteter.
Bei uns in der Bude, einer der mal studiert hat, hatte kürzlich Lazarus von mir gesehen, der war total begeistert, wie einfach coden sein kann. Und die mit einem ebenbürtigen Ergebnis zu C.FPC und GCC sind fast ebenbürtig, was aber viel schlimmer ist, Python, Java und co. Interpretersprachen, wie dazumal GW-BASIC. Solchen Mist würde ich niemals anfassen. Ausser Java bei Android, weil es da fast keine Alternative gibt.
-
Java ist nicht per se schlecht, nur weil es u. a. interpretiert ist ... Es ist das bessere C++ ... Aber du scheinst nicht studiert zu haben @Mathuas , folglich werde ich bestimmte Unwissenheiten und Nichtkenntnisse auch nicht vorverurteilen.
-
@cyborg_beta sagte in Welche Sprache kann C++ Konkurrenz machen?:
Java ist nicht per se schlecht, nur weil es u. a. interpretiert ist ... Es ist das bessere C++
Aua, das tut aber weh. Die Sprachen haben nicht ohne Grund unterschiedliche Anwendungsgebiete.
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Tyrdal sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
@Mathuas Gibt es einen Grund, weshalb Pascal nie der Durchbruch gelungen ist? Kenne einige, die davon schwärmen.
Pascal hatte doch den Durchbruch und war in den 80ern und frühen 90ern auf DOS Mainstream.
Ich habe mich vll. ungenau ausgedrückt: Pascal hatte seine Höhen, aber hat sich letztendlich nicht durchgesetzt.
Ich muss aber sagen: Wäre ich Lehrer an einer Schule, dann würde ich Lazarus/FPC unterrichten: Einfach weil das ein guter Einstieg wäre, man schnell zu Ergebnissen kommt und ich dadurch mehr Schüler mitnehmen würde.
An einer Uni mit Informatik-Schwerpunkt, hat das aber meiner Ansicht nach nichts zu suchen. Einfach deshalb, weil diese Sprache in der Wirtschaft nicht relevant ist.Und was ist so toll an Pascal? Ich fands immer zu verbose, Begin/end stattKlammern ist sehr unpraktisch und dann dass man Variablen in nem eigenem Block deklarieren musst war jetzt auch nicht so toll.
-
@Mathuas sagte in Welche Sprache kann C++ Konkurrenz machen?:
was aber viel schlimmer ist, Python
Python nutze ich für adminstrative Aufgaben. So habe ich z.B. ein Skript geschrieben welches mir einen Setup Ordner auf einem Server aktualisiert. Mit Batch ist dies kein Spaß. Und gewiss könnte man auch Powershell nutzen, aber ich habe immer die Lust daran verloren als ich an Sicherheitsmaßnahmen hängen geblieben bin.
Davon mal abgesehen ist Python die Programmiersprache für Quick & Dirty Aufgaben. Das Ökosystem ist riesig und zentral verwaltet, die Syntax leicht lesbar und viele Routineaufgaben sind intuitiv (z.B.
for Line in OpenedFile
). Ein Aufrufpip install nordic
und schon bekommt man Programmiertools für Nordic Chips installiert.Vor längerem musste ich z.B. mal Sensordaten glätten. Also Matplotlib installiert, Sensordaten eingelesen, geklättet und dargestellt. Ein Kollege wollte damit mal rumspielen, also gab ich ihm eine kurze Einweisung und gut war.
Quick & Dirty und trotzdem gut lesbar. So erlebe ich Python.
Nervige Macken wie z.B. bei VBA
MsgBox "Alles ok"
zuMsgBox("Alles ok)"
habe ich noch keine entdeckt.
BTW: Man darf natürlich nicht vergessen dass Python im Vergleich zu z.B. C++ sehr langsam ist.
-
@Tyrdal sagte in Welche Sprache kann C++ Konkurrenz machen?:
@cyborg_beta sagte in Welche Sprache kann C++ Konkurrenz machen?:
Java ist nicht per se schlecht, nur weil es u. a. interpretiert ist ... Es ist das bessere C++
Aua, das tut aber weh. Die Sprachen haben nicht ohne Grund unterschiedliche Anwendungsgebiete.
Die Anwendungsgebiete haben aber eine nicht leere Schnittmenge.
-
Guten Morgen @Mathuas,
in den Schulen wird nicht primär C gelehrt, sondern eher Scratch, Java oder Python (Rechercheergebnis). Außerdem ist ein Vergleich von C und Pascal so was wie ein Vergleich von Brot oder Braten.
Deiner Meinung bin ich, dass eine Priorisierung einer Programmiersprache in der Schule diese fördern würde.
-
@Tyrdal sagte in Welche Sprache kann C++ Konkurrenz machen?:
Und was ist so toll an Pascal? Ich fands immer zu verbose, Begin/end stattKlammern ist sehr unpraktisch und dann dass man Variablen in nem eigenem Block deklarieren musst war jetzt auch nicht so toll.
Das habe ich doch in deinem Zitat beantwortet. Es geht mir gar nicht um Syntax.
-
Ich persönlich würde als "Lernsprache" eine solche bevorzugen, welche Referenzen als eigenständiges Sprachelement hat und wo nicht fast alles irgendwie eine Referenz ist (oder auch alles ein konkreter Wert). Einfach, weil ich die Unterscheidung von direkten und indirekten Variablen als wichtig für das Verständnis grundlegender Datenstrukturen wie verkettete Listen, Bäume, allgemeine Graphen und viele andere halte.
Gleichzeitig sollte die Sprache nicht zu viele Fallstricke haben, wie manuelle Speicherverwaltung, Zeigerarithmetik und andere Sachen, mit denen man sich leicht in den Fuss schiessen kann. Auch das Ausschreiben von Struktur-Schlüsselwörtern (
begin
/end
) ist zumindest für Programmieranfänger erstmal vielleicht nicht so vekehrt.Insofern halte ich Pascal für eine gar nicht mal so schlechte Sprache für die Schule. Die wurde ja immerhin von Wirth auch als "Lehrsprache" entwickelt. Allerdings wurde Pascal bereits schon zu meiner Schulzeit in den 90ern eingesetzt, daher assoziiere ich die Sprache mittlerweile auch eher mit "altbacken" und "unsexy". Aber möglicherweise zu unrecht.
Ich bin jedenfalls nicht überzeugt, ob man z.B. mit Python ein ausreichendes Lowlevel-Verständnis erreichen kann, wie die Maschine letzendlich das abarbeitet, was man da programmiert. Das ist aber nur ein Bauchgefühl, da mein Lernpfad eher grob Pascal->Assembler*->C->C++ war (mit Abzweigungen in die meisten anderen gängigen Sprachen). Ich hab also keine Erfahrung, wie andere "Lern-Karrieren" heutzutage aussehen.
* (Turbo-) Pascal hatte zu DOS-Zeiten nen ziemlich netten Inline-Assembler, der Exkursionen in die Lowlevel-Programmierung sehr einfach gemacht hat. Das finde ich retrospektiv auch ein ziemlich gutes Feature für eine Lernsprache. Nennt mich altmodisch, aber ich finde dass jemand, der seinen Code (in jeder Sprache) auf wirklich allen Ebenen bis runter zum Silizium versteht, gute Voraussetzungen hat, ein guter Programmierer zu werden
-
@Mathuas sagte in Welche Sprache kann C++ Konkurrenz machen?:
Dies ist schon recht lange gelöst, wen ich mich nicht täusche, seit Delphi 32Bit wurde.
Zu diesem Zeitpunkt hatte Borland den Wettstreit mit C/C++ bereits verloren. Delphi war nur noch ein Nachklang der einstigen Bedeutung von TurboPascal.
Definitiv, mit der LCL erzeuge ich innert kürzester Zeit eine Dialog-Maske, welche dann auch sehr einfach genutzt werden kann. Würde ich dies mit nativen GTKx machen, bräuchte ich viel länger.
Wenn es nur um einfache Masken geht, nimmt man Glade und lädt das GUI über GtkBuilder vollkommen unabhängig von der jeweiligen Sprache. Das geht sehr viel schneller als das GUI über Programmcode zu generieren.
@Mathuas sagte in Welche Sprache kann C++ Konkurrenz machen?:
FPC und GCC sind fast ebenbürtig,
GCC ist eine Kollektion von Compilern für verschiedene Sprachen – zurzeit sind das: Ada, C, C++, D, Fortran, Go, Modula-II, Objective-C und Objective-C++. fpc ist nur ein Compiler für eine Sprache.
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Das mit den fixen Array-Größen finde ich allerdings krass, scheint aber gelöst zu sein.
Wenn man sich die Funktionsweise alter Computer mit CP/M, MS-DOS, Macintosh System 1 bis 5, AtariTOS und die Armada von BASIC 8Bit Homecomputer vergegenwärtigt, dann verwundert das nicht sonderlich. Es lief immer nur ein Programm, und das konnte nach belieben im Arbeitsspeicher herumfuhrwerken. Es wurden damals auch bestimmte Programmiertechniken (z.B. selbstmodifizierender Code) genutzt, die heute als bäh gelten.
@Tyrdal sagte in Welche Sprache kann C++ Konkurrenz machen?:
Und was ist so toll an Pascal? Ich fands immer zu verbose, Begin/end stattKlammern ist sehr unpraktisch und dann dass man Variablen in nem eigenem Block deklarieren musst war jetzt auch nicht so toll.
Die
BEGIN END
Blöcke sind eine Besonderheit von Pascal. Faktisch alle anderen Algol-artigen Programmiersprachen nutzen nur noch die Form:if () then Anweisungsblock; else if () then Anweisungsblock; else Anweisungsblock; end;
Lesbarkeit von Programmcode wird von vielen leider unterschätzt. Einige der Neuerungen an C++ seit C++2011 lassen daran zweifeln, dass man das versteht.
Was das Thema Variablen sind in einem Block zu definieren betrifft, das war damals bei C und C++ exakt gleich. Nur wurde das nicht so sauber getrennt wie bei den Algol-artigen Sprachen. Erst mit C++1998 und C1999 wurde das dann gelockert. Zuvor durftest Du froh sein, wenn Du einen ANSI C1989/ISO C1990 Compiler hattest, und Dich nicht mit der K&R Syntax herumschlagen musstest.
/* sinnlose Funktion nur um die Syntax von K&R C zu zeigen */ foo (c) char c; { /* man musste zuerst alle Variablen deklarieren, bevor man sie verwenden durfte */ int i; /* danach konnte man die Variablen initialisieren */ i = 0; if ('a' == c) i = c; else i = c + 1; return (i); }
-
@john-0 sagte in Welche Sprache kann C++ Konkurrenz machen?:
Wenn es nur um einfache Masken geht, nimmt man Glade und lädt das GUI über GtkBuilder vollkommen unabhängig von der jeweiligen Sprache. Das geht sehr viel schneller als das GUI über Programmcode zu generieren.
Glade ist aber tot.
-
@Steffo sagte in Welche Sprache kann C++ Konkurrenz machen?:
Glade ist aber tot.
Danke für den Link, denn da wird auch gleich auf den Nachfolger von Glade verwiesen Cambalache. Wesentlich ist, dass es auch weiterhin die Möglichkeit gibt über GtkBuilder UIs aus Dateien zu laden – so sollte das sein. UIs von Hand zusammen zu bauen ist so 1980er, das muss nicht sein.