Wieso kann nur C Ressourcen direkt ansprechen?

8 Antworten

Beim Zugriff auf ein Array wird in C direkt auf den Speicher adressiert. Das geht schneller, als sich mit dem Overhead von echten Arrays abzugeben. Dafür kann man aber auch problemlos in das 17. Element eines Arrays schreiben, das nur 3 Elemente besitzt. Das führt natürlich im besten Fall zu einem Programmabsturz. Wenn man aber Pech hat, läuft es weiter und gibt Unsinn aus.

Die Geschwindigkeit von C wird also erkauft durch ein Weglassen sämtlicher Sicherungsmethoden, in diesem Beispiel also die Überprüfung des Index.

Das geht natürlich auch in Assembler und D.

Python eignet sich nicht weniger zum Schreiben von Gerätetreibern und Betriebssystemen, vor allem, weil es ja interpretiert wird. Die alte Diskussion, welche Programmiersprache die bessere ist, ist aber genauso unsinnig wir zu erörtern, ob Deutsch oder Französisch "besser" ist. Programmiersprachen sind nur ein Werkzeug. Wenn man ein Problem effizient mit einer bestimmten Sprache lösen kann, ist sie gut.

Zitronensorbet1 
Fragesteller
 18.10.2021, 12:16

wieso dann die Unterscheidung interpretiert und übersetzt? Was ist da wann wieso besser?

0
mjutu  18.10.2021, 13:53
@Zitronensorbet1

Wie gesagt: Was bedeutet denn "besser"? Wenn man die passenden Toolboxen verwenden kann, können interpretierte Sprachen wie Python oder Matlab sehr nützlich sein, um ein Problem schnell zu lösen. Zum Schreiben eines Betriebssystems ist eine Interpretierte Sprache aber Quatsch, denn man müsste in Betriebssystem starten, das den Interpreter startet, um das Betriebssystem zu starten. Das geht, ist aber viel zu umständlich und langsam.

Wer einen Gerätetreiber in Python entwickelt, würde sich auch ein Loch ins Knie bohren, denn interpretierte Sprachen lassen sich immer leicht durch Code-Injections umprogrammieren. Damit wären Viren Tür und Tor geöffnet.

Wenn ich aber 2000 Files öffnen will, in denen eine Tabelle in einem bestimmten Format steht und jeweils die zwölfte Zahl in einer Grafik als Kurve darzustellen, geht das in Matlab oder Python in wenigen Minuten, während es in C der reine Horror ist, das zu schreiben. Was nützt es, dass es dann in Sekundenbruchteilen läuft, wenn man vorher 4 Tage mit Debuggen zugebracht hat?

Eine Bohrmaschine ist nicht "besser" als ein Hammer. Sie haben unterschiedliche Einsatzgebiete.

1
einnutzer456127  02.11.2021, 14:27
@Zitronensorbet1

Kompiliert bedeutet von einer Form (C) in eine andere Form (Maschinencode) umgewandelt.

Interpretiert heißt von einem Programm gelesen und ausgeführt.

1

Weil Python eine interpretierte Sprache ist, die immer ein Betriebssystem zur Ausführung des Interpreters braucht. Ein C Programm wird in Maschinencode kompiliert, welcher von einer cpu direkt ausgeführt werden kann.

Es gibt durchaus Bemühungen, beispielsweise mit Java oder .net ganze Betriebssysteme zu schreiben, obwohl auch diese eine Runtime benötigen, aber wie da der aktuelle Stand ist, weiß ich nicht.

Generell ist die Aussage, dass man nur mit C Hardware direkt ansteuern kann, aber nicht korrekt.

Zitronensorbet1 
Fragesteller
 18.10.2021, 12:19

ok also der Vorteil ist, dass C kein OS benötigt. Wahrscheinlich also auch der Grund wieso OSe in C geschrieben werden?

Kann C++ und C# auch direkt von einer CPU ausgeführt werden?

0
ohwehohach  18.10.2021, 14:57
@Zitronensorbet1

Kommt darauf an. C++ gibt es in einer CLI Version für das .net Framework. Dafür gelten dieselben Regeln wie für alle anderen .net Sprechen. „Normales“ C++ wird ebenso in nativen Bytecode kompiliert wie C. Der Grund für C ist: es ist das kleinste gemeinsame Subset.

0
Wie sich Python mit C vergleicht

