[Diskussion] Dynamische Sprachen

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.
Gregorrr
User
Beiträge: 22
Registriert: Montag 25. Juli 2011, 21:55

pillmuncher hat geschrieben:
Kebap hat geschrieben:
Gregorrr hat geschrieben:NLP.
NLP?
Vermutlich Natural Language Processing. Vermutlich nicht Neuro-Linguistisches Programmieren. *brrr*
Ja, ich meinte Natural Language Processing :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

kantaki hat geschrieben:Trotzdem würde ich gerne ein paar Argumente von Python Nutzern hören
Argumente zu was? Im wesentlichen werden da halt die Stereotypen vorgekaut, wie toll etwa geschweifte Klammern sind (ja ne, ist klar, siehe CoffeeScript), wie toll es ist alle Typennamen immer hinschreiben zu müssen und wie schnell C++ ist. Wenn ich C++ programmiere und die Wikipedia-Seite zu Python durchlese, kann ich auch so Argumente bringen.

Ich denke die Anzahl der Fehler die durch Tippfehler verursacht werden von C++-Leuten groß übertrieben werden. Außer sie Tippen indem sie mit dem Kopf auf die Tastatur schlagen, aber in Python kommt beim Testen halt ein NameError, Problem wird behoben, fertig. Statische Typsysteme haben auch Vorteile, aber dieser Vertipper-Schutz wird großartig übertrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Leonidas hat geschrieben:Ich denke die Anzahl der Fehler die durch Tippfehler verursacht werden von C++-Leuten groß übertrieben werden. Außer sie Tippen indem sie mit dem Kopf auf die Tastatur schlagen, aber in Python kommt beim Testen halt ein NameError, Problem wird behoben, fertig.
Es kann manchmal zu etwas schwer zu findenden Fehlern kommen, wenn z.B. innerhalb einer Schleife ein Wert neu an einen bereits außerhalb der Schleife bekannt gemachten Namen gebunden werden soll. Macht man dort einen Tippfehler, dann wird innerhalb der Schleife "versehentlich" ein neuer Name angelegt, statt den schon bestehenden zu benutzen. Das würde bei statisch typisierten Sprachen wohl etwas früher auffallen, weil dort stattdessen vom Compiler ein Fehler gemeldet würde. Ich glaube, das war gemeint. Ist aber auch nur ein Randfall, der jetzt nicht sooo ins Gewicht fällt.
BlackJack

@snafu: Vor dem Fehler schützt mich eigentlich schon der simple (im Vergleich zu IDEs) Editor, den ich verwende. Wenn ich den Namen vor der Schleife schon mal geschrieben habe, greift innerhalb der Schleife die Autovervollständigung vom Editor und macht es mir schwer mich so zu verschreiben, dass ein neuer Name entsteht.

Ausserdem gibt es ja noch statische Code-Analyse. Hier mal Dein Beispiel:

Code: Alles auswählen

def f():
    spam = 0
    for i in xrange(42):
        span = i
    return spam
Dazu sagt pylint:

Code: Alles auswählen

W:  4:f: Unused variable 'span'
Da brauchte ich also gar nicht lange selber suchen.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mit den richtigen Tools ist das kein Problem, wobei das von der Sprachspezifikation selbst (in Gestalt eines Compilers) bei Python halt nicht abgefangen wird. Und eher simplen Editoren (z.B. Gedit), die aber durchaus produktiv für Python-Programmierung genutzt werden, fällt sowas auch nicht auf bzw die bieten keine Autovervollständigung an. Ich will hier aber auch eigentlich keine großartige Diskussion anfangen, sondern wollte nur erklären, was in dem verlinkten Thread sehr wahrscheinlich mit "Tippfehler" gemeint war... ;)
BlackJack

