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
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rust meets Mobile
2022 BazelCon talk about using bazel to build rust libraries for iOS and Android
Keith Smiley
November 07, 2022
More Decks by Keith Smiley
See All by Keith Smiley
Lyft iOS tooling infrastructure summary 2022
smileykeith
0
490
Postmortem for switching Lyft's iOS app to Bazel
smileykeith
4
1.7k
Lyft iOS tooling infrastructure summary 2019
smileykeith
2
1.6k
An alternative approach to building & shipping Swift apps
smileykeith
5
1.4k
Embrace Immutability
smileykeith
0
9.6k
Tales of a rewrite
smileykeith
0
800
Swift Thinking
smileykeith
0
12k
Other Decks in Programming
See All in Programming
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.6k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.3k
FDEが実現するAI駆動経営の現在地
gonta
2
290
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
VibeCodingからAgenticWorkflowへ
starfish719
0
620
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
5
1.8k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
220
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
410
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
200
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
530
Go 1.27 における memory allocation の高速化
andpad
0
230
React本体のコードリーディング
high_g_engineer
1
150
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
23k
How to build a perfect <img>
jonoalderson
1
5.9k
The Curse of the Amulet
leimatthew05
2
14k
Designing for Performance
lara
611
70k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The SEO Collaboration Effect
kristinabergwall1
1
520
Designing Powerful Visuals for Engaging Learning
tmiket
1
490
Making Projects Easy
brettharned
120
6.7k
The SEO identity crisis: Don't let AI make you average
varn
0
530
エンジニアに許された特別な時間の終わり
watany
108
250k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
We Have a Design System, Now What?
morganepeng
55
8.3k
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