Python in C - Warum?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ne0h
User
Beiträge: 115
Registriert: Samstag 16. Februar 2008, 11:35

Hallo,

also vorab erstmal einige Dinge, die ich klarstellen möchte, da meine Frage wohl doch eher falsch aufgefasst wurde bzw. zumindest nicht so, wie ich es beabsichtigt habe.

Ich habe nicht damit beabsichtigt, C gegen C++ zu bewerten bzw. C als "ungeeignet" zu degradieren bzw. C++ als "besser" darzustellen.

Meine Aussagen zu C++ und der höheren Sicherheit bzw. der OO sind keine eigenen Meinungen, sondern das, was in sehr sehr vielen Kreisen als Meinung kursiert. C++ wird nunmal eine erhöhte Typsicherheit zugesagt, z.B. hält sich die Meinung, dass C-Compiler (und auch einige C++ Compiler) hinsichtlich der Überprüfung vpn Quellcode keine geeigneten und sicheren Prüfroutinen besitzen und somit viele Fehler untergehen.

Auch das Speichermanagement bei C soll anfällig für Fehler sein (was auch schon jemand hier angesprochen hat). Ich habe zu C in einem Buch gelesen (welches weiss ich jetztn nicht mehr, müsste ich mal nachschauen), dass C aus diesen Gründen z.B. nicht in der Raumfahrt oder in sicherheitsrelevanten Bereichen eingesetzt wird.

Um wieder zum Kern der Sache zu kommen: Mir persönlich macht die Programmierung mit C grossen Spass, mit C++ konnte ich noch keine so grossen Erfahrungen sammeln. C ist natürlich unglaublich schnell und mächtig (nicht umsonst sind die meissten Systeme immer noch in C implementiert). Aber C hat auch seine Macken und Tücken, die zwar zum Teil durch guten Programmierstil und durch "Vorausdenken" garnicht erst auftreten, aber auch C++ ist da bei weitem nicht perfekt.

Trotzdessen geht es eben nicht um einen "Was ist denn nun besser"-Vergleich dieser Sprachen oder um diese typischen 08/15 Kämpfe , sondern um den Hintergrund dessen.

Oder um es ein wenig besser zu formulieren:

Hinter einer Sprache verbirgt sich (zumindest heute noch) ein Mensch, der auch mit bestimmten Absichten und Zielen eine Sprache entwirft und dabei bestimmte Konzepte zugrunde legt.

So habe ich in einem Python Buch etwas interessantes gelesen.

Es wird dort ein direkter Vergleich gezogen, zwischen Perl und Python. Warum? Weil der Autor auf die Menschen dahinter zu sprechen kommt. Er definiert dabei, um welche Menschen es sich hinter diesen Sprachen handelt, also welchen Hintergrund die beiden Erschaffer mitbringen.

Zu Perl ist seine Aussage:

Der Erschaffer von Perl ist ein gelernter Linguist. Dies schlägt sich eben im Design der Sprache nieder. "There is more than one way to do it" zeigt hier sehr gut die Verbindung, in der menschlichen Sprache gibt es häufig dutzende Wege, etwas auszudrücken, zu umschreiben....

Python hingegen wurde von einem Menschen erschaffen, der gelernter Mathematiker ist. Dies zeigt sich in der Philosophie, dass es genau einen Weg für eine Lösung gibt und dies ist auch (fast immer) der effizienteste und logischste. Python ist kein Sprache, die sich aus unzähligen "Ausnahmen" zusammensetzt, sondern eine logisches, mathematisches Konstrukt mit definiertem Verhalten.


So zumindest sind die Aussagen des Autors.

Was davon nun zu 100% der Wahrheit entspricht, weiss ich nicht, aber es sind doch sehr interessante Aussagen, die dort aufgegriffen werden und damit auch beide Sprachen in einen direkten Kontext gerückt werden.

Und dahingehend zielte auch meine Frage.

Ich möchte nicht wissen, welche syntaktischen Elemente C besser machen als C++ oder dass C++ als OO Sprache konzipiert wurde (und JA, ich weiss, auch das gehört nunmal dazu, ich habe es auch selber angesprochen). Ich möchte im Grunde wissen, welche Überlegungen dazu geführt haben, dass C der Baustein für Python ist.

Und NEIN, Leonidas, niemand hat mir aufgedrückt, C++ sei das "Wahre". Ich gehe von meinen eigenen Gedanken aus und stelle mir nunmal des öfteren solche Fragen, die vielleicht ein wenig kindisch oder merkwürdig klingen. Aber ich schaue einfach auch gerne hinter die Kulissen und begnüge mich nicht mit dem, was offensichtlich scheint. :wink:


Ich hoffe, ich konnte hier ein wenig Klarheit schaffen.


Gruß

