Ist Boo das bessere Python?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich weiß, ich bin ein Ketzer, wenn ich sowas behaupte. Aber ich schaue immer wieder mal über den Tellerrand von Python und bin jetzt über die .NET Sprache Boo gestolpert.

Die Sprache ist syntaktisch an Python angelehnt, ist aber im Unterschied dazu statisch typisiert. Ob man das als Vor- oder Nachteil sehen will muss denke ich jeder für sich selbst entscheiden. Wem die statische Typisierung nicht gefällt hat sogar die Wahl, "duck typing" zu nutzen.

Mit dem .Net Framework hat Boo eine kaum schlechtere Mitgift als Python. Einige Dinge wie Qt Bindings fehlen vielleicht, dafür gibt es sicher Dinge, die man in Python eventuell nicht findet.

Was Boo aber von Python abhebt ist die Geschwindigkeit. Hier gibt es signifikante Unterschiede zugunsten von Boo.

Boo ist irgendwie eine Mischung aus der einfachen und klaren Syntax von Python mit der Performance von .Net Programmen und der Wahlfreiheit zwischen statischer und dynamischer Typisierung.

Die einzigen Schwächen von Boo sind die etwas dünne Dokumentation und die kleine Community. Aber auch Python hat mal klein angefangen. Der eine oder andere mag die Microsoft-Abstammung von .Net noch als Nachteil empfinden, aber es gibt ja auch noch Mono
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

ich bleibe da lieber bei python, wenn ich dann .Net brauche nehme ich ironpython.

just my 0,02 €
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Naja, IronPython ist in Sachen Performance nicht besser als CPython. Je nachdem, welchen Benchmark man nimmt sogar schlechter.

Wäre das nicht der Fall würde ich keine Sekunde mehr mit Boo verschwenden. Der Nachteil, wenn man von Python umsteigen möchte ist klar. Man kann die Klassenbibliothek nicht mitnehmen.

Versteht mich nicht falsch. Python ist immer noch meine Lieblingssprache, aber ich habe einfach das Gefühl, dass sie meinen Anforderungen bald nicht mehr gerecht wird, was Geschwindigkeit angeht und ich habe keine Lust, irgendwelche Klimmzüge in C oder C++ zu machen, um das zu kompensieren.

Ich habe ein Programm in Python mal auf einem Atom330 laufen lassen. Das war schon recht mühsam und die Nutzung des zweiten Cores ist noch umständlicher. Hier kann Mono eindeutig punkten. Zumindest mit einer für CLR entwickelten Sprache.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Versteht mich nicht falsch. Python ist immer noch meine Lieblingssprache, aber ich habe einfach das Gefühl, dass sie meinen Anforderungen bald nicht mehr gerecht wird, was Geschwindigkeit angeht und ich habe keine Lust, irgendwelche Klimmzüge in C oder C++ zu machen, um das zu kompensieren.
Das kann ich durchaus verstehen, jedoch bevor ich zu Boo greifen würde tät ich mir zuerst Cython anschauen und wenn es damit nicht geht dann eher Vala und (gerade wenn du die Syntax so magst) Genie ansehen. Vala ist so eine Art Objective-C mit gobject-Basis und C#-Syntax, Genie ist im großen und ganzen eine einrückungsbasierte Syntax dafür.

Boo hat mich hingegen nie begeistern können. Wenn schon auf .NET, dann würde mich eher Nemerle oder Fantom oder gar F# interessieren.

Achja, genau: OCaml und Haskell haben ziemlich gute Compiler und OCaml unterstützt imperative Programmierung, vielleicht wär das nen Blick wert?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Leonidas hat geschrieben:Boo hat mich hingegen nie begeistern können. Wenn schon auf .NET, dann würde mich eher Nemerle oder Fantom oder gar F# interessieren.
Mh, entweder habe ich gerade Pech oder Nemerle ist gestorben. Zumindest komme ich nicht auf die Projektseite. Fantom ist noch exotischer als Boo.

