\chapter{Rustin soveltuvuus web-ohjelmointiin}
\section{Palvelinpuoli}
\label{sect:soveltuvuus:palvelinpuoli}
Palvelinpuolella en näe Rustin käyttämisessä mitään varjopuolia. Jos palvelin tulee osaksi isoja nettisivuja, missä on päivittäin tuhansia kävijöitä, Rustin suorituskyvystä ja  turvallisesta rinnakkaisajosta voi olla todella paljon hyötyä. Lisäksi jos palvelin tekee joitakin laskennallisesti raskaita tehtäviä, kuten vaikkapa 3D-mallinnusta tai koneoppimista, Rustin suorituskykyetu tulee entistäkin selvemmäksi.

Näen myös, että Rustin vahvasta tyypityksestä voi olla paljon hyötyä web-sovelluksen palvelinpuksen palvelinpuoltaa rakennettaessa. Kuten koodiesimerkissä \ref{code:rust:registeruser} nähtiin, vahvan tyypityksen tuomia etuja voi käyttää hyödykseen rajapintaa rakennettaessa. Lisäksi vahva tyypitys lisää ohjelman luotettavuutta vähentämällä ajonaikaisten virheiden riskiä. Vahvan tyypityksen voi kylläkin lisätä myös JavaScriptiin käyttämällä esimerkiksi TypeScriptiä \cite{typescript}.

Lisäksi Rust on suosittu kieli muuallakin kuin web-maailmassa. Tämän ansiosta kirjastojen saatavuus erityisesti palvelinpuolella ei ole ongelma. Rust-koodiin voi myös sisällyttää C- ja C++ -kirjastoja, jos jotakin projektissa tarvittavaa kirjastoa ei löydy Rust-pakettina.

\section{Asiakaspuoli}
Asiakaspuolella Rustin hyötyjä on vaikeampi oikeuttaa. Asiakaspuolen ohjelmat ovat useimmiten yksinkertaisia, koska niiden tehtävänä on usein vain piirtää käyttöliittymä ja välittää dataa palvelimen ja käyttöliittymän välillä. Näin ollen myös suorituskykyvaatimukset ovat todella pienet verrattuna palvelinpuoleen. Lisäksi asiakaspuoli palvelee aina vain yhtä asiakasta kerrallaan, verrattuna palvelinpuoleen, jossa usein yksi palvelin palvelee kaikkia asiakkaita. Tästä syystä myös Rustin rinnakkaisajo-ominaisuudet jäävät hyödyntämättä.

Vahvan tyypityksen hyötyjä ei voi kieltää, mutta kuten luvussa \ref{sect:soveltuvuus:palvelinpuoli} mainittiin, myös JavaScriptin saa tyypitettyä käyttämällä TypeScriptiä.

Kirjastojen saatavuus on ongelma asiakaspuolella. Kaikkien kirjastojen, jotka vuorovaikuttavat selaimen kanssa, pitää nimenomaan tukea WebAssemblya. WebAssembly-ekosysteemi on vielä melko alkutekijöissään, ja näitä kirjastoja on vielä hyvin vähän. Tämän projektin aikana tätä ei ilmennyt muuta kuin tyylimäärityksissä (luku \ref{sect:ulkonäkö}), mutta tämän projektin käyttöliittymä oli vielä todella yksinkertainen, eikä montaa kirjastoa tarvittukaan.

Jos lähdetään siitä oletuksesta, että suurin osa web-kehittäjistä osaa jo JavaScriptiä, en näiden syiden takia voi suositella kokonaan uuden kielen opettelemista asiakaspuolta varten. Mutta jos on esimerkiksi kehittäjä, jolla ei ole mitään taustaa web-kehityksessä, mutta osaa jo valmiiksi Rustia, tai muita matalemman tason kieliä, Rust voi olla mielekäs vaihtoehto. Tässäkin tapauksessa edellytyksenä on, että kaikki kehittäjän tarvitsemat kirjastot ovat saatavilla, tai kehittäjällä on aikaa ja halua toteuttaa puuttuvien kirjastojen toiminallisuus itse.

Rust-koodista käännettyjä WebAssembly-tiedostoja voi myös sisällyttää JavaScript-ohjelmiin \cite{javascript-wa}. Jos asiakaspuolen ohjelmassa on osia, jotka vaativat suoritustehoa ja/tai rinnakkaisajo-ominaisuuksia, voi olla hyvä vaihtoehto kirjoittaa vain nämä osat Rustilla ja sisällyttää ne JavaScript-koodiin.
