Demo Noch ein WSGI-Server?! • https://en.wikipedia.org/wiki/ Web_Server_Gateway_Interface: mehr als 30 Web Frameworks, die WSGI unterstützen, u.a. Bjoern, Gunicorn, uWSGI, Waitress, Werkzeug, ...
Demo Noch ein WSGI-Server?! • https://en.wikipedia.org/wiki/ Web_Server_Gateway_Interface: mehr als 30 Web Frameworks, die WSGI unterstützen, u.a. Bjoern, Gunicorn, uWSGI, Waitress, Werkzeug, ... • Hello Rust! • Erwartung: Rust ist in der Ausführung schneller und ezienter als Python • Erwartung: Rust ist sicherer als C (Fearless Concurrency) • Kontrolle über GIL
Demo Noch ein WSGI-Server?! • https://en.wikipedia.org/wiki/ Web_Server_Gateway_Interface: mehr als 30 Web Frameworks, die WSGI unterstützen, u.a. Bjoern, Gunicorn, uWSGI, Waitress, Werkzeug, ... • Hello Rust! • Erwartung: Rust ist in der Ausführung schneller und ezienter als Python • Erwartung: Rust ist sicherer als C (Fearless Concurrency) • Kontrolle über GIL • IO • in welchen Situationen bringt das Vorteile?
Demo Noch ein WSGI-Server?! • https://en.wikipedia.org/wiki/ Web_Server_Gateway_Interface: mehr als 30 Web Frameworks, die WSGI unterstützen, u.a. Bjoern, Gunicorn, uWSGI, Waitress, Werkzeug, ... • Hello Rust! • Erwartung: Rust ist in der Ausführung schneller und ezienter als Python • Erwartung: Rust ist sicherer als C (Fearless Concurrency) • Kontrolle über GIL • IO • in welchen Situationen bringt das Vorteile? • Plone 5.2 verwendet WSGI • Python 2 EOL
Demo Warum Rust? Quelle: Emmerich, P. et al (2019): The Case for Writing Network Drivers in High-Level Programming Languages. - https://www.net.in.tum.de/leadmin/bibtex/publications/papers/the- case-for-writing-network-drivers-in-high-level-languages.pdf.
Demo mio; Metal IO • fast, low-level I/O library for Rust focusing on non-blocking APIs and event notication • Bestandteil von Tokio (https://tokio.rs/), einer asynchronen Platform in Rust • je nach OS wird epoll, kqueue oder IOCP verwendet • aktuelle Version 0.7.0
Demo Pyruvate Rust Modul als Python Package • Ziele: • Source Tarball (sdist) und Binärpakete • pip und zc.buildout Support • mr.developer Support • PasteDeploy Entrypoint • py.test Extra
Demo Pyruvate Rust Modul als Python Package • Ziele: • Source Tarball (sdist) und Binärpakete • pip und zc.buildout Support • mr.developer Support • PasteDeploy Entrypoint • py.test Extra • Optionen: maturin (https://github.com/pyo3/maturin), setuptools-rust (https://github.com/PyO3/setuptools-rust)
Demo Pyruvate Rust Modul als Python Package • Ziele: • Source Tarball (sdist) und Binärpakete • pip und zc.buildout Support • mr.developer Support • PasteDeploy Entrypoint • py.test Extra • Optionen: maturin (https://github.com/pyo3/maturin), setuptools-rust (https://github.com/PyO3/setuptools-rust) • pyproject.toml -> build-backend muss angegeben werden • maturin: neuer, gedacht als Zero conguration replacement für setuptools-rust • maturin: keine setuptools Unterstützung • Entry-Points, Extras, zc.buildout derzeit nur mit setuptools-rust
Demo Rust Code Coverage messen - Tools • Tarpaulin https://github.com/xd009642/tarpaulin • läuft nicht mit test-threads=1 • bei mehreren Test-Threads Test Isolation Probleme (Sockets binden...) • Schwierigkeiten mit Gitlab CI bei mehreren Threads • Werte waren sehr optimistisch
Demo Rust Code Coverage messen - Tools • Tarpaulin https://github.com/xd009642/tarpaulin • läuft nicht mit test-threads=1 • bei mehreren Test-Threads Test Isolation Probleme (Sockets binden...) • Schwierigkeiten mit Gitlab CI bei mehreren Threads • Werte waren sehr optimistisch • Grcov https://github.com/mozilla/grcov • kommt nicht mit in-module Tests klar (misst Abdeckung des Testcodes mit)
Demo Rust Code Coverage messen - Tools • Tarpaulin https://github.com/xd009642/tarpaulin • läuft nicht mit test-threads=1 • bei mehreren Test-Threads Test Isolation Probleme (Sockets binden...) • Schwierigkeiten mit Gitlab CI bei mehreren Threads • Werte waren sehr optimistisch • Grcov https://github.com/mozilla/grcov • kommt nicht mit in-module Tests klar (misst Abdeckung des Testcodes mit) • Kcov https://github.com/SimonKagstrom/kcov
Demo Rust Code Coverage messen - Tools • Tarpaulin https://github.com/xd009642/tarpaulin • läuft nicht mit test-threads=1 • bei mehreren Test-Threads Test Isolation Probleme (Sockets binden...) • Schwierigkeiten mit Gitlab CI bei mehreren Threads • Werte waren sehr optimistisch • Grcov https://github.com/mozilla/grcov • kommt nicht mit in-module Tests klar (misst Abdeckung des Testcodes mit) • Kcov https://github.com/SimonKagstrom/kcov • https://codecov.io hat oziellen Rust-Support, https://coveralls.io nicht
Demo Rust Code Coverage messen - Tools • Tarpaulin https://github.com/xd009642/tarpaulin • läuft nicht mit test-threads=1 • bei mehreren Test-Threads Test Isolation Probleme (Sockets binden...) • Schwierigkeiten mit Gitlab CI bei mehreren Threads • Werte waren sehr optimistisch • Grcov https://github.com/mozilla/grcov • kommt nicht mit in-module Tests klar (misst Abdeckung des Testcodes mit) • Kcov https://github.com/SimonKagstrom/kcov • https://codecov.io hat oziellen Rust-Support, https://coveralls.io nicht • Informationsstand 5.3.2020
Demo Version 0.2 auf PyPI • nicht produktiv einsetzbar, Proof of Concept • 1:1 Threading für Worker • asynchroner Eventloop • sendle Support • Gitlab Pipeline