Was stört dich denn an Boo? Vielleicht gibt es ja etwas, dass ich noch nicht kenne.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Fantom ist noch exotischer als Boo.
Fantom hat den Vorteil, dass es sowohl auf .NET als auch auf der JVM läuft. Eigentlich das was Scala hätte können sollen, bis sie .NET weggesägt haben.

Und Nemerle ist irgendwie down, stimmt. Da ist in letzter Zeit auch nicht mehr viel passiert. Na immerhin haben sie mit C# ne starke Konkurrenz.
burli hat geschrieben:Was stört dich denn an Boo? Vielleicht gibt es ja etwas, dass ich noch nicht kenne.
Oooh, nichts bestimmtes. Aber es hat jetzt auch keine Features wo ich gesagt hätte: "wow, wenn Python zu langsam ist dann nehm ich das".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Leonidas hat geschrieben:Aber es hat jetzt auch keine Features wo ich gesagt hätte: "wow, wenn Python zu langsam ist dann nehm ich das".
Es ist halt langweilig nichts neues zu lernen, irgendwie. Boo ist schön und gut, nicht schlecht und so... aber... es ist halt ... Python. Für mich zumindest.
lunar

@burli: Wenn man aus äußeren Zwängen heraus eine neue Sprache lernen muss, ist es naheliegend, sich eine möglichst bekannte zu wählen.

Wenn ein solcher Zwang allerdings fehlt, wäre mir die Zeit zu schade, denn schließlich ist Boo eine Sprache, die einem Python-Entwickler wenig Neues bietet. Dann lieber eine Sprache wählen, mit der man wirklich Neues lernen kann … und .NET ist ja nun nicht arm an Sprachen.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Das ist ja gerade das Argument FÜR Boo. Man muss sich sprachlich nicht übermäßig anstrengen.

Ich merke inzwischen aber, dass die beiden genannten Schwächen, nämlich dünne Dokumentation und kleine Community, ein ziemlicher Hemmschuh sind. Es nutzt wenig, wenn man sich die Vorteile bei einer Sprache durch haufenweise Nachteile erkauft. So wird z.B. das Boo Addin in Monodevelop schon seit Jahren nicht mehr gepflegt.

Da beißt man sich lieber durch den syntaktischen Unsinn von C#
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

burli hat geschrieben:Naja, IronPython ist in Sachen Performance nicht besser als CPython. Je nachdem, welchen Benchmark man nimmt sogar schlechter.
Dafür gibt es den GIL nicht.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@burli: Hast Du Dir D schon angeschaut. Ich habe schon einige Python-Scripts ohne große Mühe in D umgewandelt. Die Performance ist dann natürlich wesentlich besser als Python, kann allerdings nicht mit C/C++ mithalten.
MfG
HWK
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Bei int scheint bei 32 Bit Schluß zu sein.
Hatte kurz das Fibo Beispiel getestet. Als es über den 32 Bit Bereich hinaus ging hats gleich ne Overflow Exception gegeben.
In der Doku war auch nichts zu finden über den Wertebereich von int.
C# und selbst C unterstützen ja immerhin schon 64 Bit.
Bißchen dünn. Wäre für mich eigentlich schon ein Showstopper.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

@hendrikS: Du meinst Boo und nicht D, nicht wahr? D unterstützt nämlich auch zumindest 64 Bit und hat einen Typ namens cent für zukünftig 128 Bit reserviert.
MfG
HWK
philistion
User
Beiträge: 108
Registriert: Sonntag 7. Februar 2010, 14:16

Ich habe irgendwie eine große Ablehnung gegenüber dem ganzen .Net - Zeug! Warum etwas proprietäres von Microsoft benutzen, wenn es auch GPL-lizensierte Frameworks gibt, nein Python ist da schon der beste Kompromiss. Plattformunabhängig, freie Software und extrem flexibel!

Da wir gerade beim "Über-den-Tellerrand-schauen" sind, was haltet Ihr vom Monkey-Patching wie es bei Ruby betrieben wird, findet ihr man sollte auch in Python toleranter demgegenüber sein?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mir gefällt Boo nicht. Das ist mehr ein Bauchgefühl als wirklich zu begründen. Das Argument ist ähnlich wie bei Groovy. Im Prinzip ist Boo ein zweiter syntaktischer Skin für C# und einfach nur die Syntax tauschen ist lame. Dadurch, dass Boo effizient auf der CLR mitspielen will, hat es leider kaum eine andere Wahl.

