SlideShare a Scribd company logo
1 of 40
Download to read offline
Statically Compiling
Ruby with LLVM
Laurent Sansonetti
HipByte
About me
•

Laurent Sansonetti
•

Programming Language Nerd

•

Founder of HipByte

•

From Belgium (yay!)
MacRuby
MacRuby
•

2007: Project created (as a hobby)
•

Replacement for RubyCocoa

•

Fork of CRuby 1.9

•

2008: Had a beer with Chris Lattner

•

2009: Replaced bytecode VM by LLVM JIT

•

2011: Left Apple
RubyMotion
RubyMotion
•

Command-line toolchain for iOS / OS X dev

•

Implementation of Ruby dialect

•

Unified Ruby runtime with Objective-C

•

Static compiler for Ruby into Intel/ARM

•

Platform for wrappers/libraries ecosystem

•

Commercial product & sustainable business
RubyMotion
•

Command-line toolchain for iOS / OS X dev

•

Implementation of Ruby dialect

•

Unified Ruby runtime with Objective-C

•

Static compiler for Ruby into Intel/ARM

•

Platform for wrappers/libraries ecosystem

•

Commercial product & sustainable business
Ruby
Ruby
•

Created in 1995 by Yukihiro Matsumoto (Matz)
•

“human-oriented language”

•

Dynamically typed

•

Object oriented

•

Blocks

•

Exceptions

•

Garbage collection

•

…
hello.rb
class Hello
def initialize(something)
@something = something
end
def say
puts “Hello “ + @something
end
end
!

Hello.new(‘world’).say
CRuby
Compilation

Ruby Code

AST
Bytecode

Runtime
Let’s use LLVM!
RubyMotion
Compilation

Ruby Code

AST
LLVM IR
Assembly
Runtime
RubyMotion compiler
•

About 12k C++ LOC

•

Targets LLVM 2.4

•

Supports the entire Ruby language “specifications”
File functions
class Hello
def initialize(something)
…
end
def say
…
end
end
!

class Ohai < Hello
def say
…
end
end
!

Hello.new(‘world’).say

File Scope
1

5
3

Hello
Ctor
2

Hello
Scope

Ohai
Ctor
4

Ohai
Scope

File
Code
Method functions
class Hello
…
def say
puts “Hello “ + @something
end
end

Method
IMP

Ruby Runtime

ObjC
Stub

ObjC Runtime
Methods
def hello(x, y, z)
…
end
Methods
define internal i32 @"rb_scope__hello:__"(i32 %self,
i8* %sel, i32 %a, i32 %b, i32 %c) {
MainBlock:
…
}
Conditionals
def hello(something)
if something
true
else
false
end
end
Conditionals
define internal i32 @"rb_scope__hello:__"(i32 %self, i8* %sel, i32 %something) {
MainBlock:
call void @llvm.dbg.declare(metadata !{i32 %self}, metadata !23), !dbg !54
call void @llvm.dbg.value(metadata !{i32 %something}, i64 0, metadata !24), !dbg !54
%0 = alloca i8
store volatile i8 0, i8* %0
switch i32 %something, label %merge [
i32 0, label %else
i32 4, label %else
]

!

else:
br label %merge

!

; preds = %MainBlock, %MainBlock

merge:
; preds = %MainBlock, %else
%iftmp = phi i32 [ 0, %else ], [ 2, %MainBlock ]
ret i32 %iftmp
}
Local variables
•

Allocated on the stack
•

Benefits from the mem2reg pass
Block variables
•

Allocated initially on the stack

•

Re-allocated in heap memory in case the block
leaves the scope of the method
kernel.bc
•

Runtime primitives
•

vm_fast_{plus,minus,…} (arithmetic ops)

•

vm_ivar_{get,set} (instance variables)

•

vm_dispatch (method dispatch)

•

…

•

Pre-compiled into LLVM bitcode

•

Loaded by the compiler
•