@snafu: Gedit hat keine Autovervollständigung? Das ist ja schwach. Ich dachte das hat mittlerweile jeder Editor. Ich rede hier nicht von irgend etwas intelligentem, sondern nur Kenntnis von den Wörtern die sich im/in dem/den offenen Dokument(en) befinden. Mehr benutze ich auch nicht.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@BlackJack: Also ich wüsste nicht, wo man die einschalten könnte. In den Standardeinstellungen ist definitiv keine drin. Laut Google-Suche gibt's dafür aber wohl Plugins.
lunar

@snafu: Ich halte es mit BlackJack: Tippfehler sind ein Problem des Werkzeugs, nicht der Typisierung. Für jeden besseren Editor gibt es mindestens Vervollständigung, oder besser noch automatische Überprüfung des Quelltexts (beispielsweise indem pylint bei jedem Speicherung ausgeführt wird).

Mir persönlich hilft statische Typisierung vor allem beim Erfassen der Typen, mit denen ich gerade arbeite. In Python muss ich oft Dokumentation lesen, um die fraglichen Typen und ihre Schnittstelle herauszufinden, in C# dagegen kennt die IDE dank statischer Typisierung alle Typen, und kann mir deren Schnittstelle per Autovervollständigung anbieten. Zudem zeigt die IDE mir Flüchtigkeitsfehler auf, beispielsweise wenn ich vergesse, Werte aus Ereignisargumenten zu extrahieren. Typen muss ich dennoch nicht deklarieren, denn C# hat Typinferenz. Bei Linq beispielsweise fühlt C# sich wie eine dynamische oder eine funktionale Sprache ala Haskell an (auch dank Funktionen höherer Ordnung und Lambdas).

Ich persönlich halte statische Typisierung prinzipiell für eine gute Sache, weil sie mir direkt und indirekt (über Werkzeuge, die statische Typinformationen nutzen) hilft. Sie muss halt gut umgesetzt sein, insbesondere muss die Sprache den deklarativen Overhead gering halten, und möglichst umfassende Typinferenz unterstützen. C# und Haskell sind gute Beispiele für vernünftig umgesetzte statische Typisierung (auch wenn Haskells Typisierung mir persönlich zu streng ist), Java und C++ dagegen zeigen viel mehr, wie statische Typisierung nicht aussehen sollte :)

Python nutze ich nicht, weil es dynamisch typisiert ist, sondern weil mir das Objektmodell und die Syntax der Sprache gefällt und es viele mächtige und bequeme Bibliotheken gibt.
Gregorrr
User
Beiträge: 22
Registriert: Montag 25. Juli 2011, 21:55

Ich finds immer lustig, wenn einer sagt: "Ich nehme die Sprache, weil sie besser ist, als einer andere..."

Die Sprache an sich ist *vollkommen* egal. Ein Beispiel: JavaScript.

JavaScript gibt es im Browser mittlerweile schon über 10 Jahre? Länger?

JavaScript wird von vielen Leuten als eine *bescheidene* Sprache beschrieben. Sie ist aufgrund von Prototypes (im Gegensatz zu class-basierten Sprachen) eher exotisch und "komisch". Von vielen Leuten wurde sie gemieden, weil bspw. das Fehlerfinden echt nicht einfach ist. Oft verhalten sich Programme nicht unbedingt so, wie sie sollten (siehe C) schmeißen keine Fehler, usw. Dazu fehlen grundlegende Sprachkonstrukte (class, default parameters, usw.), usw. Es gibt de-facto keine Parallelität (neu: HTML Web Worker).

Aber dennoch ist sie die meist verbreitestete, objekt-orientiert, und sie ist sogar funktional.

Seit HTML5 weiter von Google gepusht wird und HTML5 bspw. auch Metro-Style Apps programmieren lässt, zudem mobile Applikationen, Adobe Air Applikationen, usw.
Hinzu kommen solch riesen Anwendungen wie Google Docs, uvw.

Mittlerweile gibt es ein riesen Eco-System rund um JavaScript.
JavaScript ist richtig schnell geworden (V8 Virtuelle Maschine). Hat als VM einen kleinen Footprint. Viel kleiner als bspw. Java.
Man kann damit auch nicht-im-Browser einen Server (node.js) programmieren. UVM. Es gibt viele 3rd party-libraries, usw.