ne0h
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ne0h hat geschrieben:Meine Aussagen zu C++ und der höheren Sicherheit bzw. der OO sind keine eigenen Meinungen, sondern das, was in sehr sehr vielen Kreisen als Meinung kursiert. C++ wird nunmal eine erhöhte Typsicherheit zugesagt, z.B. hält sich die Meinung, dass C-Compiler (und auch einige C++ Compiler) hinsichtlich der Überprüfung vpn Quellcode keine geeigneten und sicheren Prüfroutinen besitzen und somit viele Fehler untergehen.
Weder C noch C++ bieten eine besonders große Typsicherheit, wenn du Typsicherheit willst, dann nimm doch eine Sprache mit Hindley-Miller Inferenzierten Typen. Das stört weniger und bietet höhere Typsicherheit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

dieser sogenannte "Mathematiker" konnte kein "c++" wo er python konstruiert hat, sondern nur "c" . wenn man sich einmal festbeissen tut, kommt man nicht mehr los.

ein schlechtes beispiel ist "Purebasic mit Ogre", festgebissen und immer noch keine lösungen von ogre in purebasic, womit ein progger was vernünftiges in 3d schaffen kann.

:D
BlackJack

Vielleicht sollte man auch mal ein Blick auf das Jahr werfen, an dem Python gestartet ist: 1991. Also sieben Jahre bevor C++ standardisiert wurde. C dagegen war schon standardisiert und es gab konforme Compiler auf vielen Plattformen.

Ausserdem sind sich IMHO "philosophisch" C und Python viel näher als C++ und Python. Im C-Standard sind fünf Ziele des Sprachentwurfs aufgelistet, von denen die ersten vier auch auf Python, aber nicht auf C++ zutreffen:

1. Trust the programmer.
2. Don't prevent the programmer from doing what needs to be done.
3. Keep the language small and simple.
4. Provide only one way to do an operation.
5. Make it fast, even if it is not guaranteed to be portable.
lunar

Zudem ist C++ nicht so portabel wie C. Selbst zehn Jahre nach der Standardisierung setzt kaum ein Compiler den Standard vollständig um, die C++-Standardbibliothek kommt kaum über Container-Klassen, IO und Strings hinaus, und zudem interpretieren C++-Compiler den Standard manchmal äußerst frei (man denke nur an die ganze VS-C++-Erweiterungen).
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Stell mir grade vor, wie man Python auf C++0x portieren würde =D
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

BlackVivi hat geschrieben:Stell mir grade vor, wie man Python auf C++0x portieren würde =D
Man könnte ein C++-Backend für pypy schreiben :P
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich würde ja sagen, C wurde einfach als kleinster gemeinsamer Nenner gewählt. Definitiv war Anfang der 90er C++ noch nicht so verbreitet wie heute - falls es heute denn gegenüber C so verbreitet ist. Würde man jetzt einen Interpreter für eine Sprache schreiben, könnte man sicherlich auch C++ wählen. Rubinius (Neuimplementierung von Ruby) macht das so.

Portabilität wird IMHO ansonsten überbewertet. Solange man sich an den GCC hält, läuft's dort, wo dieser läuft und das sind schon eine ganze Menge Plattformen. Man könnte sich somit auch für eine Sprache als Implementierungssprache entscheiden, die selbst wieder C(++) für den GCC (als portable Assemblersprache) erzeugt und erreicht die selbe Portabilität.

1993 war ich in einem Projekt, das einen CommonLisp nach C Compiler baute und das Ergebnis lief dann sogar auf meinem mit 4 MB Hauptspeicher ausgestattetem PC - und nicht nur auf unseren Sun-Workstations mit immerhin 16 MB Hauptspeicher. Ein Python in Lisp hätte sich wahrscheinlich viel einfacher formulieren und warten lassen (jedenfalls für Leute, die Lisp verstehen) und ebenfalls übersetzen lassen. Scheme-Compiler wie z.B. Gambit oder Bigloo gehen ähnlich vor und man könnte diese ebenfalls benutzen.

Ich glaube, dass es prinzipiell eine gute Idee ist, Interpreter oder Compiler für Hochsprachen (wie Python) auch in einer Hochsprache - und nicht in C - zu schreiben, aber leider sind meist die Leute, die es auch durchhalten, eine neue Sprache zu entwerfen auch die, die lieber eine maschinennahe Sprache bevorzugen. Vielleicht liegt es an der dadurch bereits trainierten Leidensfähigkeit ;)

C für Python zu benutzen hat definitiv den Vorteil, dass man relativ einfach in C bereits existierende Bibliotheken anbinden kann. Das wäre bei z.B. OCaml als Implementierungssprache wahrscheinlich schwieriger.

Ansonsten fände ich es natürlich schön, wenn schon längt PyPy der Standardweg für die Referenzimplementierung wäre.

Stefan
Benutzeravatar
sehbaer
User
Beiträge: 39
Registriert: Sonntag 30. März 2008, 17:26
Wohnort: Kölle

Liebe Pythoffels.

