Unix_Samurai
Anmeldungsdatum: 10. Oktober 2008
Beiträge: 661
|
Hi. Wenn man eine neue Open Source Software entwickeln will, sollte man unter Linux dann C oder C++ nutzen? Die meisten Programme sind ja alle in C, wodurch vermutlich die meisten Entiwckler auch C beherrschen und lieber schreiben, was in mehr Entwickler resultieren kann. Man kann auch auf viel mehr Software als Basis zu greifen. Andererseits ist C++ und C gut kompatibel so dass man C Module nutzen könnte oder? C++ ist sicherlich auch nicht grundlos die Weiterentwicklung von C und hat sicherlich viele Vorteile, z.B. OOP. Ist es vielleicht Zeit C zu beenden und das modernere C++ zu nutzen? MfG
|
tgsflash
Anmeldungsdatum: 21. August 2010
Beiträge: 921
Wohnort: /home
|
Als erstes kommt es darauf an was du als geeignet empfindest und was du besser beherrschst.
|
DasIch
Anmeldungsdatum: 2. November 2005
Beiträge: 1130
|
C++ ist keine Weiterentwicklung von C. C++ mag zwar Vorteile haben aber es hat auch eine ganze Menge Nachteile.
|
Hefeweiz3n
Moderator, Webteam
Anmeldungsdatum: 15. Juli 2006
Beiträge: 5815
Wohnort: Ankh-Morpork
|
Endbenutzeranwendungen werden unter Linux auch immer häufiger mit Python geschrieben. Gui-Anbindung gibts dabei sowohl für Qt4 (und KDE4) sowie Gtk2 (evtl. auch schon für GTK3).
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6502
Wohnort: Hamburg
|
Wenn man eine neue Open Source Software entwickeln will, sollte man unter Linux dann C oder C++ nutzen?
Du solltest die Sprache nehmen, mit der du am besten zurechtkommst. Der Objektorientierte Ansatz von C++ hat durchaus einige organistatorische Vorteile, besonders bei großen Projekten und mehreren Programmierern. Wenn sich allerdings während der Entwicklung herausstellt, das die Objekte neu gegliedert werden müssen, gleicht das schon fast einem GAU. Bei zeitkritischen Problemen halte ich aber das klassische C für unschlagbar. Allerdings erfordert das auch einige Erfahrung, da es sehr leicht zu Laufzeitfehlern bei der Zeigerprogrammierung kommen kann, die der Compiler nicht erkennt. Ein weiteres Entscheidungskriterium kann auch die Wahl der gewünschten/geforterten Oberfläche sein (Gnome, KDE, FLTK, ...). Die allgemeine Stimmung tendiert aktuell in Richtung C++, ich habe da bei meinen aktuellen Projekten allerdings einige Probleme mit (die allerdings eher mental als technischer Natur sind). Sowas hat eben auch mit der persönlichen arbeitsweise und Vorlieben zu tun. Wenn du beide Sprachversionen beherrscht, solltest du es einfach ausprobieren, indem du die Grundfunktionen einfach mal parallel entwickelst. Das ist jetzt zwar ne doofe Antwort, aber wenn du nicht sicher bist, musst du es selber ausprobieren. Jeder Tipp, den du von anderen bekommst, ist von persönlichen Vorlieben oder Ansichte eingefäbt.
|
Unix_Samurai
(Themenstarter)
Anmeldungsdatum: 10. Oktober 2008
Beiträge: 661
|
Wenn man eine Software entwickelt, die viel mit anderer Software zusammenarbeitet, dann ist es vermutlich günstiger auch die neue Software in der Sprache zu schreiben, in der die andere Software geschrieben wurde. So kann man etwas leichter in den Quelltext finden und die Software etwas anpassen. Aber ist dieser Ansatz nicht nur in der Theorie sondern auch in der Praxis tauglich? Kann jemand anhand von Gnome und KDE mal Pro und Kontra aufzählen? Das sind ja zwei Paradebeispiele für C und C++. MfG
|
TheDarkRose
Anmeldungsdatum: 28. Juli 2010
Beiträge: 3459
|
C, C++, schon mal an andere Alternativen gedacht? Phyton, Perl, Java, Ruby, etc. Die Welt besteht nicht nur aus C/C++ 🤓
|
DasIch
Anmeldungsdatum: 2. November 2005
Beiträge: 1130
|
Gnome und KDE nutzen C und C++ weil die Sprachen schnell und relativ populär sind. C und C++ nutzt man definitiv nicht weil es sinnvoll ist Anwendungen prinzipiell in diesen Sprachen zu entwickeln, das Gegenteil ist eher der Fall. C#, Vala und Python sind momentan ziemlich beliebt im Gnome Umfeld und eine ganze Reihe von Anwendungen sind in diesen Sprachen geschrieben, wie z.B. Banshee, Ubiquity, Software Center, Totem etc. C und C++ sind ziemlich komplexe und schwierige Sprachen, die es einfach machen Fehler zu produzieren und es schwer machen Programme schnell und mit möglichst wenig Fehlern zu entwickeln.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6502
Wohnort: Hamburg
|
Also im Zusammenhang mit C würde ich das Wort "komplex" lieber durch "elementar" ersetzt sehen. Man muss tatsächlich vieles selber mchen, sofern man keine entsprechende Bibliothek findet wo jemand anderes das schon erledigt hat. In C geschriebene Bibliotheken (als shared-objects) lassen sich von vielen anderen Programmiersprachen direkt nutzen.
|
Blubbie
Anmeldungsdatum: 5. Januar 2011
Beiträge: 186
|
Gibts eigentlich größere C bzw. C++ Programme, die auf lange Sicht kein Speicherleck haben? 😉 Auch muss man insbesondere bei C sehr aufpassen, dass man keine Sicherheitslücken produziert, weil es leicht zu Pufferüberläufen (http://de.wikipedia.org/wiki/Puffer%C3%BCberlauf#Programmiersprachen) kommen kann. Bei C++ hast du zumindest die Wahl, ob du einfache Arrays oder Zeiger auf Strings verwendest oder eben Klassen wie vector, string usw. (und damit das Riskiko eines Pufferüberlaufs minimierst). Aber wenn ich die Wahl hätte, würde ich keine von beiden Sprachen für Anwendungen und auch Spiele verwenden 😉. Bei C/C++ muss man einfach zu viel selbst machen und den Performancevorteil braucht man oft nicht.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6502
Wohnort: Hamburg
|
Gibts eigentlich größere C bzw. C++ Programme, die auf lange Sicht kein Speicherleck haben?
Warum soll es die nicht geben? Mann muss sich halt ein wenig Gedankenüber die benötigte Puffergrößen machen und auch mal statt strcpy() strncpy() verwenden. Auch wenn man C immer noch als sehr elemantar bezeichnen kann wurde es seit K&R doch etwas weiter entwickelt.
... und den Performancevorteil braucht man oft nicht.
Da bin ich dann wohl wieder mal eine Ausnahme ☹ Ich habe da 2 Projekte, wo sowas zum tragen kommt:
Ich suche regelmäßig einen Dateibaum mit ca. 250.000 Dateien ab, von denen aber nur einige, mit bestimmten Namensmerkmalen für eine Datenbank herausgefiltert werden sollen. Und da kämpfe ich um jede Millisekunde. Ursprunglich war das mal ein Bash Script, jetzt ist das ein C Programm. Aber auch da lassen sich Verbesserungen noch mit der Stoppuhr feststellen. Momentan liege ich bei ca. 6 Minuten für einen Suchlauf.
Das andere Projekt soll mal ein Morsedecoder werden. Prinzipiell funktioniert der auch schon. Aber da der ohne jede Einstellung von aussen auskommen soll, muss er sehr umfangreiche Statistiken durchführen und dazu noch so ganz nebenbei eine Foureier Analyse in Echtzeit durchführen. Auch wenn ich dabei auf erprobten Code zurückgreifen kann, ist das nicht ganz ohne. Ich glaube nicht dass sowas mit Python möglich wäre (ausser man nutzt FFTW).
Ich programmiere ja nun schon etwas länger und habe aufgrund meines Alters vielleicht auch einige Defizite, wenn es um sog. moderne Programmiersprachen geht, aber eigentlich ist "programmieren" ein Handwerk, das man nicht verlernt, und eine Programmiersprache ist nur ein Werkzeug, das man entsprechend der Aufgabenstellung wechseln kan. Damit will ich sagen, die Hauptsache ist, dass man erstmal anfängt. Wenn man dann später erkennt, das das verwendete Werkzeug nicht das optimale ist, dann wechselt man eben. Die bisher gemachte Programmiererfahrung ist aber nicht wirklich verloren und findet sich irgendwo im Erfahrungsschatz wieder und fliesst oft unbewust in neue Projekte ein. Meine Programmiererfahrungen sind relativ beschränkt und konzentrieren sich mehr auf die Ursprünge wie: Fortran, Basic, BS2000 Assembler (zur Siemens Zeit), z80-Assembler, MC68000 Assembler, Pascal, C, PHP, Javascript und mit C++ kämpfe ich noch ... Bei all den Vor- und Nachteilen der einzelnen Programmiersprachen wird in den Diskussionen darüber oft vergessen, das Menschen (Programmierer) oft bevorzugte Arbeits- und Denkweisen haben und damit nicht jede Programmiersprache zu jeder Arbeitsweise optimal passt. Ein beruflicher Programmierer muss sich damit zurechtfinden, aber ein Hobbyprogrammierer darf sich das aussuchen, was ihm am besten liegt. Aber herausfinden muss er das selber, da hilft nur probieren.
|
Unix_Samurai
(Themenstarter)
Anmeldungsdatum: 10. Oktober 2008
Beiträge: 661
|
@Dakuan: Danke für den tollen Post. Ich habe wirklich schon hunderte Versusposts in Sachen Programmiersprache gelesen, aber besonders dein letzter Absatz hat mir die Augen geöffnet, weil ich das viel zu wenig beachtet hatte.
|
Udo_Nitzsche
Anmeldungsdatum: 26. April 2011
Beiträge: 122
Wohnort: Berlin
|
Dakuan Meine Programmiererfahrungen sind relativ beschränkt und konzentrieren sich mehr auf die Ursprünge wie: Fortran, Basic, BS2000 Assembler (zur Siemens Zeit), z80-Assembler, MC68000 Assembler, Pascal, C, PHP, Javascript und mit C++ kämpfe ich noch ... Bei all den Vor- und Nachteilen der einzelnen Programmiersprachen wird in den Diskussionen darüber oft vergessen, das Menschen (Programmierer) oft bevorzugte Arbeits- und Denkweisen haben und damit nicht jede Programmiersprache zu jeder Arbeitsweise optimal passt. Ein beruflicher Programmierer muss sich damit zurechtfinden, aber ein Hobbyprogrammierer darf sich das aussuchen, was ihm am besten liegt. Aber herausfinden muss er das selber, da hilft nur probieren.
Oh, als beschränkt würde ich das nicht gerade bezeichnen. 😉 Den letzten Absatz kann ich allerdings bestätigen. Mir liegen z. B. "Klartext"-Programmiersprachen wie Pascal auch mehr als das kryptische C/C++. Auch mit (Amiga-)Basic bin ich damals besser zurecht gekommen als mit C, was ich nie geschafft habe, zu lernen. Daher habe ich mich zu DOS/Windows-Zeiten eher intensiv mit Turbo/Borland Pascal und später Borland Delphi beschäftigt. Durch die m. E. verfehlte Lizenzpolitik von Borland/Inprise - die Entwicklerpakete waren ja irgendwann für einen Hobbyprogrammierer nicht mehr bezahlbar! - bin ich bei der OpenSource-Variante FreePascal mit der integrierten Umgebung Lazarus gelandet. Dieses Paket Lazarus/FreePascal gibt es übrigens auch für Linux und MacOS X. Das beste daran ist: Die Anwendungen sind sogar portierbar, wenn man nicht gerade betriebssystemspezifische Funktionen direkt aufruft. Es gibt also durchaus noch weitere Möglichkeiten als C/C++, nativen Code zu erzeugen, d. h. wenn es auf Geschwindigkeit ankommt und nicht "Interpreter"-Sprachen wie Java oder C# in Frage kommen. Wenn man allerdings mehr in Richtung Verbesserung oder Bugfixing von vorhandenen OpenSource-Anwendungen gehen will, kommt man wohl um das m. E. noch am weitesten verbreitete C/C++ nicht herum. Daher habe ich den nächsten Anlauf unternommen, C++ zu lernen, da mir der objektorientierte Ansatz in Delphi (=ObjectPascal) schon sehr zugesagt hat.
|
Blubbie
Anmeldungsdatum: 5. Januar 2011
Beiträge: 186
|
@Dakuan Ich stimme dir zunächst zu, dass jeder Programmierer seine bevorzugte Sprache hat und gerade im OpenSource Bereich, wo man ja freiwillig und nicht für Geld programmiert sicher die persönliche Präferenz eine große Rolle spielt. Auch stimmt es, dass man Memory Leaks verhindern kann (ebenso wie Pufferüberläufe bei C), wenn man alles richtig macht. Nur sind Programmierer auch nur Menschen und Menschen machen Fehler und je größer das Projekt, desto höher auch die Chance, dass sich eben Memory Leaks einschleichen. Ab einer Größe wie z. B. Firefox oder OO.org lässt sich das kaum vermeiden (kannst ja gerne mal nach Open Office und memory leak googeln bzw. firefox, da findest du genug. Auch kann man es ja selbst ausprobieren, denn wenn alles sauber programmiert ist, muss wenn man ein Dokument wieder schließt der Prozess genau soviel Speicher brauchen wie vorher, nur das ist eben leider nicht der Fall. Auch ein Wechsel der Programmiersprache, während man schon mit der Programmierung begonnen hat, ist mehr als kontraproduktiv. Ich bin ja der Meinung, dass man sich grundlegende Gedanken vor dem Beginn der Programmierung machen sollte (und dazu zählt nicht nur die Wahl der Programmiersprache). Als letztes bliebe noch die Möglichkeit die rechenintensiven Algorithmen in C oder C++ zu programmieren und den Rest z. B. in python. Diverse Spielehersteller machen dies ja schon seit längerem, da wird die Grafik/Phsysikengine in C++ programmiert und die Story, Quests usw. in einer Skriptsprache. Man sollte sich also nicht an der Sprache ausrichten, sondern sich fragen: "Was will ich programmieren? Welche Anforderungen hat das Programm? Benötige ich bestimmte Libs? usw." und anhand dessen kann man dann die Programmiersprache wählen und wenn man nicht gerade sehr performancekritische Anwendungen hat, spricht meiner Meinung nach nichts für C oder C++.
|
Noah
Anmeldungsdatum: 3. Januar 2010
Beiträge: 52
|
Weil man in Python keine Variablentypen angibt findet der Compiler nicht schon die gröbsten Fehler. Daher muss man 100% Codeabdeckung bei den Testfällen erreichen, was aufwändig ist.
|