Ein Ausdruck "o as object" sieht für mich nicht wie eine Variablendeklaration aus (warum auch immer man die braucht). Wenn schon, dann hätte ich gesagt, es muss eine initialisierung erfolgen, etwa "o as object = foo" doch auch dann wirkt das komisch. Python folgt IMHO eher der Tradition von Pascal, eine LL(1) parsebare Sprache zu sein, deren syntaktische Konstrukte durch Schlüsselwörter eingeleitet werden. Daher müsste das IMHO "var o: object = foo" sein. Das ":" statt "as" habe ich gewählt, weil auch in Funktionen bei Python 3 "def (o:object)" gilt. Das Boo sich da "falsch" entschieden hat, ist deren Problem, nicht meins. Außerdem würde ich "as" nur für Casts benutzen.

Ein "unless" (was IMHO nicht besser ist als "if not") und ein nachgestelltes "if" oder "unless" wie bei Perl oder Ruby braucht ein Python-Dialekt, in dem es möglichst nur einen Weg geben sollte, auch nicht. Womöglich gibt es auch noch ein nachgestelltes "while"?

Ein "--" und "++" sollte es (schrieb ich gerade in einem anderen Thread) nicht geben, wenn, dann bitte zwei eingebaute Funktionen "inc" und "dec", die gerade bei funktionalen Operationen praktisch sind. Was noch witzig ist, sie schreiben in ihrem Tutorial, man sollte "--" und "++" nicht benutzen. Herje, warum gibt es dann diese Operatoren?

Es wäre so überhaupt kein Problem, statt "def __add__()" ein "def +()" zu erlauben. Wenn schon was, ändern, dann diese ganzen "__" reduzieren. IMHO. Andererseits, was will man bei "__call__" machen? "def ()()"? Eher nicht.

Um auch mal was zu sagen, das mir gefällt: Ich finde Strings, in die man Code einbetten kann, damit man "'Hallo ${name}'" statt "'Hallo %s' % name" schreiben kann, sehr praktisch, auch wenn es einen das "$" kostet. Oder man muss solche Strings kennzeichnen, etwa "$'Hallo ${name}'". Hm.

Die Syntax für CLR-Properties (im Gegensatz zu Python-artigen Attributen und Properties) finde ich grenzwertig hässlich und hier gibt es eben das Problem, dass Boo für alles, was C# kann, auch Syntax haben muss, damit eine Interoperatibilität möglich ist. Aber man könnte eher mit Python-decorators arbeiten, etwa "@abstract class X" statt "abstract class X".

Die Syntax für "interface" neben "class" sei geschenkt, aber wenn eine Sprache hier man mehr können will, fände ich es viel spannender entweder traits statt interfaces zu unterstützen oder das Objektmodell von Objective-C oder das von Go. Das ist alles jeweils mächtiger. Natürlich zum Preis der fehlende Interoperatibilität.

Ich finde auch, dass Boo unnötig von Python abweicht, indem es "true", "false", "null" statt "True", "False" und "None" benutzt oder das "self" in Methoden implizit macht oder C#-style Attribute mit [] statt Decorators mit @ benutzt.

Schließlich finde ich dass die CLR mit ihren Methoden, die mit Großbuchstaben beginnen, irgendwie nicht richtig zu Python passen. Die CLR ist nun mal für C# entwickelt und das sieht man und jetzt eine neue Sprache zu benutzen, erfordert eigentlich auch, dafür eine eigene Funktionsbibliothek zu haben.

