Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

carli

unregistriert

1

17.11.2009, 18:55

Zitat von »"$nooc"«

ich bin eben bequem ^^

dann nimm Java.
C ist eine Sprache aus den frühen 70ern und beherrscht ja nichtmal das Konkatenieren von Strings......

Wenn's dir um Bequemlichkeit geht, nimm irgendwas aber kein C.
C++, Freepascal, Java, C# sind die gängigen Sprachen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

17.11.2009, 20:15

Zitat von »"carli"«


C ist eine Sprache aus den frühen 70ern und beherrscht ja nichtmal das Konkatenieren von Strings......

Wenn's dir um Bequemlichkeit geht, nimm irgendwas aber kein C.
C++, Freepascal, Java, C# sind die gängigen Sprachen.


In wie fern sollte in dem Fall C diesen Sprachen unterlegen sein? - Irgendwie müssen es auch die anderen Sprachen machen. Dass du es als Memberfunktion vielleicht gerade an die Hand gelegt bekommst ist der einzige Unterschied. Es gibt sogar eine Funktion dafür in C:
http://www.cplusplus.com/reference/clibrary/cstring/strcat/

Und du erweckst einen falschen Eindruck. Klar ist C schon recht alt, hat aber nichts eingebüst. Die Sprache und der Standard wird immer noch weiter entwickelt und ist im Moment sogar aktueller, als der von C++.

Ich sage jetzt nicht, dass man alles mit C machen soll. Wenn er ein bequemer Programmierer ist, dann ist Java, C# (C++ nicht wirklich. ;)) sicher die bessere Wahl, aber man sollte doch relativieren, warum und nicht mit einem solchen (offensichtlich irreführendem) Beispiel irgendwas zeigen wollen.

carli

unregistriert

3

17.11.2009, 20:32

Zitat von »"drakon"«

Und du erweckst einen falschen Eindruck. Klar ist C schon recht alt, hat aber nichts eingebüst.


- nicht objektorientiert
- kennt keine generischen Datentypen/keine Templates
- Plattformunabhängigkeit nur auf Konsolenebene (..."für den Rest gibts Libs/Frameworks"....lol, die nutzt doch eh keiner)
- veraltetes und schlechtes Include-Konzept
- trotz der Includes muss man Libs und Sources zusätzlich noch im Linker angeben
- Schlechte Prüfung von Datentypen
- keine automatische Speicherbereinigung (auch möglich in Form von parent-freeing-Relationen)

die 37 Jahre machen sich schon bemerkbar......


C ist in der Hinsicht angenehm, dass man sich im Gegensatz zu Assembler nicht mehr um den Aufbau des Stack-Frames kümmern muss ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

17.11.2009, 20:40

Dir isch schon klar, was wir hätten, wenn sie diese Features eingebaut hätten, oder? Genau C++. (zumindest fast).

Zitat

- Plattformunabhängigkeit nur auf Konsolenebene (..."für den Rest gibts Libs/Frameworks"....lol, die nutzt doch eh keiner)

Da wiederspreche ich dir. Klar könnte man auf diese Ebene programmieren, aber das schöne ist ja, dass es sehr viele Bibliotheken gibt, welche dir das noch weiter abstrahieren. Und dann auch Platformunabhängig. Man kommt es nicht gleich vor den Mund geliefert, aber präsent ist genau der gleiche Komfort, wie bei anderen Sprachen auch.

Es geht ja nicht darum, dass C all diese fancy features haben muss, welche die heutigen Sprachen haben. Sonst bräuchte man C ja gar nicht mehr. Sondern genau, wie du im letzten Satz antönst eine möglichst Maschinennahe Programmiersprache, welche genau das auch sein soll.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

17.11.2009, 21:06

Zitat

Delphi-Pascal ist maschinennaher - da weiß ich inzwischen durch jahrelange Erfahrung und Disassemblen, was genau für ein Code erzeugt werden wird und kann somit sogar handoptimierten ASM-Code ins Programm einschleusen - direkt in den Zusammenhang mit dem Rest-Code.

Und das geht in C nicht?
Im übrigen ist das nicht ganz das, was ich unter maschinennah verstehe. Wovon ich spreche ist, dass es keinen "magischen" Overhead hat, der von sonst wo kommt. Und man hat dadurch die Möglichkeit sehr viel mehr zu steuern.
Ich weiss jetzt nicht, wie das in Delphi ist, aber ist dort der generierte Code standardisiert? - Sprich, wenn jetzt ein Compiler Hersteller auf die Idee kommt etwas anderst zu lösen, als die anderen (dabei aber immer standardkonform ist) funktioniert dann dein handoptimierter Code immer noch?
-> Wenn nein (was ich ehrlich gesagt einmal annehme), dann ist das sicher nicht platformunabhängig.

Und ich wiederhole mich, wenn ich sage, dass nicht jede Sprache OO sein muss. Das ist nur ebenfalls eine Technik. Eine im Moment sehr populäre, aber wer sagt denn, dass es _die_ Technik ist?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

17.11.2009, 21:13

außerdem kann man in C sehr wohl oo programmieren, auch wenn die Sprache einem nicht unbedingt syntaktisch entgegenkommt...

carli

unregistriert

7

17.11.2009, 21:18

Zitat von »"drakon"«

Wovon ich spreche ist, dass es keinen "magischen" Overhead hat, der von sonst wo kommt.
Gibt es nicht - ich habs selbst disassemblet. C++ hingegen macht einen Riesen Overhead wenn ich z.B. eine Funktion aufrufe, schiebt er erstmal alle möglichen Register rum und ruft irgendwelche Funktionen auf (die ich niemals ganz durchtracen konnte) - dass nenne ich Overhead!

