"We are back" « oc.at

C, C++,c#

lama007 02.03.2006 - 16:05 4266 38
Posts

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von M.I.P.S.
Von C++ würde ich abraten, da es hauptsächlich die Nachteile von C und C# vereint

C++ ist bei weitem die mächtigste dieser 3 Sprachen, wie kommst du auf "Nachteile"? Außer dass es irrsinnig kompliziert werden kann, aber so ist das halt mit mächtigen Werkzeugen.

lama007

OC Addicted
Avatar
Registered: Mar 2002
Location: Austria
Posts: 851
thx!

der Miniprogrammierkurs in den aktuellen ct's hat mich veranlasst ein C-Programmierbuch auszuleihen. Nun bin ich nach einer Weile draufgekommen, dass C und C# nicht das gleiche ist; darum meine Frage.
Sofern mich nicht die Lust verlässt, werde ich bei C bleiben. Wenn ich es richtig verstanden haben, ist C in gewisser Weise die Grundlage dieser Programmiersprachen und die Grundlage von Linux, weil der Linuxkernel und Treiber in C geschrieben sind.

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5020
naja, C++ auf objektorientiertheit only zu reduzieren ist schon beinahe verboten.

modernes C++ (in bestimmten bereichen wie scientific computing zB) geht immer mehr weg von objektorientiertheit, weil einfach ersten performance darunter leider oder die objektkopplung zu eng für einige dinge sind.

btw ist objektorientiertheit ein design philosophie, nicht nur ein feature einer sprache. objektorientierte software für C gibt es genug, zB gtk.

wenn du schon dabei bist was anständiges zu lernen: versuchs doch einfach mal mit D (das was C++ hätte werden sollen :D))

und btw: C ist der grund warum C++ manchmal grauenerregend sein muß.

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Zitat von SYSMATRIX
Zitat von GNU
Wallfahrten
Geben die Lebensfreude
Stärke
Jep, aber setzt man in wissenschaftlichen bzw. high-performance Applikationen nicht sowieso Fortran ein?

Zitat
btw ist objektorientiertheit ein design philosophie, nicht nur ein feature einer sprache. objektorientierte software für C gibt es genug, zB gtk.
Dem muss ich widersprechen. Ohne dem Support der Sprache gibt es keine Objektorientierung. C ist aber auf keinen Fall eine OO-Sprache und deshalb ist das absurde GTK auch nicht OO.

@joken9seven: Ein C++ GC ist pervers :)

Und C# ist mit Mono genauso plattformunabhängig (sobald die mal die Windows Forms nachprogrammiert haben :D), ich weiß nicht, was ihr dagegen habt.

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5020
Zitat von gue
Jep, aber setzt man in wissenschaftlichen bzw. high-performance Applikationen nicht sowieso Fortran ein?
nein, heavy template basierende sachen sind genau so schnell. (boost, glitz und dergleichen wirst als informatiker eh kennen, nehm ich mal an) das einzige daß unter C++ irgendwie suckt ist die I/O performance. die streams sind im vergleich zu einem plain fscanf ~ 2x langsamer. (eh klar warum)


Zitat von gue
Dem muss ich widersprechen. Ohne dem Support der Sprache gibt es keine Objektorientierung. C ist aber auf keinen Fall eine OO-Sprache und deshalb ist das absurde GTK auch nicht OO.
Ich hab auch nie behauptet daß C eine OO sprache ist, aber dennoch ist objektorientiertheit eine design philosophie, und etwas in C geschriebenes kann sehr wohl OO sein. natürlich find ich gtk auch absurd, bzw teilweise grauslich (bin Qt fanboy).

klar kannst direkt keine operatoren überladen, oder etwas direkt vererben, auch ists zaacher polymorphie zu implementieren, aber von der technischen umständlichkeit abgesehen ist es absolut möglich, wer was anderes behauptet hat nicht verstanden worum es bei OO geht.

Zitat
Although GTK+ is written in C, a language without explicit support for object-oriented program, the design of GTK+ is heavily object oriented. The basis of this is a layer known as the GTK+ Object System. In addition to such traditional features as inheritance, polymorphism and reference counting, the GTK+ Object System also adds a number of features particularly adapted for a widget toolkit, including a signal system for notification and an object attribute system.