Ach ja, ich finde Fantom übrigens irgendwie interessanter als Boo, vielleicht weil die Webseiten besser aussehen und es schon mal im JavaPosse-Podcast vorkam, als es noch Fan hieß. Da aber Fantom eine {}-Syntax benutzt (um sich bei Java und C#-Entwicklern anzubiedern) ist es doch syntaktisch gar nicht vergleichbar.

Stefan
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

HWK hat geschrieben:@hendrikS: Du meinst Boo und nicht D, nicht wahr?
Ja, ich meinte Boo. Aber D wäre sicher auch mal einen Blick wert. Ich guck mir auch hin und wieder mal was anderes an.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

philistion hat geschrieben:Ich habe irgendwie eine große Ablehnung gegenüber dem ganzen .Net - Zeug! Warum etwas proprietäres von Microsoft benutzen, wenn es auch GPL-lizensierte Frameworks gibt, nein Python ist da schon der beste Kompromiss. Plattformunabhängig, freie Software und extrem flexibel!
Mono ist vollständig Offen. Von daher hab ich also keine Bedenken. Und selbst MS veröffentlicht inzwischen viel als OpenSource, wie z.B. ASP.NET MVC

@sma: der Witz bei Boo ist ja eigentlich, dass man "o as object" nicht unbedingt schreiben muss sondern der Compiler sich das selber raussucht.

i=0 //wird zu einem Integer
f=1.0 //wird zu einem Float
s="Hallo Du" //wird zu einem String

usw. Nur mit dem Unterschied, dass die Typen dann statisch sind. Eine Stärke der Sprache ist denke ich, dass man Variablen unabhängig voneinander statisch oder dynamisch typisieren kann.

Im Gegensatz z.B. zu C# kann man sich auch sowas sparen

MeineKlasse foo = new MeineKlasse()

sondern es reicht

foo = MeineKlasse()

Der Compiler weiß von alleine, dass foo vom Typ MeineKlasse sein muss. Auch der Rückgabewert einer Methode muss bei der Methodendefinition nicht angegeben werden. Das was hinter "return" steht ist gleichzeitig der Rückgabewert. Klar, das birgt auch Gefahren, wenn man z.B. mal return vergisst.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@burli Das ist keine besondere Stärke von boo, das erwarte ich von einer brauchbaren typisieren Sprache. Die beste Umsetzung davon hat imho Haskell.
Benutzeravatar
snafu
User
Beiträge: 6737
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das bessere Python ist es ganz sicher nicht. Vielleicht ganz nett anzuschauen, aber wenn ich sowas will, würde ich wohl auch eher zu D tendieren. Insgesamt hat sich für mich persönlich aber immer wieder gezeigt, dass ich mit Python am Besten klar komme. Mag sein, dass manche tollen Features aus anderen Sprachen fehlen, aber als bestes Gesamtpaket bleibt für mich Python bestehen.
philistion
User
Beiträge: 108
Registriert: Sonntag 7. Februar 2010, 14:16

burli hat geschrieben:Mono ist vollständig Offen. Von daher hab ich also keine Bedenken.
Keine Bedenken? Viele Teile des Monoprojekts sind wahrscheinlich von Patentrechtsansprüchen Microsofts betroffen, Novell hat lediglich mit Microsoft einen Pakt geschlossen, dass Novell-Kunden vor Patentrechtsklagen Microsofts geschützt sind.
Auch wenn Microsoft es nun hoch und heilig versprochen hat, warum sollte man sich auf so ein unsympathisches Projekt verlassen, wenn es doch genügend andere Möglichkeiten gibt, plattformunabhängige Software zu entwickeln.
Ich finde die Gedanken von Richard Stallman immer noch sehr zutreffend: http://www.fsf.org/news/dont-depend-on-mono
burli hat geschrieben:Und selbst MS veröffentlicht inzwischen viel als OpenSource, wie z.B. ASP.NET MVC
Ja sehr paradox, erst solche Aussagen:
http://www.theregister.co.uk/2001/06/02 ... _a_cancer/
dann ist Open Source wieder "interessant": http://www.silicon.de/mittelstand/0,390 ... eteran.htm

Wenn bei einer Firma so ein Verrückter der CEO ist, vertraue ich auch nicht auf Zusagen bezüglich des Nicht-Einklagens von Patentrechtsansprüchen.. so oft wie der die Meinung bezüglich Open Source wechselt, kann er genauso gut die Meinung zum Einklagen wechseln.
Antworten