Provides the initial module
Instance variables
def initialize(foo)
@foo = foo
end
Instance variables
define internal i32 @"rb_scope__initialize:__"(i32 %self, i8* %sel, i32 %foo) {
MainBlock:
%0 = alloca i32*
%1 = alloca i32
store i32* %1, i32** %0
store i32 %foo, i32* %1
%2 = alloca i8
store volatile i8 0, i8* %2
br label %entry_point
!
entry_point:
%3 = load i32** %0
%4 = load i32* %3
%5 = load i32* @3
%6 = load i8** @4
call void @vm_ivar_set(i32 %self, i32 %5, i32 %4, i8* %6)
ret i32 %4
}
Instance variables
PRIMITIVE void
vm_ivar_set(VALUE obj, ID name, VALUE val, void *cache_p)
{
…
klass = *(VALUE *)obj;
if (klass == cache->klass) {
if ((unsigned int)cache->slot < ROBJECT(obj)->num_slots) {
rb_object_ivar_slot_t *slot;
slot = &ROBJECT(obj)->slots[cache->slot];
if (slot->name == name) {
…
GC_WB_OBJ(&slot->value, val);
return;
…
// slow path
PRIMITIVE VALUE
vm_gc_wb(VALUE *slot, VALUE val)
{
…
*slot = val;
return val;
}
After passes
Instance variables
define internal i32 @"rb_scope__initialize:__"(i32 %self, i8* %sel, i32 %foo) {
MainBlock:
br label %entry_point
!
entry_point:
…
%39 = getelementptr inbounds %struct.rb_object_ivar_slot_t* %28, i32 %26,
i32 1
store i32 %4, i32* %39
…
ret i32 %4
}
Arithmetic
def answer
21 + 21
end
Arithmetic
define internal i32 @rb_scope__answer__(i32 %self, i8* %sel) {
MainBlock:
br label %entry_point
!

entry_point:
%0 = load i8** @8
%1 = load i8* @9
%2 = call i32 @vm_fast_plus(i32 85, i32 85, i8 %1)
ret i32 %2
}
Arithmetic
PRIMITIVE VALUE
vm_fast_plus(VALUE left, VALUE right, unsigned char overridden)
{
if (overridden == 0 && NUMERIC_P(left) && NUMERIC_P(right)) {
if (FIXNUM_P(left) && FIXNUM_P(right)) {
const long res = FIX2LONG(left) + FIX2LONG(right);
if (FIXABLE(res)) {
return LONG2FIX(res);
}
}
}
… // slow path
}
After passes
Arithmetic
define internal i32 @rb_scope__answer__(i32 %self, i8* %sel) {
MainBlock:
br label %entry_point
!

entry_point:
…
ret i32 169
}
Exceptions
•

Implemented as C++ exceptions

•

Zero-cost for “normal flow”

•

Handlers are compiled using IR intrinsics
•

•

“catch all” landing pad clause

Exception#raise triggers __cxa_raise()
DWARF
•

All instructions have proper debug location
metadata

•

Method/block arguments and local variables are
tagged as DW_TAG_{arg,auto}_variable

•

Build system generates a .dSYM bundle
•

Can be loaded by gdb/lldb, atos(1), profilers, etc.
REPL
•

Allows to interpret expressions at runtime
•

Only for development (simulator)

•

App process loads the compiler

•

Uses JIT execution engine
Demo
LLVM lessons
Pluses
• Great to write static
compilers
• Easy to target new
platforms
• Lots of great
optimization passes

Minuses
• C++ API breakage
• Huge code size
• IR is not 100% portable
• Proprietary backends
• Not as great to use as a JIT
LLVM is awesome!
Thank you
lrz@hipbyte.com
Twitter: @lrz

More Related Content

What's hot

Introduction to .net
Introduction to .netIntroduction to .net
Introduction to .netNaveen Sihag
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleSaúl Ibarra Corretgé
 
One Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationOne Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationQuinn Wilton
 
Automatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightAutomatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightGiuseppe Arici
 
Modern Objective-C @ Pragma Night
Modern Objective-C @ Pragma NightModern Objective-C @ Pragma Night
Modern Objective-C @ Pragma NightGiuseppe Arici
 
Seminar: CoinMP - Open Source Solver - Nov 2011
Seminar: CoinMP - Open Source Solver - Nov 2011Seminar: CoinMP - Open Source Solver - Nov 2011
Seminar: CoinMP - Open Source Solver - Nov 2011Bjarni Kristjánsson
 
Talk: The Present and Future of Pharo
Talk: The Present and Future of PharoTalk: The Present and Future of Pharo
Talk: The Present and Future of PharoMarcus Denker
 
Denker - Pharo: Present and Future - 2009-07-14
Denker - Pharo: Present and Future - 2009-07-14Denker - Pharo: Present and Future - 2009-07-14
Denker - Pharo: Present and Future - 2009-07-14CHOOSE
 
Operating Systems - A Primer
Operating Systems - A PrimerOperating Systems - A Primer
Operating Systems - A PrimerSaumil Shah
 
JavaScript in 2016
JavaScript in 2016JavaScript in 2016
JavaScript in 2016Codemotion
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMMin-Yih Hsu
 
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014Fantix King 王川
 
Dataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyDataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyLarry Diehl
 
Javascript ES6
Javascript ES6Javascript ES6
Javascript ES6Huy Doan
 

What's hot (18)

Introduction to .net
Introduction to .netIntroduction to .net
Introduction to .net
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio module
 
One Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationOne Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform Exploitation
 
Automatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma NightAutomatic Reference Counting @ Pragma Night
Automatic Reference Counting @ Pragma Night
 
Modern Objective-C @ Pragma Night
Modern Objective-C @ Pragma NightModern Objective-C @ Pragma Night
Modern Objective-C @ Pragma Night
 
Seminar: CoinMP - Open Source Solver - Nov 2011
Seminar: CoinMP - Open Source Solver - Nov 2011Seminar: CoinMP - Open Source Solver - Nov 2011
Seminar: CoinMP - Open Source Solver - Nov 2011
 
Talk: The Present and Future of Pharo
Talk: The Present and Future of PharoTalk: The Present and Future of Pharo
Talk: The Present and Future of Pharo
 
Denker - Pharo: Present and Future - 2009-07-14
Denker - Pharo: Present and Future - 2009-07-14Denker - Pharo: Present and Future - 2009-07-14
Denker - Pharo: Present and Future - 2009-07-14
 
Operating Systems - A Primer
Operating Systems - A PrimerOperating Systems - A Primer
Operating Systems - A Primer
 
JavaScript in 2016
JavaScript in 2016JavaScript in 2016
JavaScript in 2016
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
asyncio internals
asyncio internalsasyncio internals
asyncio internals
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVM
 
Kotlin
KotlinKotlin
Kotlin
 
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
 
Dataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyDataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in Ruby
 
Javascript ES6
Javascript ES6Javascript ES6
Javascript ES6
 
Swift core
Swift coreSwift core
Swift core
 

Viewers also liked

Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVMevanphx
 
Predlog ministara (biografije), Vlada Srbije
Predlog ministara (biografije), Vlada SrbijePredlog ministara (biografije), Vlada Srbije
Predlog ministara (biografije), Vlada Srbijegordana comic
 
Els Oosthoek, artikel TVOO 2017 Nick van Dam
Els Oosthoek, artikel TVOO 2017 Nick van Dam Els Oosthoek, artikel TVOO 2017 Nick van Dam
Els Oosthoek, artikel TVOO 2017 Nick van Dam Els Oosthoek
 
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチじょいとも
 
Brillo/Weave Part 1: High Level Introduction
Brillo/Weave Part 1: High Level IntroductionBrillo/Weave Part 1: High Level Introduction
Brillo/Weave Part 1: High Level IntroductionJalal Rohani
 
10 Social Sharing Statistics
10 Social Sharing Statistics10 Social Sharing Statistics
10 Social Sharing StatisticsCharlotte Day
 
Melhores Negócios com o Office365
Melhores Negócios com o Office365Melhores Negócios com o Office365
Melhores Negócios com o Office365Fabio Bonifacio
 
Presentación escuela SEC/FEC de paciente experto. Organizada por Mimocardio
Presentación escuela SEC/FEC de paciente experto. Organizada por MimocardioPresentación escuela SEC/FEC de paciente experto. Organizada por Mimocardio
Presentación escuela SEC/FEC de paciente experto. Organizada por MimocardioSociedad Española de Cardiología
 
Blind wijnproeven nigtevecht 3 maart 2017
Blind wijnproeven nigtevecht 3 maart 2017Blind wijnproeven nigtevecht 3 maart 2017
Blind wijnproeven nigtevecht 3 maart 2017Eric Van 't Hoff
 
Redefining manhood
Redefining manhoodRedefining manhood
Redefining manhoodShiftbalance
 
Re-thinking the Organization for Agility
Re-thinking the Organization for Agility Re-thinking the Organization for Agility
Re-thinking the Organization for Agility Jürgen De Smet
 

Viewers also liked (16)

Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVM
 
Predlog ministara (biografije), Vlada Srbije
Predlog ministara (biografije), Vlada SrbijePredlog ministara (biografije), Vlada Srbije
Predlog ministara (biografije), Vlada Srbije
 
Els Oosthoek, artikel TVOO 2017 Nick van Dam
Els Oosthoek, artikel TVOO 2017 Nick van Dam Els Oosthoek, artikel TVOO 2017 Nick van Dam
Els Oosthoek, artikel TVOO 2017 Nick van Dam
 
Design and Development Solution
Design and Development SolutionDesign and Development Solution
Design and Development Solution
 
Teach children-basics
Teach children-basicsTeach children-basics
Teach children-basics
 
Simmethod From Software As A Service To Outcomes As A Service, Twitter and Ya...
Simmethod From Software As A Service To Outcomes As A Service, Twitter and Ya...Simmethod From Software As A Service To Outcomes As A Service, Twitter and Ya...
Simmethod From Software As A Service To Outcomes As A Service, Twitter and Ya...
 
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ
【土曜会】ハードコアな鑑賞入門:カワムラシュウイチ
 
Blog links-url-content efg
Blog links-url-content efgBlog links-url-content efg
Blog links-url-content efg
 
Le performance
Le performanceLe performance
Le performance
 
Brillo/Weave Part 1: High Level Introduction
Brillo/Weave Part 1: High Level IntroductionBrillo/Weave Part 1: High Level Introduction
Brillo/Weave Part 1: High Level Introduction
 
10 Social Sharing Statistics
10 Social Sharing Statistics10 Social Sharing Statistics
10 Social Sharing Statistics
 
Melhores Negócios com o Office365
Melhores Negócios com o Office365Melhores Negócios com o Office365
Melhores Negócios com o Office365
 
Presentación escuela SEC/FEC de paciente experto. Organizada por Mimocardio
Presentación escuela SEC/FEC de paciente experto. Organizada por MimocardioPresentación escuela SEC/FEC de paciente experto. Organizada por Mimocardio
Presentación escuela SEC/FEC de paciente experto. Organizada por Mimocardio
 
Blind wijnproeven nigtevecht 3 maart 2017
Blind wijnproeven nigtevecht 3 maart 2017Blind wijnproeven nigtevecht 3 maart 2017
Blind wijnproeven nigtevecht 3 maart 2017
 
Redefining manhood
Redefining manhoodRedefining manhood
Redefining manhood
 
Re-thinking the Organization for Agility
Re-thinking the Organization for Agility Re-thinking the Organization for Agility
Re-thinking the Organization for Agility
 

Similar to Statically Compiling Ruby with LLVM

Bypassing ASLR Exploiting CVE 2015-7545
Bypassing ASLR Exploiting CVE 2015-7545Bypassing ASLR Exploiting CVE 2015-7545
Bypassing ASLR Exploiting CVE 2015-7545Kernel TLV
 
What has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you developWhat has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you developAndrey Karpov
 
Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++Mohammad Shaker
 
Synchronously call your async functions
Synchronously call your async functionsSynchronously call your async functions
Synchronously call your async functionsIgalia
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performanceDuoyi Wu
 
Bypassing DEP using ROP
Bypassing DEP using ROPBypassing DEP using ROP
Bypassing DEP using ROPJapneet Singh
 
Jit builder status and directions 2018 03-28
Jit builder status and directions 2018 03-28Jit builder status and directions 2018 03-28
Jit builder status and directions 2018 03-28Mark Stoodley
 
0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdf0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdfKhaledIbrahim10923
 
Part II: LLVM Intermediate Representation
Part II: LLVM Intermediate RepresentationPart II: LLVM Intermediate Representation
Part II: LLVM Intermediate RepresentationWei-Ren Chen
 
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerPragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerMarina Kolpakova
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsSerge Stinckwich
 
C Under Linux
C Under LinuxC Under Linux
C Under Linuxmohan43u
 
Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaCharles Nutter
 
Create C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development KitCreate C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development KitIntel® Software
 
掀起 Swift 的面紗
掀起 Swift 的面紗掀起 Swift 的面紗
掀起 Swift 的面紗Pofat Tseng
 
Demystify eBPF JIT Compiler
Demystify eBPF JIT CompilerDemystify eBPF JIT Compiler
Demystify eBPF JIT CompilerNetronome
 

Similar to Statically Compiling Ruby with LLVM (20)

Gcrc talk
Gcrc talkGcrc talk
Gcrc talk
 
Bypassing ASLR Exploiting CVE 2015-7545
Bypassing ASLR Exploiting CVE 2015-7545Bypassing ASLR Exploiting CVE 2015-7545
Bypassing ASLR Exploiting CVE 2015-7545
 
Introduction to c part -3
Introduction to c   part -3Introduction to c   part -3
Introduction to c part -3
 
What has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you developWhat has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you develop
 
Memory Management with Java and C++
Memory Management with Java and C++Memory Management with Java and C++
Memory Management with Java and C++
 
Synchronously call your async functions
Synchronously call your async functionsSynchronously call your async functions
Synchronously call your async functions
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performance
 
Bypassing DEP using ROP
Bypassing DEP using ROPBypassing DEP using ROP
Bypassing DEP using ROP
 
Jit builder status and directions 2018 03-28
Jit builder status and directions 2018 03-28Jit builder status and directions 2018 03-28
Jit builder status and directions 2018 03-28
 
0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdf0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdf
 
Part II: LLVM Intermediate Representation
Part II: LLVM Intermediate RepresentationPart II: LLVM Intermediate Representation
Part II: LLVM Intermediate Representation
 
Appsec obfuscator reloaded
Appsec obfuscator reloadedAppsec obfuscator reloaded
Appsec obfuscator reloaded
 
Mario
MarioMario
Mario
 
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the CompilerPragmatic Optimization in Modern Programming - Demystifying the Compiler
Pragmatic Optimization in Modern Programming - Demystifying the Compiler
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
C Under Linux
C Under LinuxC Under Linux
C Under Linux
 
Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
 
Create C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development KitCreate C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development Kit
 
掀起 Swift 的面紗
掀起 Swift 的面紗掀起 Swift 的面紗
掀起 Swift 的面紗
 
Demystify eBPF JIT Compiler
Demystify eBPF JIT CompilerDemystify eBPF JIT Compiler
Demystify eBPF JIT Compiler
 

Recently uploaded

Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfFIDO Alliance
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingScyllaDB
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireExakis Nelite
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfFIDO Alliance
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch TuesdayIvanti
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Skynet Technologies
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!Memoori
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...FIDO Alliance
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxFIDO Alliance
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...ScyllaDB
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfFIDO Alliance
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...panagenda
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideStefan Dietze
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...FIDO Alliance
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGDSC PJATK
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPTiSEO AI
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctBrainSell Technologies
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?Mark Billinghurst
 

Recently uploaded (20)

Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 

Statically Compiling Ruby with LLVM