odpowiedź końcowa
Łącząc czyszczenie kodu wyjaśnione w Twoja odpowiedź czyszczone sekcja poniżej ulepszeń Pepe Schwarza wymienionych w Oczekiwanie alert sekcja poniżej otrzymujemy:
use java::util::zip::CRC32:from<Java>;
my $crc = CRC32.new();
for 'Hello, Java'.encode('utf-8').list {
$crc.update($_);
}
say $crc.getValue();
Twoja odpowiedź oczyścić
use v6;
use java::util::zip::CRC32:from<Java>;
my $crc = CRC32.new();
for 'Hello, Java'.encode('utf-8').list { # Appended `.list`
$crc.'method/update/(I)V'($_);
}
say $crc.getValue();
Jedna ważna zmienił nieco jest dołączany .list
.
Fragment 'Hello, Java'.encode('utf-8')
zwraca obiekt, utf8
. Ten obiekt zwraca tylko jedną wartość (samą w sobie) do instrukcji for
. Tak więc for
iteruje tylko raz, przekazując obiekt do bloku kodu z linią .
Iteracja tylko raz mogłoby mieć sens, jeśli linia update
był .'method/update/([B)V'
, który odwzorowuje się do metody Java, która oczekuje bufor 8 bitów wskazówki, które jest w zasadzie to, co Perl 6 utf8
jest.Jednak wymagałoby to pewnego wsparcia kodu Perl 6 (prawdopodobnie w rdzennym kompilatorze) do marszałkowania (automagicznie konwertować) Perla 6 utf8
do Javy buf[]
i jeśli ten kod kiedykolwiek istniał/działał, to na pewno nie działa, gdy testuję z najnowsze Rakudo.
Ale jeśli dołącza się rozważny .list
, jak pokazano powyżej i zmienia blok kodu, aby dopasować, rzeczy się sprawdzają.
Po pierwsze, .list
powoduje, że instrukcja for
iteruje po serii liczb całkowitych.
Po drugie, tak jak ty, nazwałem wersję Integer arg metody Java (.'method/update/(I)V'
) zamiast oryginalnej wersji argentyńskiej, a kod następnie działał poprawnie. (Oznacza to, że binarna reprezentacja niepodpisanych 8 bitowych liczb wrócił z obiektu Perl 6 utf8
jest albo już dokładnie jaki sposób Java oczekuje lub jest automagicznie marshaled dla ciebie.)
Innym wymagana zmiana jest taka, że from<java>
musi być from<Java>
za komentarz poniżej - dzięki.
Oczekiwanie alert
Począwszy od stycznia 2015:
Jedynie używając backendu JVM dla Rakudo/NQP (tj z systemem czystego kodu P6 na JVM) nadal potrzebuje więcej twardnienie zanim zostanie oficjalnie zadeklarowany jako gotowy do użycia produkcyjnego. (Jest to dodatek do wszechstronnego hartowania, którego oczekuje się, że cały ekosystem P6 zostanie poddany w tym roku.) Mam nadzieję, że backend JVM pojawi się tam w 2015 r. - być może będzie to część początkowego oficjalnego uruchomienia Perla 6, gotowego na wykorzystanie produkcji w tym roku - ale to w dużej mierze zależy od popytu i jest więcej deweloperów, którzy go używają i dostarczają łatki.
Kodowanie kodu P6 kodu Java to dodatkowy projekt. W ostatnich kilku miesiącach Pepe Schwarz poczynił wielkie postępy w szybkim wchodzeniu na rynek, uczeniu się kodu i landing commits. Zaimplementował już oczywiście ładniejsze wywołania skrótów pokazane na początku tej odpowiedzi i uzupełnił o wiele więcej logiki łączącej typy P6 i Java i aktywnie zabiega o opinie i prośby o konkretne ulepszenia.
FWIW [niedawnej dyskusji java międzyoperacyjne na kanale IRC freenode # perl6] (http://irclog.perlgeek.de/perl6/2014-11-28#i_9733083). – raiph
Fwiw, w tegorocznym kalendarzu adwentowym jest [W kierunku czystszego współdziałania JVM] (http://perl6advent.wordpress.com/2014/12/12/day-12-towards-cleaner-jvm-interoperability/). – raiph