SlideShare uma empresa Scribd logo
1 de 118
Baixar para ler offline
Douglas Chen <dougpuob@gmail.com>
不深不淺,帶你認識 LLVM
1
Douglas Chen <dougpuob@gmail.com>
Found LLVM in our Life
Did you find it !
2
3
Life is short and we can’t change it.
But we can make it interesting.
陳鍵源 [Douglas Chen]
<dougpuob@gmail.com>
Why I am HERE !
?
Because I believe the best way to
learn something is sharing.
Not trying to teach you programming still, or show you how to use LLVM
libraries. I just wanna introduce something new related to LLVM to you.
Agenda
5
1. Begin with a story
○ Before the story
○ The story
1. Free the Free
○ Self hosting?
○ What’s diff btn LLVM&GCC?
1. Compiler
○ Understand the Magic
○ Optimation
○ LLVM
1. Go, let’s find it (Products)
○ Apple’s Projects
○ Google’s Projects
○ Other Projects
4. Go, let’s find it (JIT)
○ What is JIT?
○ JVM/GraalVM
○ Virtual Machine/QEMU
4. Go, let’s find it (Web)
○ What is WebAssembly?
○ Project with WebAssembly
4. Q&A
Agenda
6
1.Begin with a story
Before the story
1. Begin with a story
7
What is compiler ?
Compiler is a magic
making source code
to application.
What is compiler ?
CompilerSource Code Application
The story
1. Begin with a story
10
?
Apple Computer & NeXT
NeXTSTEP
1976 1985 1985 1988
Operating System
1989
Apple 1 Apple 2 Macintosh
Apple 3 Lisa
NeXT’s NeXTSTEP OS
Return to Glory
NeXTSTEP
1997 1997 2001
1998 Power Macintosh G3
1999 Power Macintosh G4
2000 PowerBook
2001 iPod
2002 iPod2
2003 iPod3
2004 iPod4 & Mini & Photo
2005 iPod5
iPod Shuffle
iPod Nano
Power Macintosh G5 (Intel)
2006 MacBook Pro
2007 Apple TV
iPhone
2008 MacBook Air
iPod Touch
iPhone 3G
Complicated Ecosystem
CPU OS Language
ARMv6 macOS C
ARMv7 iOS C++
ARMv8 watchOS Objective-C
Intel x86 tvOS Swift
PowerPC
Complicated Ecosystem
Objective-C
Swift
C
C++
ARMv6
ARMv7
ARMv8
Intel x86
PowerPC
XcodeSDK
Application
Driver
OS
Apple needs find a way out
GCC is developed for solving real problems, it has no
time to make a good everything perfect.
FSF GCC
master
Apple’s
branch
all the mess
↓...↑...
...
...
Apple met LLVM
LLVM
Chris Lattner
Twitter : https://twitter.com/clattner_llvm
Website : http://nondot.org/sabre/
Apple met LLVM
NeXTSTEP
1997 1997 2001
1998 Power Macintosh G3
1999 Power Macintosh G4
2000 PowerBook
2001 iPod
2002 iPod2
2003 iPod3
2004 iPod4 & Mini & Photo
2005 iPod5
iPod Shuffle
iPod Nano
Power Macintosh G5 (Intel)
2006 MacBook Pro
2007 Apple TV
iPhone
2008 MacBook Air
iPod Touch
iPhone 3G
2000 2005
2007 Xcode 3.x
2011 Xcode 4.x
2013 Xcode 5.x
2011 gcc > llvm 10%
2013 gcc ≈ llvm
(run-time performance)
Agenda
20
2.Free the Free
Why self hosting is
important !
2. Free the Free
21
Why self-hosting is important !
https://bbs.saraba1st.com/2b/thread-1375402-113-1.html
Why self hosting is important !
Open Source Project
*.h *.cpp
License
Why self hosting is important !
Open Source Project
*.h *.cpp
Free
Free
Why self hosting is important !
GNU's Not Unix!
RMS
GNU Compiler Collection
(GNU C Compiler)
Richard M. Stallman
Why self hosting is important !
Free
the Free
Open Source Project
*.h *.cpp
What’s the different
between LLVM & GCC ?
2. Free the Free
27
Which compilers do your regularly use?
c++ c
https://www.jetbrains.com/lp/devecosystem-2019/cpp/
What is LLVM
1. LLVM is a Compiler
2. LLVM is a Compiler Infrastructure
3. LLVM is a series of Compiler Tools
4. LLVM is a Compiler Toolchain
5. LLVM is an open source C++ implementation
Pro's of GCC vs Clang:
● GCC supports languages that Clang does not aim to,
such as Java, Ada, FORTRAN, Go, etc.
● GCC supports more targets than LLVM.
● GCC supports many language extensions.
https://clang.llvm.org/comparison.html
Pro's of Clang vs GCC:
● The Clang ASTs and design are intended to be easily
understandable by anyone.
● Clang is designed as an API from its inception, allowing it to be
reused by source analysis tools, refactoring, IDEs (etc) as well
as for code generation. GCC is built as a monolithic static
compiler.
● Various GCC design decisions make it very difficult to reuse , ... .
Clang has none of these problems.
https://clang.llvm.org/comparison.html
Pro's of Clang vs GCC:
● Clang can serialize its AST out to disk and read it back into
another program, which is useful for whole program analysis.
GCC does not have this.
● Clang is much faster and uses far less memory than GCC.
● Clang has been designed from the start to provide extremely
clear and concise diagnostics (error and warning messages).
● GCC is licensed under the GPL license. Clang uses a
BSD license. https://clang.llvm.org/comparison.html
What I see the different like this ...
GCC LLVM
Clay LEGO
https://seriousplaypro.com/wp-content/uploads/2017/06/LEGO-Idea-House-26.jpg
Agenda
34
3.Compiler
Understand the magic
3. Compiler
35
Computer Language stacks
CPU
Human Language
Assembly Language
Machine Code
C / C++
VB / Swift / ObjectiveC
Java / C# / VB /
Python / JavaScript /
Ruby / VB / Perl / Shell
Low level languages
Middle level languages
High level languages
ASIC
Engineers
ASIC / FPGA
System C
Verilog / VHDL
Hardware Description
languages
Firmware
Engineers
Mobile App
Engineers
Web Tech
Engineers
Software
Engineers
Compiler
Engineers
⭐
Compiler
CompilerSource Code Exe Binary
Front-End Optimizer Back-End
Source
Code
Machine
Code
Frontend
3. Compiler
38
What is compiler ?
Compiler is a magic (making ...).
1 (token) 2 (token) 3 (token) 4 (token) 5 ... (tokens)
Compiler is a magic making ...
(S) (V) (C) (C)
Lexical
Analyzer
Syntax
Analyzer
Semantic
Analyzer
AST
(Abstract Syntax Tree)
Source Code
Tokenization
// min.c
int min(int a, int b)
{
if (a < b)
return a;
return b;
}
int 'int' [StartOfLine]
identifier 'min' [LeadingSpace]
l_paren '('
int 'int'
identifier 'a' [LeadingSpace]
comma ','
int 'int' [LeadingSpace]
identifier 'b' [LeadingSpace]
r_paren ')'
l_brace '{' [LeadingSpace]
if 'if' [StartOfLine]
[LeadingSpace]
l_paren '(' [LeadingSpace]
identifier 'a'
less '<' [LeadingSpace]
identifier 'b' [LeadingSpace]
r_paren ')'
return 'return' [StartOfLine] [LeadingSpace]
$ clang -cc1 -dump-tokens min.c
AST Dump
TranslationUnitDecl 0x2c8ce56b660 <<invalid sloc>> <invalid sloc>
`-FunctionDecl 0x2c8ce56be18 <min.c:2:1, line:6:1> line:2:5 min 'int (int, int)'
|-ParmVarDecl 0x2c8ce56bcc0 <col:9, col:13> col:13 used a 'int'
|-ParmVarDecl 0x2c8ce56bd38 <col:16, col:20> col:20 used b 'int'
`-CompoundStmt 0x2c8ce56c0a0 <col:23, line:6:1>
|-IfStmt 0x2c8ce56c018 <line:3:3, line:4:12>
| |-<<<NULL>>>
| |-BinaryOperator 0x2c8ce56bf98 <line:3:7, col:11> 'int' '<'
| | |-ImplicitCastExpr 0x2c8ce56bf68 <col:7> 'int' <LValueToRValue>
| | | `-DeclRefExpr 0x2c8ce56bf18 <col:7> 'int' lvalue ParmVar 0x2c8ce56bcc0 'a' 'int'
| | `-ImplicitCastExpr 0x2c8ce56bf80 <col:11> 'int' <LValueToRValue>
| | `-DeclRefExpr 0x2c8ce56bf40 <col:11> 'int' lvalue ParmVar 0x2c8ce56bd38 'b' 'int'
| |-ReturnStmt 0x2c8ce56c000 <line:4:5, col:12>
| | `-ImplicitCastExpr 0x2c8ce56bfe8 <col:12> 'int' <LValueToRValue>
| | `-DeclRefExpr 0x2c8ce56bfc0 <col:12> 'int' lvalue ParmVar 0x2c8ce56bcc0 'a' 'int'
| `-<<<NULL>>>
`-ReturnStmt 0x2c8ce56c088 <line:5:3, col:10>
`-ImplicitCastExpr 0x2c8ce56c070 <col:10> 'int' <LValueToRValue>
`-DeclRefExpr 0x2c8ce56c048 <col:10> 'int' lvalue ParmVar 0x2c8ce56bd38 'b' 'int'
// min.c
int min(int a, int b)
{
if (a < b)
return a;
return b;
}
$ clang -cc1 -ast-dump min.c
CppNameLint
cppnamelint utility v0.2.5
---------------------------------------------------
File = Detection.cpp
Config = cppnamelint.toml
Checked = 191 [File:0 | Func: 44 | Param: 37 | Var:110]
Error = 7 [File:0 | Func: 0 | Param: 7 | Var: 0]
---------------------------------------------------
<93, 5 > Variable : wayToSort (auto)
<93, 25 > Variable : strA (string)
<93, 38 > Variable : strB (string)
<168, 5 > Variable : wayToSort (auto)
<168, 25 > Variable : strA (string)
<168, 38 > Variable : strB (string)
<239, 9 > Variable : nLowerPCount (size_t)
Optimization
3. Compiler
43
Compiler
➊--> compiler ➋--> assembly code(.s)
➌--> assembler ➍--> object file (.o)
➎--> linker ➏--> binary file
(.exe/.elf/.a)
CompilerSource Code Executable Binary
.c .s .o .elf
➊
cl
gcc
clang
➌
ml
as
llvm-as
➎
link
ld
lld
Optimize
Here
Optimize
Here
Optimize
Here
➋ ➍ ➏
Optimization
● SSA (Static Single Assignment)
● Constant Propagation
● Dead Code Elimination
● Branch Free
Optimization
SSA
(Static Single Assignment)
Optimization::SSA
SSA (Static Single Assignment)
SSA (Static Single Assignment)
SSA (Static Single Assignment)
1 2 3
Optimization
Constant Propagation
&
Dead Code Elimination
Constant Propagation & Dead Code Elimination
gcc -O0
Constant Propagation & Dead Code Elimination
Constant
Propagation Dead Code
Elimination
Optitmized
GetValue() = GetValue4()
Optimization
Branch Free
How to tell Branchs
Instruction pipeline
https://techdecoded.intel.io/resources/understanding-the-instruction-pipeline/
Branch Free
Student Age
Now
‘A' → ‘a’
...
‘Z' → ‘z’
...
‘5’ --> ‘5’
...
Branch Free (tolower1)
‘A' → ‘a’
Branch Free (tolower2)
‘A' → ‘a’
Branch Free (CLANG -O3)
Backend
3. Compiler
60
Backend synthesis
Machine
Independent
Code
Improvement
Target Code
Generation
Modified
Assembly
or
Object Code
AST or IR
LLVM
3. Compiler
62
Optimization
Traditional Compiler
Traditional Compiler
Front-End Optimizer Back-End
Source
Code
Machine
Code
LLVM
Front-End IR Optimizer IR Back-End
Source
Code
Machine
Code
Portable
IR
Transformed
IR
Traditional Compiler V.S. Modern Compiler
C
C++
Java
PHP
Go
Rust
x86
ARM
MIPS
RISC-V
PowerPC
SPARC
C
C++
Java
PHP
Go
Rust
x86
ARM
MIPS
RISC-V
PowerPC
SPARC
IR
One Day I create a new language ...
Day Dream++
ddcc
One Day I create a new CPU/GPU/FPGA/ASIC ...
Day Dream
CPU
One Day I make a new OPTIMIZATION ...
Day Dream
Optimization
Agenda
70
4.Go, let’s find it
Where to find it ?
71
a.Apple’s Projects
Xcode
Xcode
Xcode Version Release Date Compilers
Xcode 2.0 2005/04/29 GCC
Xcode 3.x 2007/10/25 GCC & LLVM-GCC
Xcode 4.x 2011/03/09 LLVM-GCC
Xcode 5.x 2013/06/11 LLVM
https://xcodereleases.com/
Where to find it ?
75
Google’s Projects
Google’s Products
MLIR
MLIR: accelerating AI with open-source
infrastructure
https://github.com/tensorflow/mlir
You might don’t know about MLIR, but you MUST
know this ...
Google’s Products
V8
V8: Emscripten is switching to
the LLVM WebAssembly backend
https://twitter.com/v8js/status/1145704863377981445
You might don’t know about V8, but you MUST
know this ...
Google’s Products
gollvm
gollvm: an LLVM-based Go compiler
https://go.googlesource.com/gollvm/
Where to find it ?
87
Other Projects
Other Products
Rust Lang
Rust Lang
You might don’t know about Rust, but you MUST
know this ...
Firefox Quantum is super fast,
while still conserving memory
Microsoft to explore using Rust
Microsoft to explore using Rust
Agenda
95
5. Go, let’s find it
( JIT)
What is JIT?
4. Go, let’s find it (Just-In-Time)
96
What is JIT?
Why we need JIT?
Develop FAST & Run FAST
What is JIT?
⇅
⇅
⇅
⇅
⇅
⇅CPU
JIT
Programming Language
Interpreter
Library
FASTERSLOWER
How JIT works?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
// prints out the error and returns NULL.
void* alloc_executable_memory(size_t size)
{
void* ptr = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE |
MAP_ANONYMOUS, -1, 0);
if (ptr == (void*)-1) {
perror("mmap");
return NULL;
}
return ptr;
}
https://eli.thegreenplace.net/2013/11/05/how-to-jit-an-
introduction
How JIT works?
void emit_code_into_memory(unsigned char* m) {
unsigned char code[] = {
0x48, 0x89, 0xf8, // mov %rdi, %rax
0x48, 0x83, 0xc0, 0x04, // add $4, %rax
0xc3 // ret
}; memcpy(m, code, sizeof(code));
}
const size_t SIZE = 1024;
typedef long (*JittedFunc)(long);
void run_from_rwx() {
void* m = alloc_executable_memory(SIZE);
emit_code_into_memory(m);
JittedFunc func = m;
int result = func(2);
printf("result = %dn", result);
}
long add4(long num) {
return num + 4;
}
https://eli.thegreenplace.net/2013/11/05/how-to-jit-an-
introduction
Project with LLVM
JVM
Java Virtual Machine
https://javatutorial.net/wp-content/uploads/2017/10/jvm-architecture-768x793.png
Project with JIT
QEMU / Virtual Box/ VMware
QEMU (Quick Emulator)
Hardware
Host OS
QEMU
App2App1 AppN
Guest OS
Emulated Hardware
unmodified OS
QEMU (Quick Emulator)
Hardware
Host OS
QEMU
App2App1 AppN
Guest OS
Emulated Hardware
QEMU (Dynamic Binary Translation)
TCG
(Tiny Code Generator)
Guest Code
Host Code
gen_intermediate_code()
tb_gen_code()
TB Buffer
(Translated Block)
tb_find()
tcg/arm
tcg/i386
tcg/mips
tcg/riscv
tcg/sparc
Agenda
106
6. Go, let’s find it
( Web Technology)
What is
WebAssembly
4. Go, let’s find it (WebAssembly)
107
Project with WebAssembly
JSLinux
JSLinux
https://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/win2k.cfg&mem=192&graphic=1&w=1024&h=768
Run Windows 2000 on Web Browser
JSLinux
Hardware
Host OS
Chrome.exe
Minesweeper AppN
Windows 2000
ASM.js / WebAssembly
Hardware
Host OS
QEMU
App1
Guest OS
Emulated Hardware
AppNApp2
QEMU
Emulated Hardware
Project with WebAssembly
vim.wasm
vim.wasm https://rhysd.github.io/vim.wasm/
Project with WebAssembly
Google Earth
Google Earth https://earth.google.com/web/
Project with WebAssembly
Others
Project with WebAssembly
https://webassembly.eu/
Agenda
117
7. Q&A
ENDHackMD Note
http://bit.ly/369THkW
Twitter
https://twitter.com/dougpuob

Mais conteúdo relacionado

Mais procurados

LLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time OptimizationLLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time OptimizationVivek Pansara
 
GNU Compiler Collection - August 2005
GNU Compiler Collection - August 2005GNU Compiler Collection - August 2005
GNU Compiler Collection - August 2005Saleem Ansari
 
C Under Linux
C Under LinuxC Under Linux
C Under Linuxmohan43u
 
HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3Linaro
 
GCC Compiler as a Performance Testing tool for C programs
GCC Compiler as a Performance Testing tool for C programsGCC Compiler as a Performance Testing tool for C programs
GCC Compiler as a Performance Testing tool for C programsDaniel Ilunga
 
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...Alexey Smirnov
 
GEM - GNU C Compiler Extensions Framework
GEM - GNU C Compiler Extensions FrameworkGEM - GNU C Compiler Extensions Framework
GEM - GNU C Compiler Extensions FrameworkAlexey Smirnov
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageablecorehard_by
 
Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Michael Barker
 
Introduction to segmentation fault handling
Introduction to segmentation fault handling Introduction to segmentation fault handling
Introduction to segmentation fault handling Larion
 
Java Jit. Compilation and optimization by Andrey Kovalenko
Java Jit. Compilation and optimization by Andrey KovalenkoJava Jit. Compilation and optimization by Andrey Kovalenko
Java Jit. Compilation and optimization by Andrey KovalenkoValeriia Maliarenko
 
NovaProva, a new generation unit test framework for C programs
NovaProva, a new generation unit test framework for C programsNovaProva, a new generation unit test framework for C programs
NovaProva, a new generation unit test framework for C programsGreg Banks
 
Hands on clang-format
Hands on clang-formatHands on clang-format
Hands on clang-formatKai Wolf
 
Composing and Executing Parallel Data Flow Graphs wth Shell Pipes
Composing and Executing Parallel Data Flow Graphs wth Shell PipesComposing and Executing Parallel Data Flow Graphs wth Shell Pipes
Composing and Executing Parallel Data Flow Graphs wth Shell PipesVinoth Chandar
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, UkraineVladimir Ivanov
 

Mais procurados (20)

R ext world/ useR! Kiev
R ext world/ useR!  KievR ext world/ useR!  Kiev
R ext world/ useR! Kiev
 
Next Stop, Android
Next Stop, AndroidNext Stop, Android
Next Stop, Android
 
LLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time OptimizationLLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time Optimization
 
clang-intro
clang-introclang-intro
clang-intro
 
GNU Compiler Collection - August 2005
GNU Compiler Collection - August 2005GNU Compiler Collection - August 2005
GNU Compiler Collection - August 2005
 
C Under Linux
C Under LinuxC Under Linux
C Under Linux
 
HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3HKG15-207: Advanced Toolchain Usage Part 3
HKG15-207: Advanced Toolchain Usage Part 3
 
GCC Compiler as a Performance Testing tool for C programs
GCC Compiler as a Performance Testing tool for C programsGCC Compiler as a Performance Testing tool for C programs
GCC Compiler as a Performance Testing tool for C programs
 
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...
FORECAST: Fast Generation of Accurate Context-Aware Signatures of Control-Hij...
 
GEM - GNU C Compiler Extensions Framework
GEM - GNU C Compiler Extensions FrameworkGEM - GNU C Compiler Extensions Framework
GEM - GNU C Compiler Extensions Framework
 
Return oriented programming (ROP)
Return oriented programming (ROP)Return oriented programming (ROP)
Return oriented programming (ROP)
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
 
The pocl Kernel Compiler
The pocl Kernel CompilerThe pocl Kernel Compiler
The pocl Kernel Compiler
 
Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!Lock? We don't need no stinkin' locks!
Lock? We don't need no stinkin' locks!
 
Introduction to segmentation fault handling
Introduction to segmentation fault handling Introduction to segmentation fault handling
Introduction to segmentation fault handling
 
Java Jit. Compilation and optimization by Andrey Kovalenko
Java Jit. Compilation and optimization by Andrey KovalenkoJava Jit. Compilation and optimization by Andrey Kovalenko
Java Jit. Compilation and optimization by Andrey Kovalenko
 
NovaProva, a new generation unit test framework for C programs
NovaProva, a new generation unit test framework for C programsNovaProva, a new generation unit test framework for C programs
NovaProva, a new generation unit test framework for C programs
 
Hands on clang-format
Hands on clang-formatHands on clang-format
Hands on clang-format
 
Composing and Executing Parallel Data Flow Graphs wth Shell Pipes
Composing and Executing Parallel Data Flow Graphs wth Shell PipesComposing and Executing Parallel Data Flow Graphs wth Shell Pipes
Composing and Executing Parallel Data Flow Graphs wth Shell Pipes
 
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
 

Semelhante a 不深不淺,帶你認識 LLVM (Found LLVM in your life)

Two C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp InsightsTwo C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp InsightsAlison Chaiken
 
Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeDmitri Nesteruk
 
May2010 hex-core-opt
May2010 hex-core-optMay2010 hex-core-opt
May2010 hex-core-optJeff Larkin
 
#Include os - From bootloader to REST API with the new C++
#Include os - From bootloader to REST API with the new C++#Include os - From bootloader to REST API with the new C++
#Include os - From bootloader to REST API with the new C++IncludeOS
 
Power of linked list
Power of linked listPower of linked list
Power of linked listPeter Hlavaty
 
TestUpload
TestUploadTestUpload
TestUploadZarksaDS
 
Cray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesCray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesJeff Larkin
 
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideBKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideLinaro
 
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015Windows Developer
 
Troubleshooting .net core on linux
Troubleshooting .net core on linuxTroubleshooting .net core on linux
Troubleshooting .net core on linuxPavel Klimiankou
 
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdfJunZhao68
 
Legacy of Void*
Legacy of Void*Legacy of Void*
Legacy of Void*Adam Crain
 
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...Cyber Security Alliance
 
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docxeugeniadean34240
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)Ary Borenszweig
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)Ary Borenszweig
 

Semelhante a 不深不淺,帶你認識 LLVM (Found LLVM in your life) (20)

Two C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp InsightsTwo C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp Insights
 
Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/Invoke
 
Clang: More than just a C/C++ Compiler
Clang: More than just a C/C++ CompilerClang: More than just a C/C++ Compiler
Clang: More than just a C/C++ Compiler
 
May2010 hex-core-opt
May2010 hex-core-optMay2010 hex-core-opt
May2010 hex-core-opt
 
A Life of breakpoint
A Life of breakpointA Life of breakpoint
A Life of breakpoint
 
#Include os - From bootloader to REST API with the new C++
#Include os - From bootloader to REST API with the new C++#Include os - From bootloader to REST API with the new C++
#Include os - From bootloader to REST API with the new C++
 
Power of linked list
Power of linked listPower of linked list
Power of linked list
 
TestUpload
TestUploadTestUpload
TestUpload
 
Cray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best PracticesCray XT Porting, Scaling, and Optimization Best Practices
Cray XT Porting, Scaling, and Optimization Best Practices
 
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideBKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
 
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
Build 2016 - B880 - Top 6 Reasons to Move Your C++ Code to Visual Studio 2015
 
Troubleshooting .net core on linux
Troubleshooting .net core on linuxTroubleshooting .net core on linux
Troubleshooting .net core on linux
 
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
 
Legacy of Void*
Legacy of Void*Legacy of Void*
Legacy of Void*
 
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...
App secforum2014 andrivet-cplusplus11-metaprogramming_applied_to_software_obf...
 
MLflow with R
MLflow with RMLflow with R
MLflow with R
 
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
 
Ruxmon.2013-08.-.CodeBro!
Ruxmon.2013-08.-.CodeBro!Ruxmon.2013-08.-.CodeBro!
Ruxmon.2013-08.-.CodeBro!
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 

Último

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 

Último (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 

不深不淺,帶你認識 LLVM (Found LLVM in your life)