[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.
kantaki
User
Beiträge: 17
Registriert: Montag 2. Juli 2012, 12:26

Hallo,

Ich habe vor einigen Tagen eine Diskussion über dynamische Sprachen in einem "c++" Forum gestartet. Die Diskussion viel leider nicht gerade hilfreich aus.
Trotzdem würde ich gerne ein paar Argumente von Python Nutzern hören

Diskussion

http://www.c-plusplus.de/forum/305462
( Bis Seite 3 )
BlackJack

@kantaki: Es werden die (Typ)fehler erwähnt, die durch die dynamische Natur dem Compiler nicht auffallen — da fehlt mir in der Diskussion das Thema Unit-Tests, die man ja eigentlich auch in statisch typisierten Sprachen bei jedem grösseren Projekt schreibt. Damit fallen dann sowohl Typ- als auch Logikfehler auch in dynamisch typisierten Sprachen sehr schnell auf.

Das ``if``-Beispiel von cooky451 (Seite 4, unten) könnte man in Python zum Beispiel auch so formulieren:

Code: Alles auswählen

headers = [
    header.blubb1, header.blubb2, header.blubb3, header.blubb4, header.blubb5
]
if all(file.read_binary(h) == sizeof(h) for h in headers):
    ...
Und statt der '\' an Zeilenenden kann man auch zusätzliche Klammern um den Ausruck setzen, den man über mehrere Zeilen verteilen möchte. Sofern nicht sowieso schon welche vorhanden sind.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Hab ehrlich gesagt keine Lust, dort zu antworten, da die Diskussion z.T. unsachlich geführt wird. Die Vor- und Nachteile der statischen versus der dynamischen Typisierung sind hinlänglich bekannt. Auch die 1001. Diskussion darüber wird da kein neues Licht darauf werfen. Entscheidend für ein Projekt XY sind eher die Programmiererbasis und das Projektziel/-anforderungen und die richtige Auslotung.

Was mir persönlich an Python sehr gefällt, ist zum einen die simple Syntax und desweiteren das batteries included Konzept. Gerade letzteres macht Python eher zu einem Programmierframework denn einfach nur zu einer weiteren Skriptsprache. Und beides zusammen genommen spart Entwicklungszeit und ist für agile Entwicklung oder RAD gut geeignet.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@BlackJack: Oder so:

Code: Alles auswählen

headers = (getattr(header, 'blubb%d' % n) for n in xrange(1, 6))
if all(file.read_binary(h) == sizeof(h) for h in headers):
    ...
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jerch hat geschrieben:Hab ehrlich gesagt keine Lust, dort zu antworten, da die Diskussion z.T. unsachlich geführt wird.
Und jede menge FUD und faktisch falsche Aussagen. Halleluja.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

In dem Thread wird ja eher darauf eingegangen, was die Leute für ihre 1Mio-Zeilen-Firmenprojekte verwenden (übertrieben gesagt). Dir geht es aber scheinbar um Webentwicklung und da ist Python durchaus geeignet. An 1-2 Stellen in dem Thread scheint das ja auch durch.

Ich würd sagen (wie immer bei solchen Fragen), guck einfach mal, wie du mit Python klarkommst. Falls du statische Typisierung zu sehr vermissen solltest, dann kannst du deine Pläne ja immer noch über Board werfen.
kantaki
User
Beiträge: 17
Registriert: Montag 2. Juli 2012, 12:26

Ich bin nur gerade etwas lesefaul da ich in den letzten Monaten viel zu viele Bücher gelesen habe. Deswegen bin ich einfach mal in Python "eingetaucht" mit hilfe der offiziellen Doku. Und ich muss sagen bis jetzt finde ich die Sprache sehr sehr schön.

Ich denke ich werde einfach mal drauf los entwickeln, -> python Django Google App Engine. Wahrscheinlich werde ich mir aber in nächster Zeit noch ein indepth Buch für Python kaufen. Ich bin zwar relativ fit in OOP aber Python bzw dynmische Sprachen sind auch ein wenig anders.

Ich äugle momentan auf " Python in a Nutshell, Second Edition (In a Nutshell) " da mir die C# Variante sehr gut gefallen hat.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

kantaki hat geschrieben:Und ich muss sagen bis jetzt finde ich die Sprache sehr sehr schön.
Ich habe schon in einigen Programmiersprachen programmiert (Cobol, PL/1, RPG, Fortran, C, C++, Pascal, PHP, Java, ...), aber Python ist meine wirklich große Liebe. :D
Malachite
User
Beiträge: 34
Registriert: Sonntag 24. Juni 2012, 13:43
Wohnort: Berlin

Meine auch. Zwar vermisse ich einige Sachen an Python (automatisches Exception Handling, Type Hints), aber eigentlich ist diese Sprache quasi perfekt.
Gregorrr
User
Beiträge: 22
Registriert: Montag 25. Juli 2011, 21:55

Schmeiß noch einen Haskeller rein, dann beginnt erst der Spaß ;)

Python ist natürlich wesentlich produktiver, in gewissen Bereichen.

Nicht zu verachten ist auch, wenn jemand extremst viel und gut C kann, ist er i.d.R. produktiver, als jemand der erst mit Python beginnen würde.
Deren Argumentationsstrang richtet sich genau nach diesem Argument. Das ist aber natürlich zu kurz gegriffen. Wenn, dann sollte man gleiche Levels vergleichen und da ist Python in einigen Bereichen wesentlich produktiver, z.B. NLP.

Es gibt aber natürlich für gewissen Bereiche noch produktiviere Sprachen, bswp. Matlab/Octave/R für mathematische Sachen und Statistik-Programmierung.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Gregorrr hat geschrieben: Nicht zu verachten ist auch, wenn jemand extremst viel und gut C kann, ist er i.d.R. produktiver, als jemand der erst mit Python beginnen würde.
Deren Argumentationsstrang richtet sich genau nach diesem Argument. Das ist aber natürlich zu kurz gegriffen. Wenn, dann sollte man gleiche Levels vergleichen und da ist Python in einigen Bereichen wesentlich produktiver, z.B. NLP.
NLP?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
BlackJack

@Gregorrr: Für den Mathekram gibt es doch `numpy`, `scipy`, `matplotlib` & Co.
lunar

@Gregorrr: C ist weitaus weniger ausdrucksstark und abstrakt als Python, mithin ist es sehr gewagt, aus diesen beiden Sprachen einen in der Typisierung begründeten Unterschied in der Produktivität zu konstruieren. So ziemlich jeder Sprache außer Brainfuck, Befunge und PHP ist produktiver als C, gleich welches Typsystem sie besitzt.

Sobald sich Sprachen auf annähernd gleichem Abstraktionsniveau bewegen, beispielsweise Python und C#, oder OCaml und Haskell, ist es unmöglich, die Produktivität dieser Sprachen gegeneinander abzuwägen, zumal bei komplexe Programme ohnehin wesentlich stärker von der Qualität verschiedener Bibliotheken abhängen als von der Sprache selbst.

Ohnehin geht es in dieser Diskussion um Typisierung und nicht um die wie auch immer geartete Produktivität von Sprachen.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kebap hat geschrieben:NLP?
Natural Language Processing
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Kebap hat geschrieben:
Gregorrr hat geschrieben:NLP.
NLP?
Vermutlich Natural Language Processing. Vermutlich nicht Neuro-Linguistisches Programmieren. *brrr*
In specifications, Murphy's Law supersedes Ohm's.
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: 6744
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: 6744
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... ;)
Antworten