PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmiersprachen, Besonderheiten


Chemic
2004-04-15, 12:06:19
Hallo,
will demnächst ne neue Programmiersprache lernen. Ich kann schon das wahnsinnig umfangreiche Basic, und hab auch Visual Basic gelernt(jaja, ich weiß, aber es war einfach).
Nun würde ich gerne eine Sprache lernen die Umfangreicher ist. Also kommt da nur C in Frage.
Jetzt aber die Frage, C, C++ oder C# ?
Wo liegen die Unterschiede der verschiedenen C Varianten, und gibt es noch weitere?
C soll ja sehr Hardwarenah sein, aber auch am kompliziertesten.
Und C# soll einfach, dafür aber von Microsoft und deswegen nicht weit verbreitet sein.
Also, wo liegen die Vor-, Nachteile und die Besonderheiten der Sprachen?
Danke schonmal.

no Klickibunti
2004-04-15, 12:49:26
Mein Tipp: OCaml und Lisp

Gnafoo
2004-04-15, 14:35:48
C++ ist sehr ähnlich zu C. Der größte Unterschied dabei ist, dass man mit C++ im Gegensatz zu C objektorientiert programmieren kann.

Ansonsten sind die Befehle nahezu gleich, d.h. ein C++ Compiler kann auch C Sourcecode compilieren. Außer dem objektorientieren gibt es noch einige kleine Unterschiede (z.b. können bei C Variablen nur am Anfang von Funktionen definiert werden, bei C++ ist das egal...).
Zusätzlich kann C++ auch Exceptions und einige andere weitere Features. Du kannst C++ als eine Art Erweiterung von C ansehen.

C# kenn ich selbst nicht, es soll aber soweit ich weiß noch etwas mehr in Richtung objektorientiert gehen.

cu DerTod

Gast
2004-04-15, 15:03:10
Original geschrieben von Der Tod
C++ ist sehr ähnlich zu C. Der größte Unterschied dabei ist, dass man mit C++ im Gegensatz zu C objektorientiert programmieren kann.
Nicht sehr ähnlich. Nicht nur OO, sondern z.B. auch generisch, etwas funktional.
http://forum.c-plusplus.de/viewtopic.php?t=71066

Original geschrieben von Der Tod Ansonsten sind die Befehle nahezu gleich, d.h. ein C++ Compiler kann auch C Sourcecode compilieren. Außer dem objektorientieren gibt es noch einige kleine Unterschiede (z.b. können bei C Variablen nur am Anfang von Funktionen definiert werden, bei C++ ist das egal...).
Nein.
Original geschrieben von Der Tod
Zusätzlich kann C++ auch Exceptions und einige andere weitere Features.

Templates!

C# ist ein abgespecktes C++, das aber eine recht große Bibliothek mit sich bringt.

Brillus
2004-04-15, 16:25:23
@Gast weshalb nein ich würde keinen Fehler darin finden.

Gast
2004-04-15, 16:58:05
Original geschrieben von Brillus
@Gast weshalb nein ich würde keinen Fehler darin finden. "(z.b. können bei C Variablen nur am Anfang von Funktionen definiert werden, bei C++ ist das egal...)." ist sicher falsch, das andere ist Ansichtssache, aber Exceptions, Klassen, Templates, Namespaces, ... sind keine "kleinen Unterschiede"

Gnafoo
2004-04-15, 17:15:50
Original geschrieben von Gast
"(z.b. können bei C Variablen nur am Anfang von Funktionen definiert werden, bei C++ ist das egal...)." ist sicher falsch, das andere ist Ansichtssache, aber Exceptions, Klassen, Templates, Namespaces, ... sind keine "kleinen Unterschiede"

Hm Ok das mit den Variablen kann stimmen..
Ich war der Meinung es wäre so gewesen, habe mich dann aber wahrscheinlich geirrt (ich habe mit C alleine nie wirklich programmiert).

Wegen den Templates und Namespaces etc hab ich ja geschrieben: "Zusätzlich kann C++ auch Exceptions und einige andere weitere Features." .. natürlich sind das keine kleinen Unterschiede, aber darauf hatte ich das eigentlich auch nicht bezogen, sondern auf verschiedene Kleinigkeiten bei der Syntax (Definition von structs, das mit den Variablen (was ja scheinbar doch nicht stimmt)...)