Was ich damit sagen will: Die Sprache an sich ist vollkommen egal, es geht um das drumherum, die 3rd-party-libraries, die Community, wo man die Sprache einsetzen kann, usw.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gregorrr hat geschrieben:JavaScript ist richtig schnell geworden (V8 Virtuelle Maschine). Hat als VM einen kleinen Footprint. Viel kleiner als bspw. Java.
Ok, ich will JavaScript auf dem Lego NXT sehen. Oder JavaScript auf SIM-Karten. Das sind Bereiche in denen Java auch läuft. Das der Footprint der Oracle Java Standard Edition riesengroß ist ist halt weil sie das für fette Server gedacht haben, wo halt hauptsächlich Java läuft. Da braucht man etwa nie Speicher an das OS zurückgeben, was soll es mit dem Speicher auch machen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Gregorrr: Dem möchte ich widersprechen. Die Sprache ist nicht egal. Es gibt verschiedene Typen von Menschen die mit verschiedenen Ansätzen unterschiedlich gut zurecht kommen und damit ist auch nicht jede Sprache für jeden geeignet, auch wenn sie theoretisch gleich mächtig, mit vielen guten Bibliotheken und einer unterstützenden Gemeinschaft ausgestattet sind.
Gregorrr
User
Beiträge: 22
Registriert: Montag 25. Juli 2011, 21:55

Leonidas hat geschrieben:
Gregorrr hat geschrieben:JavaScript ist richtig schnell geworden (V8 Virtuelle Maschine). Hat als VM einen kleinen Footprint. Viel kleiner als bspw. Java.
Ok, ich will JavaScript auf dem Lego NXT sehen. Oder JavaScript auf SIM-Karten. Das sind Bereiche in denen Java auch läuft. Das der Footprint der Oracle Java Standard Edition riesengroß ist ist halt weil sie das für fette Server gedacht haben, wo halt hauptsächlich Java läuft. Da braucht man etwa nie Speicher an das OS zurückgeben, was soll es mit dem Speicher auch machen?
Auch wenn das nichts mit meiner Argumentation zu tun hat:
Für die Cards API wird eine spezielle Cards VM verwendet, das hat *überhaupt* nichts mit der Java EE API zu tun, die ja bekanntlich noch mind. einen Server und ne DB-API anbietet, auch hat's weniger mit der SE zu tun, das ist ne andere VM... Zudem gibt es eine Spezifikation, die ECMAScript (= JavaScript) zum Programmieren benutzt werden kann.

Bzgl. Next, gibt es, bspw.:
Firmata
A Node library to interact with an Arduino running the firmata protocol: https://github.com/jgautier/firmata

A simple Lego NXT-Mindstorms robot communicating to a Chrome packaged app, with only Javascript and HTML code - NO native, NO plugins required:
https://github.com/rwldrn/johnny-five
Gregorrr
User
Beiträge: 22
Registriert: Montag 25. Juli 2011, 21:55

BlackJack hat geschrieben:@Gregorrr: Dem möchte ich widersprechen. Die Sprache ist nicht egal. Es gibt verschiedene Typen von Menschen die mit verschiedenen Ansätzen unterschiedlich gut zurecht kommen und damit ist auch nicht jede Sprache für jeden geeignet, auch wenn sie theoretisch gleich mächtig, mit vielen guten Bibliotheken und einer unterstützenden Gemeinschaft ausgestattet sind.
Was ist eigentlich sagen wollte: Man kann halt nicht unbedingt mit seiner Lieblingssprache im Browser frontend programmieren, z.B. Python als front-end im Browser? Java-Applets/Flash haben sich nicht durchgesetzt. Also bleibt nur JavaScript, genauso die HTML5 APIs. Wenn's einen run gibt auf front-end programmierung, dann wird halt JavaScript genommen (Dart ist ja noch nicht zu Ende von Google gepusht worde), egal wie schlecht JS an sich ist.

