Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rust meets Mobile
Search
Keith Smiley
November 07, 2022
Programming
0
340
Rust meets Mobile
2022 BazelCon talk about using bazel to build rust libraries for iOS and Android
Keith Smiley
November 07, 2022
Tweet
Share
More Decks by Keith Smiley
See All by Keith Smiley
Lyft iOS tooling infrastructure summary 2022
smileykeith
0
360
Postmortem for switching Lyft's iOS app to Bazel
smileykeith
4
1.5k
Lyft iOS tooling infrastructure summary 2019
smileykeith
2
1.5k
An alternative approach to building & shipping Swift apps
smileykeith
5
1.3k
Embrace Immutability
smileykeith
0
9.5k
Tales of a rewrite
smileykeith
0
690
Swift Thinking
smileykeith
0
12k
Other Decks in Programming
See All in Programming
testcontainers のススメ
sgash708
1
120
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
260
CSC305 Lecture 26
javiergs
PRO
0
140
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
110
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
820
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
php-conference-japan-2024
tasuku43
0
320
Haze - Real time background blurring
chrisbanes
1
510
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
110
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
280
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
830
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
A Philosophy of Restraint
colly
203
16k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Facilitating Awesome Meetings
lara
50
6.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Become a Pro
speakerdeck
PRO
26
5k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
How to Ace a Technical Interview
jacobian
276
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
98
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Transcript
Rust meets Mobile Keith Smiley (he/him) Principal Engineer, Lyft @SmileyKeith
Sharing code on mobile
Why rust?
Rust + bazel
rust_library( name = "foo", srcs = ["foo.rs"], ) swift_library( name
= "main", srcs = ["main.swift"], deps = [":foo"], ) ios_application(...) Shouldn't this work?
--platforms=//:ios_arm64
bazel#7260
platform_mappings
flags: --cpu=arm64-v8a --crosstool_top=//external:android/crosstool //:android_aarch64 --cpu=ios_arm64 --apple_platform_type=ios //:ios_arm64 ...
Undefined symbols for architecture arm64: "___rust_alloc", referenced from: ... "___rust_alloc_error_handler",
referenced from: ... ... rules_rust#1238 / rust#73632
Who does the linking?
How do I use it?
#[no_mangle] pub extern fn print_something_from_rust() { println!("Ferris says hello!"); }
#[no_mangle] pub extern fn get_a_value_from_rust() -> i32 { 42 } extern void print_something_from_rust(void); extern int32_t get_a_value_from_rust(void);
#[no_mangle] pub extern "system" fn Java_com_example_androidapp_JniShim_getValue() -> i32 { get_a_value_from_rust()
} package com.example.androidapp; public class JniShim { public static native int getValue(); }
dtolnay/cxx rust-lang/rust-bindgen
Future areas of improvement
Developer Experience
Future rust mobile support
Was it worth it?
keith/bazel-rust-mobile-demo
- bazel#11454 - bazel#15041 - bazel#15248 - bazel#15462 - bazel#7260
- cargo-raze#484 - cargo-raze#489 - rules_rust#1186 - rules_rust#1238 - rules_rust#1259 - rules_rust#1271 - rules_rust#1276 - rules_rust#1290 - rules_rust#1304 - rules_rust#1362 - rules_rust#1372 - rules_rust#1401 - rules_rust#1462 - rules_rust#1541 - rules_rust#1545 - rules_rust#1546 - rules_rust#1573 - rules_rust#1576 - rust#73632
Thank you! twitter.com/SmileyKeith