Raku

**Raku** (aiemmin **Perl 6**) on ohjelmointikieli, joka lähtöisin Perl-kielestä. Kieltä kehitettiin aluksi nimellä Perl 6 ja vuonna 2019 nimeksi vaihdettiin Raku.

## Kehitys
Kehitystyö alkoi nimellä Perl 6 vuonna 2000, jolloin keskusteltiin tarvittavista muutoksista. Syynä nimen vaihdokseen on, että kielet ovat erilaiset vaikkakin niillä on yhteys, ja Perlillä yleensä tarkoitetaan aiempia Perlin versioita.

Rakun suunnittelussa on lähdetty Perl 5:stä, mutta kyse on koko kielen ja sen tulkin uudelleenkirjoittamisesta. Ajan mittaan Raku on kehittynyt erilliseksi kieleksi Perl 5:stä. Rakussa on monia muutoksia verrattuna Perl 5:een. Se ei ole taaksepäin yhteensopiva, mutta siellä tulee olemaan yhteensopivuustila. Perlin luoja Larry Wall on kutsunut Rakua yhteisön uudelleenkirjoittamaksi Perliksi, koska hänen suunnitelmansa perustuu 361:een yhteisön jäsenten tekemään ehdotukseen. Wall kirjoitti alkuperäisen suunnitelmansa pitkiin esseisiin, joita hän kutsuu nimellä Apocalypse. Esseiden numerointi vastaa lukuja kirjassa *[[Programming Perl]]* (”The Camel Book”). tärkeimpiin Apocalypse-esseisiin liittyy myös Damian Conwayn Exegesis-artikkeli, joka antaa ominaisuuksista käytännön esimerkkejä. (Nimet selittyvät sillä, että apokalypsi tarkoittaa ilmestystä tulevista asioista ja eksegeesi on selitys tekstistä.)

Rakua varten on kehitetty alustariippumatonta tavukoodia ajava virtuaalikone nimeltä **MoarVM,**, mutta joka on suunniteltu myös muiden kielten tarpeisiin. MoarVM perustuu aiemmpaan virtuaalikoneeseen nimeltään Parrot. Rakusta on olemassa toteutus Rakudo, joka tuottaa MoarVM-virtuaalikoneen tavukoodia, mutta sillä on myös tuki tuottaa tavukoodia Javan virtuaalikoneelle. Aiemmin oli olemassa myös Haskell-kielellä kirjoitettu Pugs sekä Perl 5:llä toteutettu `v6.pm`-moduuli.

## Suurimmat muutokset
Perl 5:n ja Rakun (aiemmin Perl 6) välillä on satoja, ellei tuhansia muutoksia, yleisenä ajatuksena on ollut: ”keep Perl 6 Perl” (”pidetään Perl 6 Perlinä”). Useat muutokset normalisoivat kieltä; tekevät oppimisen helpoksi ja tehdäkseen ”helppoja asioita helposti ja vaikeita mahdolliseksi”.

### Muuttujat

```perl
# Perl 5
my @array = (0, 1, 2, 3);
my $element = $array[1]; # $element equals 1
```


Mutta Rakussa se näyttää hieman erilaiselta

```raku
my @array = (0, 1, 2, 3);
my $element = @array[1]; # $element equals 1
```


Tämä helpottaa lukemista, koska yleensä `$array` on yleensä `@array`.

### Olio-ohjelmointi
Perl 5 tukee olio-ohjelmointia *siunauksen* (*blessing*) avulla. Minkä tahansa viittauksen voi siunata luokan olioksi:

```perl
# Perl 5
my $olio = bless $viittaus, 'Luokka';
```


Siunatulla oliolla voi sen jälkeen olla metodeita, joita käytetään nuolisyntaksilla (->):

```perl
# Perl 5
$olio->metodi();
```


Tämä saa Perlin löytämään metodi-nimisen aliohjelman ja kutsumaan sitä niin, että `$olio` on ensimmäinen parametri ja muut parametrit tulevat sen jälkeen.

”Helpot asiat helposti ja vaikeat mahdolliseksi” -hengessä Raku pitää vanhan siunausmallin, mutta ottaa käyttöön paljon selvemmän olio-ohjelmointimallin. Esimerkiksi jos halutaan tehdä luokka, joka sisältää sisällään pisteet x ja y:

```raku
class Piste is rw {
    has $.x;
    has $.y;
 }
```


Ja sitä käytetään näin:

```raku
my Piste $point .= new;
$point.x = 1.2;
$point.y = -3.7;
```


Raku käyttää siis monista muista kielistä, esimerkiksi C++:sta, Javasta, Pythonista ja Rubysta, tuttua pistenotaatiota olion sisältämien muuttujien tai metodien kutsumisessa.

## Lähteet

## Aiheesta muualla
* Rakudo Raku-kääntäjän kotisivut 
* Raku-kielen UKK 
* Rakun pakettilähde 
* Eräs Raku-opas 
* Lista Rakua käsittelevistä kirjoista