Genauso Systemprogrammierung in JavaScript/Python? Undenkbar.

Eine Programmiersprache ist nur ein Tool. Mehr nicht. Das richtige Tool zum richtigen Einsatz.
BlackJack

@Gregorrr: Es gibt schon Alternativen zu JavaScript für den Browser. Neben CoffeeScript, was gerade recht populär zu sein scheint, gibt es auch noch einige andere Compiler mit JavaScript als Zielsprache. Unter anderem auch Java und Python.

Systemprogrammierung in JavaScript oder Python würde ich auch nicht für undenkbar halten. Es gibt eine Python-Anbindung an FUSE und damit Dateisystemtreiber in Python. So etwas würde ich definitiv zu Systemprogrammierung zählen. Mit PyPy ist grundsätzlich auch eine Menge denkbar, bis hin zu einem Betriebssystem. Ansätze ein Betriebssystem in Python zu schreiben gab es auch schon mindestens zwei. Unununium und Cleese.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Gregorrr hat geschrieben:Genauso Systemprogrammierung in JavaScript/Python? Undenkbar.
Warum nicht? Microkernel genommen und eine VM als eierlegenden Wollmilchdienst rangeklemmt - los gehts. Für Kernel und VM baut man sich flux noch den entsprechenden Compiler... :twisted:
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Aber wenn wir jetzt mal von all den theoretischen Möglichkeiten wieder zurück auf den Boden der Tatsachen kehren, dann ist Python IMHO nichts, was man unbedingt mit Systemprogrammierung in Verbindung bringen würde. Ich find's immer wieder beeindruckend, wie hier manche Sachen, als ach so einfach umsetzbar mit Python eingebracht werden. Dass nichts unmöglich ist, mag sein - und BlackJack hat ja auch bereits die Fuse-Bindings als Beispiel für Systemprogrammierung eingebracht - aber ich wage zu behaupten, dass momentan niemand ernsthaft ein *Betriebssystem* in reinem Python umsetzen würde. Und ich glaube auch nicht, dass sich dies jemals ändern wird, weil es dafür einfach direktere Möglichkeiten gibt als über Python-Wrapper. Eine Sprache muss auch nicht krampfhaft alles können (wollen). Just my 0,02€...
BlackJack

@snafu: Was meinst Du mit Python-Wrapper? Ich denke mit PyPy könnte man über die RPython-Untermenge und „type hints” durchaus einen Kern schaffen auf dem man dann aufbauen kann. Als Forschungsprojekt sicher eine interessante Sache. Und die Mehrzahl der Betriebssysteme dürften Forschungsprojekte sein. Ist also durchaus realistisch. Zwei Anläufe gab es ja auch schon.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gregorrr hat geschrieben:Auch wenn das nichts mit meiner Argumentation zu tun hat:
Für die Cards API wird eine spezielle Cards VM verwendet, das hat *überhaupt* nichts mit der Java EE API zu tun, die ja bekanntlich noch mind. einen Server und ne DB-API anbietet, auch hat's weniger mit der SE zu tun, das ist ne andere VM... Zudem gibt es eine Spezifikation, die ECMAScript (= JavaScript) zum Programmieren benutzt werden kann.
Die Sprache ist halt die gleiche. Ich habe ja schon geschrieben dass es verschiedene VMs gibt.
Gregorrr hat geschrieben:Bzgl. Next, gibt es, bspw.:
Firmata
A Node library to interact with an Arduino running the firmata protocol: https://github.com/jgautier/firmata

A simple Lego NXT-Mindstorms robot communicating to a Chrome packaged app, with only Javascript and HTML code - NO native, NO plugins required:
https://github.com/rwldrn/johnny-five
Das läuft alles nicht auf dem NXT sondern ist quasi eine Fernbedienung. Sowas gibts auch in Python zuhauf. Lejos ist eine Java-VM die .class-Dateien direkt auf dem NXT ausführt. Keine besonders tolle VM, aber läuft ziemlich passabel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten