Hello world working with Actix

This commit is contained in:
Marko Korhonen 2020-03-24 14:24:20 +02:00
parent 141ed69449
commit 2c94fe0cab
No known key found for this signature in database
GPG key ID: 911B85FBC6003FE5
10 changed files with 1222 additions and 346 deletions

1
project/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
target/

1478
project/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -7,4 +7,6 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
yew = "0.11.0"
actix-web = "2.0.0"
actix-rt = "1.0.0"
serde = "1.0.104"

View file

@ -1,40 +0,0 @@
use yew::{html, Callback, ClickEvent, Component, ComponentLink, Html, ShouldRender};
pub struct App {
clicked: bool,
on_click: Callback<ClickEvent>,
}
pub enum Msg {
Click,
}
impl Component for App {
type Message = Msg;
type Properties = ();
fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {
App {
clicked: false,
on_click: link.callback(|_| Msg::Click),
}
}
fn update(&mut self, msg: Self::Message) -> ShouldRender {
match msg {
Msg::Click => {
self.clicked = true;
true // Indicate that the component should re-render
}
}
}
fn view(&self) -> Html {
let button_text = if self.clicked { "Clicked!" } else { "Click me!" };
html! {
<button onclick=&self.on_click>{ button_text }</button>
}
}
}

View file

@ -0,0 +1,8 @@
#[macro_use]
use actix_web::{get, post, HttpResponse};
#[get("/")]
pub async fn hello_world() -> HttpResponse {
let message = "Hello World!";
HttpResponse::Ok().json(message)
}

View file

@ -1,5 +1,12 @@
mod app;
mod controllers;
fn main() {
yew::start_app::<app::App>();
use crate::controllers::*;
use actix_web::{web, App, HttpServer};
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(move || App::new().service(hello_world))
.bind("127.0.0.1:8080")?
.run()
.await
}

View file

@ -7,4 +7,8 @@ Tämän takia myös web-ohjelmoinnissa käytettävissä teknologioissa on tapaht
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.
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.
Edellä mainittujen syiden takia lähivuosina on ilmaantunut useita vaihtoehtoja sekä palvelin- että asiakaspuolen ohjelmointikieliksi. Näistä yksi itseäni eniten kiinnostava on Rust. Tämän opinnäytetyön yhteydessä toteutettu projekti käyttää Rustia sekä palvelimella että asiakaspuolella.
\clearpage

View file

@ -0,0 +1,11 @@
\chapter{Kielet}
\section{Rust}
Rust on Mozillan 2010 julkaisema ohjelmointikieli. Se on hyvin suorituskykyinen järjestelmätason ohjelmointikieli, muistuttaen monilta osin C ja C++ kieliä. Rustin tarkoituksena on säilyttää näiden vanhojen kielien suorituskyky, mutta kuitenkin tarjoten samalla muun muassa vahvan tyypityksen, ratkaista C-kielille tyypilliset muistinhallintaongelmat ja taatun turvallisen rinnakkaisajon.
\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.
\clearpage

View file

@ -1,7 +0,0 @@
\chapter{Rust}
Rust on Mozillan 2010 julkaisema ohjelmointikieli. Se on hyvin suorituskykyinen järjestelmätason ohjelmointikieli, muistuttaen monilta osin C ja C++ kieliä. Rustin tarkoituksena on säilyttää näiden vanhojen kielien suorituskyky, mutta kuitenkin tarjoten samalla muun muassa vahvan tyypityksen, ratkaista C-kielille tyypilliset muistinhallintaongelmat ja taatun turvallisen rinnakkaisajon.
Lisäksi Rust-koodia voi koota WebAssemblyksi, mikä on omalta osaltaan kerännyt hyvin paljon kiinnostusta lähivuosina. Sitä on suunniteltu JavaScriptin seuraajaksi. Sen etuna huomattavasti parempi suorituskyky, koska se on etukäteen konekieleksi koottu kieli, eikä tulkittu niinkuin JavaScript on.
\clearpage

View file

@ -123,7 +123,7 @@
% Thesis content if you strictly follow the "Final Year Project guide". Of course, you
% can adapt to your specific needs (add more chapter, rename them, etc.).
\input{chapters/1introduction.tex}
\input{chapters/2rust.tex}
\input{chapters/2languages.tex}
%----------------------------------------------------------------------------------------
% BIBLIOGRAPHY REFERENCES