Das ich gemeint hatte C++ und C seien sich ähnlich war primär darauf bezogen, dass die Syntax nahezu unverändert ist und C++ mit seinen zusätzlichen Features auf C aufsetzt und nicht eine ganz neue Syntax etc. bietet.

Ich habs mir vor dem Posten nicht nochmal richtig durchgelesen .. war wohl etwas missverständlich.

cu DerTod

Gast
2004-04-15, 18:24:16
achso

Brillus
2004-04-15, 20:48:03
Variblen müssen im Standart C am anfang des Bereichs stehen in denen sie gelten d.h Vor Befehlen egal ob in Prozeduren oder in Schleifen oder if sektionen.

Wenn es Compilier gibt denen es egal ist heißt das nicht das es C anders ist.

Trap
2004-04-16, 11:16:02
Seit C99 kann man überall Variablen deklarieren. C99 hat auch einige mehr Änderungen gegenüber dem vorherigen C-Standard.

/me
2004-04-17, 18:19:57
Ich würde dir C++ empfehlen. Am Anfang werden die Programme sowieso mehr oder weniger C sein (bis auf die Ein/Ausgabe), da OOP am Anfang recht verwirrend sein kann.

marco42
2004-04-17, 18:59:27
Hmm, Java gehoert auch hier rein. C ist eigentlich nicht viel mehr als portabler Assembler. Zumindestens war es das Ziel der Entwicklung, als es damals fuer Unix entwickelt wurde.

C++ ist eigentlich eien komplett andere Sprache, die aber eine C artige Syntax hat und auch weitgehen kompatibel ist, in dem Sinne, dass du C Code einbinden kannst.

Java ist ein abgespecktes C++, welche nur OO kann(oder taeusche ich mich da?) und auf einer Virtual Maschine laeuft.

C# ist Java like von MS.

Ich wuerde ja Python oder Smalltalk empfehlen.

Chemic
2004-04-17, 20:13:19
Will halt ne C-Sprache lernen weil sie weit verbreitet und umfangreich ist.

Und da ich mich auch für linux interessier werde ich wohl mit C anfangen und später C++ lernen.

Stone2001
2004-04-17, 20:34:26
Original geschrieben von marco42
Hmm, Java gehoert auch hier rein. C ist eigentlich nicht viel mehr als portabler Assembler. Zumindestens war es das Ziel der Entwicklung, als es damals fuer Unix entwickelt wurde.
Nope, das Ziel von C war es, eine Hochsprache zu entwickeln, die die Mächtigkeit von Assembler hatte und geeignet war, um damit ein Betriebssystem zu entwickeln. Gleichzeitig wurde aber auch wert drauf gelegt, das die Compilerbauer keine großen Probleme damit hatten, dafür Compiler zu entwickeln. C war nicht dazu gedacht, um Anwendungen zu entwickeln, auch sollte sie den Programmieren ihre Arbeit nicht wesentlich erleichtern, sonder eher die Arbeit der Compilerbauer.
Kleiner geschichtlicher Hintergrund:
Ursprünglich wurde Unix in Assembler geschrieben. Da aber Wartung und Fehlersuch in Assembler ein schwieriges Unterfangen war, suche man eine Hochsprache in der man Unix schreiben konnte. Die Wahl fiel auf BCPL. Diese Sprache wurde auf B reduziert. Tja, leider war B kein großer Erfolg, da an die Beschränkung der damaligen Hardware gebunden (ich an den PDP-7 Rechner). Als dann Unix auf den Nachfolger portiert werden sollte, mußte man Unix neu, von Grund auf mit Assembler, programmieren. B wurde auch portiert, allerdings wesentlich verbessert, C war geboren (B war z.b. eine Interpretierte Sprache). Nun wurde unix nochmals in C geschrieben.
Original geschrieben von marco42
C++ ist eigentlich eien komplett andere Sprache, die aber eine C artige Syntax hat und auch weitgehen kompatibel ist, in dem Sinne, dass du C Code einbinden kannst.

Diese Worte könnten von Bjarne Stroustrup stammen. ;)
Original geschrieben von marco42
Java ist ein abgespecktes C++, welche nur OO kann(oder taeusche ich mich da?) und auf einer Virtual Maschine laeuft.

