Thread Neugkeiten!? Modern OOP bald in Perl dank Ovids Cor
(9 answers)
Opened by GwenDragon at 2022-01-24 14:08
Da sprichst Du viele wichtige Punkte an!
Zu einigen kann ich auch etwas sagen: 2022-01-26T12:31:46 hlubenow Ja. Moose war für mich ein "Game Changer". Ich war da erst skeptisch, hab's dann mal für ein paar Komponenten ausprobiert... und festgestellt, dass bei denen die Weiterentwicklung viel einfacher ist. Das wichtigste ist, dass vieles, was man im "traditionellen" Perl-OO ausprogrammieren muss, bei Moose als Deklaration hingeschrieben wird, dadurch sieht das aufgeräumter aus. 2022-01-26T12:31:46 hlubenow Das findet ja seit geraumer Zeit statt! Object::Pad ist das Modul zum Ausprobieren. In den Diskussionen zu den Links, die GwenDragon geschickt hat, den Fehlermeldungen zu dem CPAN-Modul, im IRC unter #cor und gelegentlich auf reddit und anderen Foren sammelt der Autor Feedback ein. Die letzten großräumigen Änderungen kamen nach einem epischen Kommentar von Damian Conway im perl.org Blog, und inzwischen ist es als RFC bei den Perl 5 Porters eingereicht. 2022-01-26T12:31:46 hlubenow Es wird definitiv schneller als Moose und nicht langsamer als traditionelles OO. "Im Core" heißt ja: In C implementiert. Die anderen OO-Systeme werden noch lange am Leben bleiben, weil sie jede Menge Magie dazugebastelt haben, immer wohl wissend, dass das alles "nur" Hashes und Unterprogramme sind. Diese Magie wird anfangs bei Cor fehlen. 2022-01-26T12:31:46 hlubenow In Cor schreibt man einfach $beispiel, weil solche Objektattribute als field $beispiel; deklariert werden. 2022-01-26T12:31:46 hlubenow In Cor wäre das: Womit wir bei einem wesentlichen Unterschied zu traditionellem OO und Moose wären: Objektattribute können auch Arrays und Hashes sein. 2022-01-26T12:31:46 hlubenow Doch, das geht eben schon, wenn es "im Core" ist! Eine der großen Leistungen von Moose ist, dass es "Pure Perl" ist und auf prähistorischen Perl-Versionen läuft. Cor ist da anders und wird nur mit entsprechend aktueller Perl-Version laufen. 2022-01-26T12:31:46 hlubenow Diese neuen Schlüsselwörter sind es, die field etc. möglich machen. Innerhalb eines class Beispiel { ... } oder method beispiel { ... } gelten Syntax-Regeln, die in "Pure Perl" gar nicht zu schreiben sind! Das ist ein weiterer Unterschied zu Moose: Die "Schlüsselwörter" von Moose sind gar keine. Das sind Perl-Unterprogramme, die Moose exportiert. Deswegen kann has in einer Moose-Deklaration has beispiel => ( is => 'ro' ); auch nur das, was ein Perl Unterprogramm kann. Das wird recht geschickt mit den "fat commas" => versteckt, aber tatsächlich ist es ein Aufruf Moose::has ('beispiel','is','ro');. Ein Array als Attribut kann bei Moose deswegen nicht so geschrieben werden: has @beispiel würde die ersten Elemente des Array @beispiel an has übergeben und ziemlich zufällige Ergebnisse produzieren. 2022-01-26T12:31:46 hlubenow Eben - dieses Beispiel wäre in Cor auch noch kürzer: |