Inheritance in the GTK+ Object System is achieved by nesting structures within each other. For instance, the GtkButton class inherits from GtkWidget, so the first part of a GtkButton structure is a GtkWidget structure. This means that a pointer to a GtkButton can be cast into a pointer to a GtkWidget. Each class also has an associated class structure, which is essentially a table of pointers to the class's implementation of functions that it overrides from the parent class. (For example, the GtkWidgetClass structure includes a pointer to a draw() function; GtkButtonClass provides an implementation that draws buttons.)

Each GTK+ object class can have an associated set of signals. Each signal represents a certain type of event or other occurence that an application would want to attach a callback to. For instance, the GtkButton class provides the "clicked" signal that is emitted when the user clicks the button widget. Any number of callbacks can be connected to a signal and when the signal is emitted all callback will be called in order. Signals can also be used to change the behavior of widgets - for instance, by connecting to the "insert_text" signal for a GtkEntry widget, an application can filter the text that the user enters into the Entry to allow only numbers.

Each class also has an associated set of arguments; each argument represents some characteristic of the widget that can be queried or set. For instance, the GtkLabel widget provides a "label" argument to allow setting the text of the label and a "justify" argument to allow setting the justification of the label. The powerful feature of the argument system is that the set of arguments for a class can be dynamically queried at run time. This allows a graphical builder application to provide interfaces for setting the arguments of widgets it didn't know about in advance.

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12696
Zitat von gue
Und C# ist mit Mono genauso plattformunabhängig (sobald die mal die Windows Forms nachprogrammiert haben :D), ich weiß nicht, was ihr dagegen habt.

ersetze 'sobald' durch das wörtchen 'wenn' und dann denk dir das kleine sprüchlein "wenn das wörtchen..."

die idee hinter .net ist gut (bzw. man könnte auch sagen von java geklaut), die ausführung mangelhaft.

Viper780

Elder
Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 50425
also ich habe eigentlich mit Fortran zu programmeiren angefangen und es macht seither spass, schaue mir gerade etwas C# und Java an.

werde aber eher auf der fortran schiene beliben da es in meinem Bereich starke vorteil hat (Polymer simulationen)
alleien weil bisher alles darauf geschreiben wurde.

werde mir abe rmal das High performance fortran genauer ansehen.

(hat da wer infos?)

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Zitat von SYSMATRIX
nein, heavy template basierende sachen sind genau so schnell. (boost, glitz und dergleichen wirst als informatiker eh kennen, nehm ich mal an) das einzige daß unter C++ irgendwie suckt ist die I/O performance. die streams sind im vergleich zu einem plain fscanf ~ 2x langsamer. (eh klar warum)
Ich meinte wirkliche High-Performance Software, also in parallelen Systemen, ohne User-Interaktion und so. Habe mal eine Studie von einem Prof. der ETHZ gesehen, wonach eine in Fortran ausprogrammierte Matrixmultiplikation 10 mal schneller war als sein Gegenstück in C (gleicher Algorithmus und ijk Anordnung). Scheinbar können die Compiler Fortran Code einfach viel besser optimieren. Ich muss schauen, ob ich die Slides irgendwo finde.

Also diese "Objektorientierung" beim GTK hab ich nicht gekannt (hab ja auch noch nie was damit gemacht :p), weißt du auch wie sie dynamische Bindung realisieren?

@Master99: Die Intention hinter C# ist ganz anders als bei Java: Nicht eine Sprache für alle Plattformen sondern alle Sprachen für eine Plattform ;)
Und Microsoft hat die .NET Bibliothek durchaus gut umgesetzt. Dass Mono noch ein bisschen hinterherhinkt ist nicht die Schuld von Microsoft und ganz bestimmt nicht die einer Programmiersprache.

@Viper780: http://mpi-forum.org ;)

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
ja, weil fortran matrix operationen im compiler eingebaut hat :)

warten wir auf den neuen c++ standard, wenn teile der boost library übernommen werden.

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12696
Zitat von gue
@Master99: Die Intention hinter C# ist ganz anders als bei Java: Nicht eine Sprache für alle Plattformen sondern alle Sprachen für eine Plattform ;)
Und Microsoft hat die .NET Bibliothek durchaus gut umgesetzt. Dass Mono noch ein bisschen hinterherhinkt ist nicht die Schuld von Microsoft und ganz bestimmt nicht die einer Programmiersprache.