Java kennt nur OO, da hast du recht, aber abgespeckt ist sie bei Leibe nicht.
Java stammt zwar von C++ ab, hat aber, bis auf die Syntax, recht wenig mit C++ gemeinsam. Man muß sich nurmal vor Augen halten, für was die einzelnen Sprachen entwickelt wurden. C um Betriebssyteme zu schreiben und Java für Web-basierte Applikationen.

marco42
2004-04-18, 02:28:54
Original geschrieben von Stone2001
Nope, das Ziel von C war es, eine Hochsprache zu entwickeln, die die Mächtigkeit von Assembler hatte und geeignet war, um damit ein Betriebssystem zu entwickeln. Gleichzeitig wurde aber auch wert drauf gelegt, das die Compilerbauer keine großen Probleme damit hatten, dafür Compiler zu entwickeln. C war nicht dazu gedacht, um Anwendungen zu entwickeln, auch sollte sie den Programmieren ihre Arbeit nicht wesentlich erleichtern, sonder eher die Arbeit der Compilerbauer.
Kleiner geschichtlicher Hintergrund:
Ursprünglich wurde Unix in Assembler geschrieben. Da aber Wartung und Fehlersuch in Assembler ein schwieriges Unterfangen war, suche man eine Hochsprache in der man Unix schreiben konnte. Die Wahl fiel auf BCPL. Diese Sprache wurde auf B reduziert. Tja, leider war B kein großer Erfolg, da an die Beschränkung der damaligen Hardware gebunden (ich an den PDP-7 Rechner). Als dann Unix auf den Nachfolger portiert werden sollte, mußte man Unix neu, von Grund auf mit Assembler, programmieren. B wurde auch portiert, allerdings wesentlich verbessert, C war geboren (B war z.b. eine Interpretierte Sprache). Nun wurde unix nochmals in C geschrieben.


Hmm, habe ich das anderes gesagt, wenn ja, dann meinte ich das schon. Das B interpretiert war, ist mir neu. Man lernt nie aus.


Diese Worte könnten von Bjarne Stroustrup stammen. ;)


Stammen sie wohl auch. :-)


Java kennt nur OO, da hast du recht, aber abgespeckt ist sie bei Leibe nicht.
Java stammt zwar von C++ ab, hat aber, bis auf die Syntax, recht wenig mit C++ gemeinsam. Man muß sich nurmal vor Augen halten, für was die einzelnen Sprachen entwickelt wurden. C um Betriebssyteme zu schreiben und Java für Web-basierte Applikationen.

Java wurde AFAIK fuer kleine Kisten, die TV um Interaktivitaet erweitern sollten entwickelt. Von Web Applicationen war damals nie die Rede. Dann wurde es in Webbrowser eingebaut und landete dann erst auf den Servern.

IMHO sind dafuer andere Sprachen auch besser geeignet.

Java ist zB eine statisch getypte Sprache und das schraenkt mich zu sehr ein ohne wirklich den Vorteil zu bringen. Besitzt es eigentlich Metaklassen?

Fuer mich sieht Java immer noch so aus, als wenn man C++ abgespeckt hat, ein bisschen mit Smalltalk vermengte und dann langsam verbesserte. Der grosse innovative Wurf ist es IMHO genauso wenig wie C#.

Ich persoenlich ziehe Sprachen wir Python und Smalltalk vor. Wenn es auf geschwindigkeit ankommt, dann halt C/C++. Meisten also Python + ein bisschen C(++). Lisp/Scheme/Haskell und Prolog gibt es ja auch noch als Vertreter anderer Konzepte. IMHO sind sich Java und C++ gar nicht mal so unaehnlich.

Stone2001
2004-04-18, 11:49:42
Original geschrieben von marco42
Java wurde AFAIK fuer kleine Kisten, die TV um Interaktivitaet erweitern sollten entwickelt. Von Web Applicationen war damals nie die Rede. Dann wurde es in Webbrowser eingebaut und landete dann erst auf den Servern.

IMHO sind dafuer andere Sprachen auch besser geeignet.