Es geht wohl auch anders herum. Ein C Compiler in Python geschrieben:
http://people.cs.uchicago.edu/~varmaa/mini_c/
This is a compiler for a subset of the C programming language. It was written in Python during the spring of 2004.
:) habe ich auf pythonmania.de entdeckelt.
...es sind ganz bestimmt mehr Nullen als Einsen.
lunar

sma hat geschrieben:Portabilität wird IMHO ansonsten überbewertet. Solange man sich an den GCC hält, läuft's dort, wo dieser läuft und das sind schon eine ganze Menge Plattformen.
Der Compiler ist nicht so sehr das Problem wie die Bibliotheken.
Ein Python in Lisp hätte sich wahrscheinlich viel einfacher formulieren und warten lassen (jedenfalls für Leute, die Lisp verstehen)
Nicht nur das "Leute, die Lisp verstehen" nicht auf Bäumen wachsen, ist es auch bestimmt abenteuerlich, C++-Bibliotheken über Lisp an Python anzubinden. Das hört sich an wie in Hotshots: "Sie müssen über den Hintern, um von hinten dann infernal an die Augen heranzukommen." :twisted:
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

lunar hat geschrieben:Nicht nur das "Leute, die Lisp verstehen" nicht auf Bäumen wachsen, ist es auch bestimmt abenteuerlich, C++-Bibliotheken über Lisp an Python anzubinden.
Würde Lisp als Implementierungssprache für Interpreter populär genug, wären C++ Bibliotheken nicht das Problem, denn diese wären auch alle in Lisp geschrieben ;)

Stefan
lunar

sma hat geschrieben:
lunar hat geschrieben:Nicht nur das "Leute, die Lisp verstehen" nicht auf Bäumen wachsen, ist es auch bestimmt abenteuerlich, C++-Bibliotheken über Lisp an Python anzubinden.
Würde Lisp als Implementierungssprache für Interpreter populär genug, wären C++ Bibliotheken nicht das Problem, denn diese wären auch alle in Lisp geschrieben ;)
Gnade uns Stallman, elisp ist schon schlimm genug ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Gnade uns Stallman, elisp ist schon schlimm genug ;)
Elisp ist vielleicht die Ausnahme, aber Lisp-Dialekte sind eigentlich recht cool. Aber zugegeben, sich mit etwas anderem als Common Lisp, Scheme (und evtl. Clojure) zu befassen ist sicher nicht so sonderlich lustig. Hat jedes ihre Stärken und Schwächen aber für Metaprogrammierung ists nett.

Jemand hat auch behauptet das man sich für jedes Problem in Lisp eine eigene Sprache schreibt (DSL) und mit dieser dann das Problem löst :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Leonidas hat geschrieben:Hat jedes ihre Stärken und Schwächen aber für Metaprogrammierung ists nett.
Programmierung um der Metaprogrammierung willen ist irgendwie eine Art informationstechnischer Onanie, reine Selbstbeschäftigung ;)

Auch wenn das im Akademischen jetzt vielleicht weniger gilt, aber letztendlich will man mit einem Programm ja irgendwo was erreichen, dann reicht es nicht mehr, wenn die Sprache nett für Metaprogrammierung ist ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Auch wenn das im Akademischen jetzt vielleicht weniger gilt, aber letztendlich will man mit einem Programm ja irgendwo was erreichen, dann reicht es nicht mehr, wenn die Sprache nett für Metaprogrammierung ist ;)
Dann schau dir mal UnCommon Web (CL) oder Fluxus (Scheme) an. Die sehen auch aus Python-Sicht interessant aus und bei dem was bei fluxus rauskommt wird man mit Python und Pygame richtig neidisch.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leonidas hat geschrieben:Jemand hat auch behauptet das man sich für jedes Problem in Lisp eine eigene Sprache schreibt (DSL) und mit dieser dann das Problem löst :)
Was ich für im Gegensatz zu lunar auch den richtigen Ansatz halte. Extrem ist in dieser Hinsicht Forth, wo man sich ja wirklich solange Worte, mit denen man den Satz baut, der das Problem löst, aus einfacheren Worten zusammenbaut, bis man abstrakt genug ist, auch die Lösung in einem Satz auszudrücken. Man vergleiche auch Guy Steeles legendären OOPSLA-Vortrag, Growing a Language.

Man geht in jeder Programmiersprache so vor, doch viele Programmiersprachen erlauben es nur, neue Funktionen (oder Operationen) selbst zu definieren, nicht jedoch auch neue Kontrollstrukturen. Hier sind Forth oder aber eben auch Lisp-Dialekte anders. Eigene Kontrollstrukturen (allgemein "special forms") sind dank Makro-Programmierung ebenfalls möglich. CommonLisp geht mit seinem Objektsystem sogar so weit, dass auch andere eigene Objektsysteme dank Metaobjekt-Programmierung möglich sind.

Stefan
Antworten