Python ist i.W. nur Glue Language (sprich: Man nutzt es vor allem, um schon existierende Software-Bausteine mit einander zu verketten).

Da die Grenze zwischen Anwendungen, die durch einfache Verkettung schon existierender Software-Bausteine erreichbar sind, und den Anwendungen, deren Logik man im Detail selbst festzusetzen hat, fließend ist, denken wenig erfahrene Programmierer, Python wäre eine gute Programmiersprache. Dem ist aber nicht so. Pythons einziger Vorteil ist, gute Glue Language zu sein.

Würde man in C oder C++ geschriebene Programme mit feinen Stoffen vergleichen, so würde Phyton der Nähmaschine entsprechen, die ein Schneider nutzt, aus diesen Stoffen Kleider zu machen. C aber entspräche der Webmaschine, mit deren Hilfe man die Stoffe erzeugt hat.

Wisse auch:

In Python geschriebener Code arbeitet um mindestens eine Größenordnung langsamer als in C geschriebener (genauer: um einen Faktor, der — je nach Aufgabe des Programms — irgendwo zwische 20 und 200 liegt).

grtgrt  18.10.2021, 12:15
  • Wozu Python?
  • Unternehmenskritische ERP-Applikationen in Python statt Java schreiben zu wollen, wäre so, als würde man Soldaten statt mit Stahlhelm und Kampfanzug in Unterhemd und Badehose in den Krieg schicken.
0

Wir haben C zwar auch immer spaßeshalber als "mächtigsten Makroassembler der Welt" bezeichnet, aber so ganz stimmt das natürlich nicht. C ist rudimentär und exponiert noch diverse Eigenschaften der Hardware, aber wirklich hardwarenah ist es nicht, da mußt Du dann schon auf inline-ASM setzen, anders wirst Du z.B. definitiv nicht die MMU bespaßen.

C ist eben ein alter Klassiker, es gibt auch ne Menge Bibliotheken und ich muß in der Regel nicht auf Lang-Bindings bei einer Bibliothek warten oder diese selber machen. Allerdings wird bei größeren Apps, gerade auch bei GUI, gerne auch auf C++ zurückgegriffen. Der syntaktische Zucker der OOP ergibt bei objektbasierten GUIs einfach recht viel Sinn, auch wenn man das natürlich in reinem C machen kann, wie bei GTK+ beispielsweise.

Allerdings wirst Du auch in C++, erst recht nicht in C, eine größere Desktop-App als Einzelperson nicht in wenigen Wochen runterreißen - das geht mit Python definitiv.

Python war von je her interpretiert. Gewisse Eigenschaften lassen sich auch nicht ganz so leicht umsetzen (auf eine normale ISA abbilden). Mitunter bräuchte es Anpassungen der Sprache.

Du könntest Dir cython anschauen.

----

Es gibt auch einfach Bereiche, da wirst Du mit Python nicht sonderlich viel Spaß haben.

Erst einmal ist Python eine interpretierte Programmiersprache. Das hat zwar einige Vorteile in Bezug auf Debugging und Fehleranalysen, ist jedoch langsamer. Weiter gilt:

Aus großer Kraft folgt große Verantwortung.

C kann vieles schneller, weil der Entwickler hier sehr hardwarenah programmieren kann aber eben auch muss. Er muss über den Speicher nachdenken, er arbeitet mit Speicheradressen, er denkt über Ressourcen nach, dem Freigaben von Speicher. Und macht er einen Fehler, dann geht alles in die Grütze und es oft sehr eklige Runtime Errors, Speicherlecks usw. die sehr schwer zu analysieren sein können.

Moderne Sprachen nehmen dem Entwickler sehr, sehr, sehr viel ab. Das macht die Entwicklung oft leichter und schneller und auch der Einstieg in diese Sprachen ist meist leichter, was sie beliebter macht.

Wenn du nun sowas beliebtes wie Python umbaust, dass es wie C funktioniert, dann brauchst du es nicht, weil es C mit anderer Syntax wäre. Du würdest letztlich das aufgeben, was es beliebt macht und in ein zweites C verwandeln.

Es sind einfach verschiedene Werkzeuge mit verschiedenen Stärken und Schwächen. Eine eierlegende Wollmilchsau gibt es in der Programmierung nicht und wird es nie geben, dafür ist der Bereich zu breit.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012