Kommt darauf an, wo der Vorgänger von Java aufhört und Java anfängt. Java (ich weiß nicht genau ob die zu diesem Zeitpunkt schon so heiß,mir schwirt da der Name Oak im Kopr rum) wurde, wie du schon erwähnt hast, entwickelt um eingebettete Systeme in Haushaltsgeräten zu steuern. Irgendwie hat sich die Sprache damals aber nicht durchsetzen können.
Zum Glück war gerade zu diesem Zeitpunkt der Moasic-Browser aufgetaucht, der erste graphische Browser und man war auf der Suche nach einer Programmiersprache, dessen Programme portabel waren und sich ohne große Probleme auf einem Rechner installieren lassen. Java war geboren.
Während das JDK 1.0 noch drauf ausgelegt war Appelts zu schreiben, kann man das aber von den Nachfolgern nicht mehr behaupten.
Original geschrieben von marco42
Java ist zB eine statisch getypte Sprache und das schraenkt mich zu sehr ein ohne wirklich den Vorteil zu bringen. Besitzt es eigentlich Metaklassen?

Was verstehst du unter Metaklassen?
Original geschrieben von marco42
Fuer mich sieht Java immer noch so aus, als wenn man C++ abgespeckt hat, ein bisschen mit Smalltalk vermengte und dann langsam verbesserte. Der grosse innovative Wurf ist es IMHO genauso wenig wie C#.

Ich persoenlich ziehe Sprachen wir Python und Smalltalk vor. Wenn es auf geschwindigkeit ankommt, dann halt C/C++. Meisten also Python + ein bisschen C(++). Lisp/Scheme/Haskell und Prolog gibt es ja auch noch als Vertreter anderer Konzepte. IMHO sind sich Java und C++ gar nicht mal so unaehnlich.
Java ist nicht C++ und C++ ist nicht Java! Klar war die Basis von Java C++ und abgespekt hat man noch nur die gefährlichen Teile von C++ (Pointer, Speicherverwaltung,...)
Ob jetzt Java innovativ oder nicht ist, darüber läßt sich streiten. Was sich aber nicht bestreiten läßt ist, das Java inzwischen eine recht gute und sehr mächtige Sprache geworden ist.

BTW: ein kleines Quiz: Welches ist die Programmiersprache die die meisten LOC im Umlauf hat?

marco42
2004-04-18, 14:15:52
Original geschrieben von Stone2001
Was verstehst du unter Metaklassen?


Metaklassen stehen zu Klassen, wie Klassen zu Instanzen. Macht sich ganz gut bei der aspektorientierten Progammierung. C++ hat zB eine Metaklasse hart eingebaut. Ich habe das erstmal bei Smalltalk gesehen, und denke daher, dass sowas auch unter Java existiert.

Metaklassen in Python (http://www-106.ibm.com/developerworks/linux/library/l-pymeta.html)

Stone2001
2004-04-18, 15:10:19
Original geschrieben von marco42

Metaklassen stehen zu Klassen, wie Klassen zu Instanzen. Macht sich ganz gut bei der aspektorientierten Progammierung. C++ hat zB eine Metaklasse hart eingebaut. Ich habe das erstmal bei Smalltalk gesehen, und denke daher, dass sowas auch unter Java existiert.

Metaklassen in Python (http://www-106.ibm.com/developerworks/linux/library/l-pymeta.html)
Nur mal kurz zum Verständnis, damit ich das recht verstehe!
Metaklassen sind Superklassen von normalen Klassen,oder?

Magnum
2004-04-18, 16:10:34
Original geschrieben von Stone2001
BTW: ein kleines Quiz: Welches ist die Programmiersprache die die meisten LOC im Umlauf hat?
Cobol?

marco42
2004-04-18, 16:42:56
Original geschrieben von Stone2001
Nur mal kurz zum Verständnis, damit ich das recht verstehe!
Metaklassen sind Superklassen von normalen Klassen,oder?

Also, eine Superklasse ist ja eigentlich die Klasse von der du ableitest. Eine Metaklasse ist eine Klasse einer Klasse. Aber dazu gibt es den schoenen Spruch, wenn du es nicht verstehst brauchst du es auch nicht. :-)

Eine Klasse ist also die Instanz einer Metaklasse.

Gib unter google einfahcch mal metaclass ein.

Stone2001
2004-04-18, 17:52:42
Original geschrieben von marco42
Also, eine Superklasse ist ja eigentlich die Klasse von der du ableitest. Eine Metaklasse ist eine Klasse einer Klasse. Aber dazu gibt es den schoenen Spruch, wenn du es nicht verstehst brauchst du es auch nicht. :-)

Eine Klasse ist also die Instanz einer Metaklasse.

Gib unter google einfahcch mal metaclass ein.
Aha, langsam wird die Sache klarer! In der objektorientierten Welt ist alles ein Objekt. Objekte sind Instanzen einer Klasse. Also müssen auch Klassen Instanzen einer Klasse sein. Was allerdings für die oberste Klasse zum widerspruch führt. Um dies zu umgehen definiert man die Metaklasse, deren Objekte Klassen sind!

Ich glaube unter Java liefert die Klasse Object das gewünschte! ;)

Gast
2004-04-18, 19:49:09
Original geschrieben von Stone2001
Aha, langsam wird die Sache klarer! In der objektorientierten Welt ist alles ein Objekt. Objekte sind Instanzen einer Klasse. Also müssen auch Klassen Instanzen einer Klasse sein. Was allerdings für die oberste Klasse zum widerspruch führt. Um dies zu umgehen definiert man die Metaklasse, deren Objekte Klassen sind!

Ich glaube unter Java liefert die Klasse Object das gewünschte! ;)

Muss nicht, C++ hat keine explizite Metaklasse. In OO muss es auch keine Klassen geben, es gibt da zB Self oder Proton, die kennen keine Klassen, sondern arbeiten nach dem Prototypen Pattern.

Wie meinst du das mit der obersten Klasse? Meinst du zB Object oder sowas. Nein, dass ist damit nicht gemeint.

Stone2001
2004-04-18, 19:59:17
Original geschrieben von Gast
Muss nicht, C++ hat keine explizite Metaklasse. In OO muss es auch keine Klassen geben, es gibt da zB Self oder Proton, die kennen keine Klassen, sondern arbeiten nach dem Prototypen Pattern.

Wie meinst du das mit der obersten Klasse? Meinst du zB Object oder sowas. Nein, dass ist damit nicht gemeint.
C++ ist ja nicht gerade das Paradebeispiel für eine Objektorientierte Sprache! ;)
Klar muß es in der OO-Welt nicht unbedingt Klassen geben, OBjekte reichen. ;) Und wenn man lieber ein altes Objekt kopiert, an stelle ein neues zu erschaffen, bitte.

Nach dem Grundsatz (der z.B. für Java gilt), das Objekte Instanzen von Klassen sind und Klassen wiederrum Objekte, muß es (ganz am oberen Ende der Hierachie) eine Klasse geben, die keine Superklasse hat. Damit sie aber auch ein Objekt ist, hat man die Metaklassen eingeführt. Die Klasse Object ist in diesem Fall die Metaklasse.
(Falls ich immernoch daneben liegen sollte, erklär es mir)

marco42
2004-04-18, 21:49:36
Original geschrieben von Stone2001
Nach dem Grundsatz (der z.B. für Java gilt), das Objekte Instanzen von Klassen sind und Klassen wiederrum Objekte, muß es (ganz am oberen Ende der Hierachie) eine Klasse geben, die keine Superklasse hat. Damit sie aber auch ein Objekt ist, hat man die Metaklassen eingeführt. Die Klasse Object ist in diesem Fall die Metaklasse.
(Falls ich immernoch daneben liegen sollte, erklär es mir)

Ich kenne mich nicht mit Java aus, aber wenn es wie bei Python/Smalltalk ist, dann sollte es eher eine Klasse Class, Type oder so geben. Object waere dann Instanz von Class und Class haette als Superklasse Object. Class waere auch eine Instanze von sich selbst. So ist es zumindestens in Python. Alle anderen Klassen waeren von Object abgeleitet und waeren Instanzen von Class.

Aber ich bin auch ziemlich neu in Metaklassenprogrammierung. :-)

Trap
2004-04-19, 07:56:05
Es gibt introspection in Java, unter java.lang.reflect gibt es unter anderem eine Class-klasse. Das ist am ehesten das was man normalerweise unter Metaklasse versteht.