Continuing writing report
This commit is contained in:
parent
bbaf01dafe
commit
95e8347efc
19 changed files with 175 additions and 222 deletions
|
@ -5,19 +5,27 @@
|
|||
|
||||
\newacronym{html}{HTML}{HyperText Markup Language}
|
||||
\newacronym{php}{PHP}{Hypertext Preprocessor}
|
||||
\newacronym{orm}{ORM}{Object-relational mapping}
|
||||
\newacronym{json}{JSON}{JavaScript Object Notation}
|
||||
\newacronym{jwt}{JWT}{JSON Web Token}
|
||||
|
||||
% Glossary entries
|
||||
|
||||
\newglossaryentry{asiakaspuoli}{
|
||||
name={asiakaspuoli},
|
||||
\newglossaryentry{Asiakaspuoli}{
|
||||
name={Asiakaspuoli},
|
||||
plural={asiakaspuolen},
|
||||
description={Nettiselaimessa pyörivät ohjelmointikielet, esimerkiksi JavaScript}
|
||||
}
|
||||
|
||||
\newglossaryentry{palvelinpuoli}{
|
||||
name={palvelinpuoli},
|
||||
\newglossaryentry{Palvelinpuoli}{
|
||||
name={Palvelinpuoli},
|
||||
plural={palvelinpuolen},
|
||||
description={Palvelimella pyörivät ohjelmointikielet, esimerkiksi PHP}
|
||||
}
|
||||
|
||||
\newglossaryentry{ORM}{
|
||||
name={ORM},
|
||||
description={Ohjelman objektien kartoittamista relaatiotietokannan tauluihin ja tietokannasta takaisin ohjelmaan}
|
||||
}
|
||||
|
||||
\glsaddall
|
|
@ -30,7 +30,7 @@
|
|||
\multicolumn{2}{|p{15cm}|}{\vspace{-22pt}
|
||||
Tämän opinnäytetyön tavoitteena on selvittää Rust-ohjelmointikielen soveltuvuutta web-ohjelmointiin.\newline
|
||||
|
||||
Opinnäytetyön yhteydessä tehtiin projekti, missä frontend ja backend toteutetaan molemmat Rustilla. Tämän pohjalta arvioitiin kielen soveltuvuutta web-ojelmointiin.
|
||||
Opinnäytetyön yhteydessä tehtiin projekti, missä palvelin- ja asiakaspuoli toteutettiin molemmat Rustilla. Tämän pohjalta arvioitiin kielen soveltuvuutta web-ojelmointiin.
|
||||
} \\[14cm] \hline
|
||||
Avainsanat & \avainsanat
|
||||
\\ \hline
|
|
@ -1,13 +0,0 @@
|
|||
% Acknowledgement
|
||||
% If relevant give a special thanks to the people who supported you during your thesis
|
||||
% writing.
|
||||
|
||||
\pagestyle{empty}
|
||||
\chapter*{Acknowledgement}
|
||||
|
||||
Thanks to Panu Leppäniemi, Patrik Luoto and Patrick Ausderau for the \LaTeX{} ~thesis template.
|
||||
|
||||
Thanks to my cat who jump on my keyboard while the text was not saved :D
|
||||
|
||||
\clearpage
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
% License of your thesis
|
||||
% If you wish to explain what it means. When you publish your thesis in https://theseus.fi
|
||||
% you will be able to choose between some Creative Commons licenses
|
||||
% https://creativecommons.org
|
||||
% Adapt this example text to your taste.
|
||||
% This would also be the right place to explain the license you choose for the code you
|
||||
% produced for your thesis.
|
||||
|
||||
\pagestyle{empty}
|
||||
\chapter*{Licenses}
|
||||
\vspace{-20pt}
|
||||
\begin{center}
|
||||
\includegraphics[width=80pt]{cc_by_sa}
|
||||
\end{center}\vspace{-32pt}
|
||||
This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. That means:\\
|
||||
\textbf{You are free to:}
|
||||
\vspace{-17pt} \begin{itemize}
|
||||
\item Share \textemdash copy and redistribute the material in any medium or format
|
||||
\item Adapt \textemdash remix, transform, and build upon the material
|
||||
\end{itemize}\vspace{-17pt}
|
||||
|
||||
\textbf{Under the following terms:}
|
||||
\vspace{-17pt} \begin{itemize}
|
||||
\item Attribution \textemdash You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
|
||||
\item ShareAlike \textemdash If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
|
||||
\item No additional restrictions \textemdash You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
|
||||
\item Any of the above conditions can be waived if you get my permission
|
||||
\end{itemize}%\vspace{-17pt}
|
||||
|
||||
|
||||
To view a copy of this license, visit \url{http://creativecommons.org/licenses/by-sa/4.0/}.
|
||||
|
||||
I decided to publish my thesis work under the Creative Commons Attribution-ShareAlike 4.0 International License because I strongly believe that you as reader deserve the freedom to copy, share and modify this work and if you do modify it, it is fair to give these same permissions to the others. A copy in electronic form of this work can be found in \url{https://some.place} with the \LaTeX{} source.
|
||||
|
||||
\clearpage
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Tämän takia myös web-ohjelmoinnissa käytettävissä teknologioissa on tapahtunut paljon muutoksia. Jotta nettisivuista saatiin pelkkien HTML-dokumenttien sijasta ohjelmia, 90-luvun puolivälissä julkaistiin PHP (palvelinpuolen kieli) ja JavaScript (asiakaspuolen kieli). Tänä päivänä näistä kahdesta JavaScript on ehdottomasti suositumpi, minkä takia keskityn tässä opinnäytetyössä sen vertailuun Rustin kanssa.
|
||||
|
||||
Vaikka JavaScript onkin suosittu, siinä on paljon ongelmia\cite{medium:javascript}. Suurimmat ongelmat liittyvät kielen heikkoon tyypitykseen, mikä saattaa aiheuttaa ongelmia jotka ilmenevät vasta ajon aikana ja vain tietyissä rajatapauksissa. Tämän takia koodin testaamiseen ja laadun ylläpitämiseen pitää panostaa enemmän. Toinen iso ongelma on se, että JavaScript ei ole tarkka koodin tyylistä. Tämä hankaloittaa projekteissa kommunikointia ja työtoverien koodin lukemista.
|
||||
Vaikka JavaScript onkin suosittu, siinä on paljon ongelmia\cite{medium:javascript}. Suurimmat ongelmat liittyvät kielen heikkoon tyypitykseen, mikä saattaa aiheuttaa ongelmia jotka ilmenevät vasta ajon aikana ja vain tietyissä rajatapauksissa. Tämän takia koodin testaamiseen ja laadun ylläpitämiseen pitää panostaa enemmän. Toinen iso ongelma on se, että JavaScript ei ole tarkka koodin tyylistä. Jo pelkästään funktion kirjoittamiseen on useita eri tyylejä. Tämä hankaloittaa projekteissa kommunikointia ja työtoverien koodin lukemista.
|
||||
|
||||
Koska JavaScript on tulkittava kieli, se tulee aina häviämään suorituskyvyssä koottaville kielille. Tätä eroa on osittain kavennettu ajonaikaisen kääntämisen optimoinneilla.
|
||||
|
|
@ -6,6 +6,6 @@ Rust on Mozillan 2010 julkaisema ohjelmointikieli. Se on hyvin suorituskykyinen
|
|||
\section{WebAssembly}
|
||||
WebAssembly on kehitteillä oleva asiakaspuolen ohjelmointikieli. Sitä on suunniteltu JavaScriptin seuraajaksi ja sen suurinpana etuna JavaScriptiin verrattuna on huomattavasti matalemman tason esitysmuoto, minkä ansiosta se on suorituskykyisempi.
|
||||
|
||||
Kehittäjän ei ole tarkoitus kirjoittaa WebAssemblya suoraan, vaan monien olemassa olevien ohjelmointikielien kääntäjät, esimerkiksi C++ ja Rust tukevat koodin kokoamista WebAssemblyksi.
|
||||
Kehittäjän ei ole tarkoitus kirjoittaa WebAssemblya suoraan, vaan käyttää työkaluja, joilla olemassa olevia ohjelmointikieliä voi koota WebAssemblyksi. Rust on tästä hyvä esimerkki, sillä WebAssembly on yksi sen kokoojan natiiveista "targeteista", samalla tavalla kuin vaikka x86-prosessorit.
|
||||
|
||||
\clearpage
|
47
tex/chapters/3-projekti.tex
Normal file
47
tex/chapters/3-projekti.tex
Normal file
|
@ -0,0 +1,47 @@
|
|||
\chapter{Projekti}
|
||||
Tein opinnäytetyön yhteydessä fullstack-projektin, missä sekä palvelin- että asiakaspuolen ohjelmointi tehtiin Rustilla. Tarkoituksena ei ollut saada aikaiseksi mitään todella monimutkaista ohjelmaa, vaan puhtaasti arvioida Rustin soveltuvuutta web-ohjelmointiin.
|
||||
|
||||
\section{Palvelinpuoli}
|
||||
Palvelinpuolen rungoksi valikoitui Actix web. Se on käytännössä vastine JavaScript-maailman Express.js:lle, eli se hoitaa HTTP-palvelimen työtä ja reitittää GET ja POST pyynnöt ohjelman oikeille funktioille.
|
||||
|
||||
Actix web on puolestaan rakennettu hyödyntämällä Actix frameworkiä, mikä on rakennettu löyhästi actor-mallin pohjalta. Actor-malli\cite{wiki:actor} on Carl Hewittin vuonna 1973 luoma matemaattinen ja tietotekninen malli rinnakkaisajosta. Tämän ansiosta Actix web on hyvin suorituskykyinen ja helposti skaalautuva ratkaisu rajapintoja rakennettaessa.
|
||||
|
||||
Actix web on myös hyvin integroitu Rustin vahvaan tyypitykseen. Erityisen vaikuttavaa oli se, että esimerkiksi tietyn rajapinnan päätepisteen POST-pyyntöön pystyy määrittämään parametriksi tietyn rakenteen (struct). Esimerkiksi näin:
|
||||
\begin{minted}{rust}
|
||||
struct RegisterUser {
|
||||
username: String,
|
||||
password: String,
|
||||
admin: bool,
|
||||
password_confirmation: String,
|
||||
}
|
||||
|
||||
#[post("/auth/register")]
|
||||
fn register(
|
||||
new_user: actix_web::web::Json<RegisterUser>,
|
||||
) -> Result<HttpResponse, HttpResponse> {
|
||||
register(new_user);
|
||||
}
|
||||
\end{minted}
|
||||
|
||||
Tällöin varmistutaan automaattisesti siitä, että kun asiakkaan POST-pyyntö saapuu tähän funktioon, kaikki data on oikeanlaista tyyppiä ja kaikki tarvittava data on pyynnössä mukana. Verrattuna JavaScriptiin, jossa ei ole tyyppejä, kaikki vastaanotettava data pitäisi tarkastaa käsin. Jatkaakseni edellistä esimerkkiä, otetaan seuraava JSON-merkkijono:
|
||||
\begin{minted}{JSON}
|
||||
{
|
||||
"username": "TestUser",
|
||||
"password": "verysecurepassword",
|
||||
"admin": 3,
|
||||
}
|
||||
\end{minted}
|
||||
|
||||
Koska tässä JSON-objektissa ''admin'' ei ole tyyppiä boolean, Actix vastaa ''400 Bad Request''.
|
||||
|
||||
Actix webin modulaarisuus mahdollisti myös helposti tarvittavien väliohjelmistojen sisällyttämisen ohjelman toimintaan. Actix identity -paketista löytyi tarvittavat palikat itse kirjoittamani sisäänkirjautumistoiminnallisuuden lisäämisen suojattuihin reitteihin. Siinä käytin JSON Web Tokeneita, jotka lähetettiin onnistumisen kirjautumisen jälkeen asiakkaalle, ja jotka asiakas sitten lähettää serverille suojattuja reittejä käytettäessä.
|
||||
|
||||
Tietokannaksi valikoitui itselleni tuttu MySQL. Relaatiotietokannan sai helposti yhdistettyä Rust-koodiini Diesel ORM:llä. Diesel on tähän mennessä käyttämistäni ORM-kirjastoista selkeästi mukavin käyttää.
|
||||
|
||||
Käytännöllisimmät ominaisuudet kehittäjän näkökulmasta olivat Dieselin mukana tuleva komentorivikäyttöliittymä ja migraatiot. Jokaiselle taululle luodaan uusi migraatio, esimerkiksi \code{diesel migration generate users}, jonka jälkeen dieselin luomaan hakemistoon kirjoitetaan up.sql ja down.sql tiedostot, eli ohjeet siitä, miten tämä taulu luodaan ja poistetaan. Taulu viedään tietokantaan komennolla \code{diesel migration run} ja taulun voi poistaa ja luoda uudelleen komennolla \code{diesel migration redo}. Tämä mahdollistaa myös samalla sen, että versiohallintaan voi tallentaa useita versioita samasta taulusta ja palata helposti takaisin vanhempaan versioon jos uudemman kanssa ilmenee ongelmia.
|
||||
|
||||
Edellä mainitut työkalut helpottivat tietokannan kehitystä huomattavasti. Usein varsinkin projektin alkuvaiheilla tietokanta muuttuu jatkuvasti ja usein tulee tarve poistaa ja luoda tietokanta uudelleen. Monet pitävät kehittäjät juurikin tällaista Dieselin up.sql kaltaista tiedostoa versiohallinnassa ja tarpeen mukaan poistavat tietokannan käsin ja liittävät komennon tiedostosta tietokannan komentorivikäyttöliittymään.
|
||||
|
||||
\section{Asiakaspuoli}
|
||||
|
||||
\clearpage
|
|
@ -1,7 +0,0 @@
|
|||
% Conclusions
|
||||
|
||||
\chapter{Conclusions}
|
||||
|
||||
Check Final Year Project Guide for the content of Conclusions chapter.
|
||||
|
||||
\clearpage %force the next chapter to start on a new page. Keep that as the last line of your chapter!
|
|
@ -1,7 +0,0 @@
|
|||
% Material and Methods
|
||||
|
||||
\chapter{Material and Methods}
|
||||
|
||||
Check Final Year Project Guide for the content of Material and Methods chapter.
|
||||
|
||||
\clearpage %force the next chapter to start on a new page. Keep that as the last line of your chapter!
|
|
@ -1,7 +0,0 @@
|
|||
% Project Specifications
|
||||
|
||||
\chapter{Project Specifications}
|
||||
|
||||
Check Final Year Project Guide for the content of Project Specifications chapter.
|
||||
|
||||
\clearpage %force the next chapter to start on a new page. Keep that as the last line of your chapter!
|
|
@ -1,7 +0,0 @@
|
|||
% Proposed solution
|
||||
|
||||
\chapter{Proposed solution}
|
||||
|
||||
Check Final Year Project Guide for the content of Proposed solution chapter.
|
||||
|
||||
\clearpage %force the next chapter to start on a new page. Keep that as the last line of your chapter!
|
|
@ -1,7 +0,0 @@
|
|||
% Theoretical background
|
||||
|
||||
\chapter{Theoretical background}
|
||||
|
||||
Check Final Year Project Guide for the content of Theoretical background chapter.
|
||||
|
||||
\clearpage %force the next chapter to start on a new page. Keep that as the last line of your chapter!
|
Loading…
Add table
Add a link
Reference in a new issue