Zitat

Und man hat dadurch die Möglichkeit sehr viel mehr zu steuern.
Was zum Beispiel?

Zitat

Ich weiss jetzt nicht, wie das in Delphi ist, aber ist dort der generierte Code standardisiert? - Sprich, wenn jetzt ein Compiler Hersteller auf die Idee kommt etwas anderst zu lösen, als die anderen (dabei aber immer standardkonform ist) funktioniert dann dein handoptimierter Code immer noch?
Das ist so ne Frage.
Unter allen Delphi-Versionen (welche allesamt win32 sind) funktioniert der Handoptimierte Code immer noch - einfach weil die Parameterübergabe in den Registern standardisiert ist.

Zitat

-> Wenn nein (was ich ehrlich gesagt einmal annehme), dann ist das sicher nicht platformunabhängig.
hää? Mein Schicksal: Auf einem 64bit-Prozessor ging der 32bit Maschinencode nicht mehr. (bin auf Freepascal umgestiegen) - man kann sich eben aussuchen, ob man lieber ein prozessorabhängiges System programmieren will oder prozessorunabhängig bleibt. Ob es nun Linux oder Windows ist, ist dann egal.

Zitat

Und ich wiederhole mich, wenn ich sage, dass nicht jede Sprache OO sein muss. Das ist nur ebenfalls eine Technik. Eine im Moment sehr populäre, aber wer sagt denn, dass es _die_ Technik ist?

Einfach die Gegenfrage: Wird die Sprache besser, wenn sie kein OOP hat?
OOP ist nix andres, dass man mit Verbunddatentypen (genannt struct oder record) auch Methoden aufrufen kann. Es ist einfach eine andere Schreibweise. Was findest du besser?

Quellcode

1
procedure Render(obj: TObject; color:TColor);

oder

Quellcode

1
procedure TObject.Render(color: TColor);

oder anders gefragt: was ist intuitiver....

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

17.11.2009, 21:22

Zitat von »"carli"«

Gibt es nicht - ich habs selbst disassemblet. C++ hingegen macht einen Riesen Overhead wenn ich z.B. eine Funktion aufrufe, schiebt er erstmal alle möglichen Register rum und ruft irgendwelche Funktionen auf (die ich niemals ganz durchtracen konnte) - dass nenne ich Overhead!


Würd mich interessieren was für Code du da mit welchem Compiler getestet hast. Funktionsaufrufe sind in C wie in C++ normalerweise ziemlich lightweight.


Zitat von »"carli"«

OOP ist nix andres, dass man mit Verbunddatentypen (genannt struct oder record) auch Methoden aufrufen kann. Es ist einfach eine andere Schreibweise.


Ich denke du verwechselst da was. OOP ist ein Paradigma und hat überhaupt nichts mit irgendwelcher Syntax zu tun. Man kann auch in Assembler OOP betreiben.

carli

unregistriert

9

17.11.2009, 21:30

Zitat von »"dot"«

Zitat von »"carli"«

Gibt es nicht - ich habs selbst disassemblet. C++ hingegen macht einen Riesen Overhead wenn ich z.B. eine Funktion aufrufe, schiebt er erstmal alle möglichen Register rum und ruft irgendwelche Funktionen auf (die ich niemals ganz durchtracen konnte) - dass nenne ich Overhead!


Würd mich interessieren was für Code du da mit welchem Compiler getestet hast.

Querbeet - Arrayzugriffe, Strings, Floats, Integerarithmetik, OOP, Funktionsaufrufe; Alles mit dem Delphi4-Compiler (hat inzwischen 10 Jahre auf dem Buckel - hab aber schon mal in Delphi7 rumgedisassemblet - der macht das Auslagern in Variablen bei Schleifen noch besser ;) )

Zitat von »"dot"«

Funktionsaufrufe sind in C wie in C++ normalerweise ziemlich lightweight.
Nicht bei VisualStudio (bei anderen Sachen konnte ich mangels Lust, den GDB anzuschmeißen nicht nachprüfen)


Zitat von »"dot"«

Zitat von »"carli"«

OOP ist nix andres, dass man mit Verbunddatentypen (genannt struct oder record) auch Methoden aufrufen kann. Es ist einfach eine andere Schreibweise.


Ich denke du verwechselst da was...

Inwieweit?

Zitat

Zitat:
Und man hat dadurch die Möglichkeit sehr viel mehr zu steuern.

Was zum Beispiel?
/word

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

17.11.2009, 21:36

Zitat von »"carli"«


Zitat von »"dot"«

Funktionsaufrufe sind in C wie in C++ normalerweise ziemlich lightweight.
Nicht bei VisualStudio (bei anderen Sachen konnte ich mangels Lust, den GDB anzuschmeißen nicht nachprüfen)


Du hast aber schon optimierten Code geprüft, oder? Den generierten Code, den ich gesehen habe ist meist auch immer recht leicht gehalten.. (in optimiertem Zustand).

EDIT:
Das wegen dem Steuern. Wie du vorhin schon angesprochen hast das Linken. Ich weiss gerne, welche Abhängigkeiten in meinen Projekten vorliegen und welche was brauchen und wer nicht. Somit weiss ich auch immer recht genau, welche Dateien überhaupt eine Neukompilierung brauchen. Z.B programmiere ich im Moment in Eiffel und dort kann man grundsätzlich von überall auf jede Klasse im Projekt zugreifen, wie man möchte. Das heisst auch, dass ich keine Ahung habe, wie die Abhängigkeiten sind. Warum für etwas bezahlen, dass ich nicht brauche?

Werbeanzeige