ja stimmt, das kommt bei .net natürlch auch noch dazu (wobei ein "alter" vb'ler ordentlich umlernen muss wenn er auf .net umsteigt... da frag ich mich ob es nicht gleich gscheiter is dass er c# lernt).

ABER das mono hinterhinkt... daran ist schon zu einem großen teil microsoft schuld. die haben ja nicht alles von .net freigelegt [win-forms]... von dem her find ich die gelobpreiste "unabhängigkeit von programmiersprache UND plattform" eben eher als schlechter scherz. (wirtschaftlich gesehen is der schritt natürlich verständlich... sonst könnte man ja leicht ein programm für win UND linux usw. schreiben)
Bearbeitet von Master99 am 16.03.2006, 11:45

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5020
Zitat von mat
ja, weil fortran matrix operationen im compiler eingebaut hat :)

warten wir auf den neuen c++ standard, wenn teile der boost library übernommen werden.

das problem is: man sollte nicht matrix operationen als benchmark verwenden, bei denen kann derart getrickst werden und das is is dann nicht mehr ohne. natürlich hat fortran sehr geil optimierte libs, auch is der sprachsupport für die "felder" sehr nett ausgefallen.

mit SSE intrinsics und dergleichen kommst auch auf schwindelerrgende performance :)

sowas wie matrix invertieren ist eher einen benchmark wert.


ich hab an der uni benchmarks gesehen wo fortran code in etwa so schnell war die *guter* c/c++ code.

boost = major 0wnage. ich verwendes inzwischen überall, sogar wenn wenn ich nur den lexical cast brauch ;)

der neue C++ standard wird soo derart geil werden. mah. schon gelesn was stroustrup sagt? der is schon selbst ziemlich angegeilt davon!

Zitat von gue
Also diese "Objektorientierung" beim GTK hab ich nicht gekannt (hab ja auch noch nie was damit gemacht :p), weißt du auch wie sie dynamische Bindung realisieren?

nein, weiß ich leidern icht. ich war nur verwundert und hab dann nachgeforscht weil ich in dateien der .c endung dinge gesehen hab die class heißen :D

ansonst find ichs natürlich abartig, ja.

anyway der punkt is daß objektorientierung eine designphilosophie is, und nicht von der sprache abhängt.

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Hab noch nicht geschaut, was in den neuen C++ Standard reinkommt, ich versteh ja nicht mal den alten :)

Hab jetzt interessehalber nachgeforscht wie das GTK+ Team das mit dynamischer Bindung und so realisiert. ABARTIG. Anstatt eine OO-Sprache zu verwenden, programmieren sie ALLE OO-Konzepte selbst nach, FÜR JEDE "KLASSE" einzeln! Also man muss schon sehr in C vernarrt sein, um sich den Aufwand anzutun und die Arbeit des Compilers übernimmt.

Z.B. so was:
Code:
struct _GtkDialogClass
{
  GtkWindowClass parent_class;

  void (* response) (GtkDialog *dialog, gint response_id);

  /* Keybinding signals */

  void (* close)    (GtkDialog *dialog);

  /* Padding for future expansion */
  void (*_gtk_reserved1) (void);
  void (*_gtk_reserved2) (void);
  void (*_gtk_reserved3) (void);
  void (*_gtk_reserved4) (void);
};

Die 4 reservierten Pointer gefallen mir ja besonders gut :D
Also das ist jetzt so eine GtkDialog-Klassenbeschreibung. In einer Unterklassenbeschreibung wird in der Klassenbeschreibungs-init-Funktion z.B. der close Pointer auf die eigene close Methode umgebogen.

Ja... :rolleyes: warum einfach wenns auch kompliziert geht :bash:

Also darüber, ob OO eine Eigenschaft einer Programmiersprache ist oder nicht, ließe sich bestimmt lange diskutieren aber das sollten Leute machen, die sich damit besser auskennen als ich :)

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von gue
Also man muss schon sehr in C vernarrt sein, um sich den Aufwand anzutun und die Arbeit des Compilers übernimmt.

Einen Vorteil hat es: Man hat nicht mit (fast) jeder neuen GCC-Version inkompatible Binaries, weil sich das C++-ABI wieder mal geändert hat.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
egal warum sie es machen => function pointer sind der anfang vom ende :)

Viper780

Elder
Er ist tot, Jim!
Avatar
Registered: Mar 2001
Location: Wien
Posts: 50425
Zitat von mat
ja, weil fortran matrix operationen im compiler eingebaut hat :)

warten wir auf den neuen c++ standard, wenn teile der boost library übernommen werden.

unteranderem, vorallem im wissenschaftlichen rechnen habens super routinen mit den BLAS und Linpack (lineare algebra)
vorallem kann Fortran nativ mit Komplexen zahlen umgehen
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz