first version of grillrb talk
This commit is contained in:
parent
9e655cc8ca
commit
a9fe598a45
BIN
app/assets/images/slides/grillrb/finland.jpg
Normal file
BIN
app/assets/images/slides/grillrb/finland.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
BIN
app/assets/images/slides/grillrb/heart.png
Normal file
BIN
app/assets/images/slides/grillrb/heart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
BIN
app/assets/images/slides/grillrb/raisa.jpg
Normal file
BIN
app/assets/images/slides/grillrb/raisa.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 MiB |
BIN
app/assets/images/slides/grillrb/ruby.png
Normal file
BIN
app/assets/images/slides/grillrb/ruby.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 89 KiB |
BIN
app/assets/images/slides/grillrb/villataika.jpg
Normal file
BIN
app/assets/images/slides/grillrb/villataika.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 MiB |
@ -9,24 +9,36 @@
|
||||
@import "./mixins";
|
||||
@import "./settings";
|
||||
// ---------------------------------------------
|
||||
|
||||
|
||||
ul.arr li{
|
||||
list-style: none;
|
||||
margin-left: -30px;
|
||||
&:before{
|
||||
color: #b5e853;
|
||||
content: ">> ";
|
||||
}
|
||||
}
|
||||
.left {
|
||||
text-align: left;
|
||||
}
|
||||
// Include theme-specific fonts
|
||||
// @import url(../../lib/font/source-sans-pro/source-sans-pro.css);
|
||||
|
||||
.reveal section img.no_b {
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
// Override theme settings (see ../template/settings.scss)
|
||||
$backgroundColor: #191919;
|
||||
|
||||
//$mainColor: #fff;
|
||||
//$headingColor: #fff;
|
||||
$mainColor: #a9fb0b;
|
||||
$headingColor: #a9fb0b;
|
||||
|
||||
$mainFontSize: 42px;
|
||||
//$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
|
||||
//$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
|
||||
$headingTextShadow: none;
|
||||
$headingLetterSpacing: normal;
|
||||
$headingTextTransform: uppercase;
|
||||
$headingTextTransform: normal;
|
||||
$headingFontWeight: 600;
|
||||
$linkColor: #42affa;
|
||||
$linkColorHover: lighten( $linkColor, 15% );
|
||||
@ -43,7 +55,16 @@ section.has-light-background {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Theme template ------------------------------
|
||||
@import "./theme";
|
||||
// ---------------------------------------------
|
||||
body {
|
||||
background: #1c1e20;
|
||||
background: -moz-radial-gradient(center, circle cover, #393a3a 0%, #1c1e20 100%);
|
||||
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #393a3a), color-stop(100%, #1c1e20));
|
||||
background: -webkit-radial-gradient(center, circle cover, #323232 0%, #1c1c1c 100%);
|
||||
background: -o-radial-gradient(center, circle cover, #393a3a 0%, #1c1e20 100%);
|
||||
background: -ms-radial-gradient(center, circle cover, #393a3a 0%, #1c1e20 100%);
|
||||
background: radial-gradient(center, circle cover, #393a3a 0%, #1c1e20 100%);
|
||||
background-color: #2b2b2b;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
class SlidesController < ApplicationController
|
||||
|
||||
def index
|
||||
render( template: "slides/#{params[:slide]}" , layout: false )
|
||||
render( template: "slides/#{params[:slide]}/index" , layout: false )
|
||||
end
|
||||
|
||||
end
|
||||
|
163
app/views/slides/grillrb/_how.haml
Normal file
163
app/views/slides/grillrb/_how.haml
Normal file
@ -0,0 +1,163 @@
|
||||
%section#how
|
||||
%h2 That was what
|
||||
%br
|
||||
%h4 next
|
||||
%br
|
||||
%h1 How
|
||||
%p.fragment With rails analogy
|
||||
|
||||
%section#app
|
||||
%h2 Rails app
|
||||
%p many views
|
||||
%br
|
||||
%h2.fragment RubyX
|
||||
%p.fragment many methods
|
||||
%br
|
||||
%h4.fragment method = view
|
||||
|
||||
%section#controller
|
||||
%h3 controller renders view
|
||||
%br
|
||||
%h3.fragment compiler compiles methods
|
||||
%br
|
||||
%h4.fragment controller = compiler part
|
||||
|
||||
%section#http
|
||||
%h3 rack handles http
|
||||
%br
|
||||
%h3.fragment assembler and elf handles binary creation
|
||||
%br
|
||||
%h4.fragment lower levels don't matter to most
|
||||
|
||||
%section#layers
|
||||
%h3 request processed by layers
|
||||
%br
|
||||
%h3.fragment Compiler processes in layers
|
||||
%br
|
||||
%h4.fragment same same, but different :-)
|
||||
|
||||
%section#compiler_layers
|
||||
%h2 Compiler layers
|
||||
%p Ruby source (parser gem)
|
||||
%p.fragment Virtual oo language (vool)
|
||||
%p.fragment Minimal oo Machine (mom)
|
||||
%p.fragment Risc abstraction
|
||||
%p.fragment Target (arm)
|
||||
%p.fragment Elf / binary
|
||||
|
||||
%section#vool
|
||||
%h2 Vool, virtual oo language
|
||||
%p virtual == no syntax
|
||||
%p.fragment oo == object model like ruby
|
||||
%p.fragment ruby without the fluff ( splats / unless ..)
|
||||
%p.fragment Statements + Expression
|
||||
%p.fragment nothing implicit
|
||||
|
||||
%section#machines
|
||||
%h2 Language vs Machine
|
||||
%p next level is (abtract) machine
|
||||
%p.fragment statement tree vs instruction list
|
||||
%p.fragment variables vs memory
|
||||
%p.fragment control structures vs jumps
|
||||
%p.fragment abstract vs basic
|
||||
|
||||
%section#mom
|
||||
%section#mom1
|
||||
%h2 Mom, minimal object machine
|
||||
%p 16 instructions
|
||||
%p.fragment Works only on memory
|
||||
%p.fragment higher level than next
|
||||
%p.fragment ease transition to next level
|
||||
%p.fragment 1 vool → 2-8 mom
|
||||
|
||||
%section#mom2
|
||||
%h2 MOM instructions
|
||||
%p simple call , argument transfer , return sequence
|
||||
%p.fragment dynamic call , method resolve
|
||||
%p.fragment checks with implicit jumps
|
||||
%p.fragment ruby truth check , identity check
|
||||
%p.fragment yield . . .
|
||||
%section
|
||||
%section#risc1
|
||||
%h2 Risc abstraction
|
||||
%p arm without the fluff
|
||||
%p.fragment arm like registers
|
||||
%p.fragment 20 instructions
|
||||
%p.fragment extensible (for builtin + more)
|
||||
%p.fragment last virtual layer
|
||||
%p.fragment interpreter + visual debugger
|
||||
|
||||
%section#risc2
|
||||
%h2 Risc instructions
|
||||
%p mem/reg + reg/reg
|
||||
%p.fragment arithmetic operators
|
||||
%p.fragment tests on operation result
|
||||
%p.fragment jump , call , return
|
||||
%p.fragment syscall
|
||||
|
||||
%section#code
|
||||
%h2 Code generation
|
||||
%br
|
||||
%br
|
||||
%h2.fragment object generation
|
||||
|
||||
%section#model
|
||||
%h2 Object Model
|
||||
%p Everything is Object
|
||||
%p.fragment Fixed sizes
|
||||
%p.fragment opaque data, ruby has no access
|
||||
%p.fragment mom instructions to process data
|
||||
|
||||
%section#types
|
||||
%h2 Object has Type
|
||||
%p.fragment Types are immutable
|
||||
%p.fragment Types store callable methods
|
||||
%p.fragment maps names to indexes
|
||||
%p.fragment does not define types recursively
|
||||
%p.fragment type reference may change
|
||||
|
||||
%section#classes
|
||||
%h2 Type implements Class
|
||||
%p Class has instance Type
|
||||
%p.fragment new object has instance type
|
||||
%p.fragment instance type may change
|
||||
%p.fragment many types implement one class
|
||||
%p.fragment class stores method definition
|
||||
|
||||
%section#dynamics
|
||||
%h3 Types are static
|
||||
%h3 Ruby is dynamic
|
||||
%h3.fragment.fade-out ?
|
||||
%p.fragment objects type reference may change
|
||||
%p.fragment class instance type may change
|
||||
|
||||
%section#parfait
|
||||
%h2 Basic Objects: Parfait
|
||||
%p minimal runtime for compiling
|
||||
%p.fragment Basic oo: Class , Type , Method , Code
|
||||
%p.fragment Utils: String, Integer , Array , Hash
|
||||
%p.fragment also, additional builtin methods
|
||||
|
||||
%section#calling
|
||||
%h2 Calling convention
|
||||
%p linked list (not stack)
|
||||
%p.fragment object oriented
|
||||
%p.fragment easy to understand
|
||||
%p.fragment exceptions easier
|
||||
%p.fragment binding easier
|
||||
|
||||
%section#message
|
||||
%h2 Message Object
|
||||
%p next / caller message
|
||||
%p.fragment frame (locals) + args
|
||||
%p.fragment return address + value
|
||||
%p.fragment method
|
||||
%p.fragment receiver (self)
|
||||
|
||||
%section#project
|
||||
%h2 Project
|
||||
%p 5 years
|
||||
%p 3k commits , 1600 tests
|
||||
%p multi arch ready, arm working
|
||||
%p basic executables (mini rt)
|
||||
%p stable architecture
|
126
app/views/slides/grillrb/_intro.haml
Normal file
126
app/views/slides/grillrb/_intro.haml
Normal file
@ -0,0 +1,126 @@
|
||||
%section#intro
|
||||
%h1 RubyX
|
||||
%p Compile ruby to binary
|
||||
%p in 100% Ruby
|
||||
%p No external dependencies
|
||||
%p Faster ( X times )
|
||||
%p Easy to understand
|
||||
%p Easy to modify own tool
|
||||
%section#torsten
|
||||
%h2 Torsten
|
||||
%p github.com/rubydesign
|
||||
%p 30+ years coding
|
||||
%p Now coding as hobby
|
||||
%section#finland
|
||||
%h2 from Finland
|
||||
%p
|
||||
%img{:alt => "Finland", "data-src" => image_url("slides/grillrb/finland")}/
|
||||
%section#raisa
|
||||
%h2
|
||||
Raisa
|
||||
%small (my wife)
|
||||
%p
|
||||
%img{:alt => "Raisa", "data-src" => image_url("slides/grillrb/raisa") , height: 400}/
|
||||
%section#villataika
|
||||
%h2
|
||||
Run a b&b
|
||||
%small villataika.fi
|
||||
%p
|
||||
%img{:alt => "Villa Taika", "data-src" => image_url("slides/grillrb/villataika") , height: 400}/
|
||||
%section#intro2
|
||||
%h2 RubyX
|
||||
%p Compile ruby to binary in ruby
|
||||
%p.fragment why
|
||||
%p.fragment how
|
||||
%p.fragment future
|
||||
%section#story
|
||||
%h2 Short Story
|
||||
%p About the 60’s
|
||||
%p uncle Bob
|
||||
%p going to Mars
|
||||
%p the Energy solution
|
||||
%section#mars
|
||||
%h2 Mission to the Moon
|
||||
%p ‘61 goal declared by Kennedy
|
||||
%p.fragment ‘69 achieved by Appollo 9
|
||||
%p.fragment 4bit , 2k RAM , 1Mhz
|
||||
%p.fragment Mars 2020, maybe
|
||||
%section#thorium
|
||||
%h2 Molten-Salt Reactor
|
||||
%p Early 60’s nuclear research (Thorium)
|
||||
%p.fragment sucessful run '64-'69 , 7MW
|
||||
%p.fragment Walk away safe , small , little waste
|
||||
%p.fragment Rediscovered by Kirk Sorensen 2008
|
||||
%section#bob
|
||||
%h2 Programming
|
||||
%p Uncle Bob “Future of programming”
|
||||
%p.fragment C ,Unix,Smalltalk ,Lisp ,invented 60’s
|
||||
%p.fragment Engineers doubling every 5 years
|
||||
%p.fragment Go 2009 , Rust 2010 , Julia 2012
|
||||
%section#60s
|
||||
%h2 Theory of 60’s
|
||||
%p Programming, spaceflight, energy
|
||||
%p.fragment Major advancement in 60’s
|
||||
%p.fragment New advancements recently
|
||||
%section#now
|
||||
%h2 Why now
|
||||
%p Simula invented OO concepts in 67
|
||||
%p.fragment Smalltalk (first pure OO) PARC 70’s
|
||||
%p.fragment Popular 80’s , "Blue Book" published
|
||||
%p.fragment Ruby, Python, JS, reincarnated 90’s
|
||||
%p.fragment YARV, mri’s stack machine, 00's
|
||||
%section#speed
|
||||
%h2 The Speed problem
|
||||
%p
|
||||
%large
|
||||
%b 10x
|
||||
%span.fragment possibly 30x
|
||||
%span.fragment sometimes 100x
|
||||
%p.fragment laptop becomes a pi
|
||||
%p.fragment 1k hardware costs 10k
|
||||
%section#effects
|
||||
%h2 Effects of Speed
|
||||
%p 2 language problem (nice OR fast)
|
||||
%p.fragment Limited domains accessible
|
||||
%p.fragment Smaller community
|
||||
%p.fragment less tools
|
||||
%section#problem
|
||||
%h2 Real problem
|
||||
%p Speed is symptom
|
||||
%p.fragment Interpretation is cause
|
||||
%p.fragment Compilation is the solution
|
||||
%section#meta_problem
|
||||
%h2 Meta problem
|
||||
%p Implementation language
|
||||
%p.fragment You can’t fix
|
||||
%p.fragment Ruby is the solution
|
||||
|
||||
%section#whyme
|
||||
%h4 Why me?
|
||||
%h2 I
|
||||
%table
|
||||
%tbody
|
||||
%tr
|
||||
%td
|
||||
%img.no_b{alt: "love", "data-src" => image_url("slides/grillrb/heart.png"), height: 250}
|
||||
%td
|
||||
%td
|
||||
%td
|
||||
%img.no_b{alt: "ruby", "data-src" => image_url("slides/grillrb/ruby.png") , height: 250}
|
||||
%section#also
|
||||
%h2 Also:
|
||||
%p I have time
|
||||
%p.fragment and basic skills
|
||||
%p.fragment and motivation
|
||||
|
||||
%section#motiv
|
||||
%h2 Motivation
|
||||
%p Further the art
|
||||
%p.fragment prove the oo case
|
||||
%p.fragment for the community
|
||||
%p.fragment with you
|
||||
|
||||
%section#demo
|
||||
%h2 Demo
|
||||
%p
|
||||
=link_to "www.ruby-x.org" , "http://www.ruby-x.org"
|
79
app/views/slides/grillrb/_next.haml
Normal file
79
app/views/slides/grillrb/_next.haml
Normal file
@ -0,0 +1,79 @@
|
||||
%section#next
|
||||
%h2 Next Plans
|
||||
%h2 What can you do
|
||||
%h2 Impact on community
|
||||
|
||||
%section#my_next
|
||||
%section#next
|
||||
%h2 My next Plans
|
||||
%p Benchmarks
|
||||
%p Bootstrapping
|
||||
%p Parfait
|
||||
|
||||
%section#bench
|
||||
%h2 Benchmarks
|
||||
%p Micro with mixed results
|
||||
%p.fragment Integer ops slightly slower
|
||||
%p.fragment Calling 2x faster
|
||||
%p.fragment Puts faster than c
|
||||
|
||||
%section#bench_conclusion
|
||||
%h2 Conclusion from Benchmarks
|
||||
%p Bigger benchmarks, more functionality
|
||||
%p.fragment Profiling
|
||||
%p.fragment Macros
|
||||
%p.fragment Inlining
|
||||
|
||||
%section#better_parf
|
||||
%h2 Better Parfait
|
||||
%p Integrate existing tests
|
||||
%p.fragment Complement existing classes
|
||||
%p.fragment More classes
|
||||
%p.fragment Optimize
|
||||
|
||||
%section#better_parf
|
||||
%h2 Bootstrap
|
||||
%p Compile ruby-x with rubyxc
|
||||
%p.fragment Improving compiler
|
||||
%p.fragment Figure out metacode
|
||||
%p.fragment Integrate ruby spec
|
||||
|
||||
%section#you
|
||||
%h2 Things you can do
|
||||
%p Spread the word
|
||||
%p Learn
|
||||
%p Participate
|
||||
|
||||
%section#learn
|
||||
%p Learn about compilers
|
||||
%p.fragment Learn with friends
|
||||
%p.fragment At university
|
||||
|
||||
%section#participate
|
||||
%h2 Participate
|
||||
%p Many topics, small and large
|
||||
%p.fragment Functionality or research
|
||||
%p.fragment no pressure
|
||||
|
||||
%section#topics
|
||||
%h2 Topics
|
||||
%p.fragment assemblers (architectures)
|
||||
%p.fragment Register allocation
|
||||
%p.fragment digital trees (judy)
|
||||
%p.fragment lock free synchronisation (Dr Cliff)
|
||||
%p.fragment stdlib , pi project , . . . . .
|
||||
|
||||
%section#community
|
||||
%h2 Impact on community
|
||||
%p assuming bootstrapped + working
|
||||
%p.fragment new applications
|
||||
%p.fragment desktops, native mobile, server
|
||||
%p.fragment Broaden base, more tools, positive spiral
|
||||
|
||||
%section#programming
|
||||
%h2 Impact on programming
|
||||
%p.fragment compiling JS
|
||||
%p.fragment compiling Python
|
||||
%p.fragment compiling c
|
||||
%p.fragment unification of languages
|
||||
%p.fragment 5th generation
|
53
app/views/slides/grillrb/_what.haml
Normal file
53
app/views/slides/grillrb/_what.haml
Normal file
@ -0,0 +1,53 @@
|
||||
%section#working1
|
||||
%h2
|
||||
Currenty working
|
||||
%small (overview)
|
||||
%p basic oo (classes/ objects)
|
||||
%p.fragment memory layout
|
||||
%p.fragment calling convention
|
||||
%p.fragment binary creation
|
||||
|
||||
%section#vars
|
||||
%h3 variables +
|
||||
%h3 assignment
|
||||
%ul
|
||||
%li local /arg
|
||||
%li ivar
|
||||
%li implicit return
|
||||
|
||||
%section#static
|
||||
%h2 static calling
|
||||
%p argument passing
|
||||
%p constants
|
||||
%p local / ivar
|
||||
%p calls
|
||||
|
||||
%section#dynamic
|
||||
%h2 dynamic sending
|
||||
%p as static, plus
|
||||
%p.fragment method resolution
|
||||
%p.fragment caching
|
||||
|
||||
%section#lambdas
|
||||
%h3 Lambdas
|
||||
%p implicit capture and compilation
|
||||
%p block passing as argument
|
||||
%p yield with arguments
|
||||
%p return (lambda style)
|
||||
|
||||
%section#control
|
||||
%h3 control structures
|
||||
%p if / else / until
|
||||
%p while
|
||||
%p complex conditions
|
||||
%p no break / continue (easy)
|
||||
|
||||
%section#not
|
||||
%h2 Not working
|
||||
%p eval
|
||||
%p procs / binding
|
||||
%p exceptions
|
||||
%p class variables / globals
|
||||
%p multi - assignment
|
||||
%p stdlib
|
||||
%p . . . . . .
|
47
app/views/slides/grillrb/index.haml
Normal file
47
app/views/slides/grillrb/index.haml
Normal file
@ -0,0 +1,47 @@
|
||||
!!!
|
||||
%html{:lang => "en"}
|
||||
%head
|
||||
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
||||
%meta{:charset => "utf-8"}/
|
||||
%title GrillRB 2019
|
||||
%meta{:content => "RubyX, compiling ruby to binary", :name => "description"}/
|
||||
%meta{:content => "Torsten Ruger", :name => "author"}/
|
||||
%meta{:content => "yes", :name => "apple-mobile-web-app-capable"}/
|
||||
%meta{:content => "black-translucent", :name => "apple-mobile-web-app-status-bar-style"}/
|
||||
%meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/
|
||||
= stylesheet_link_tag 'reveal/reveal', media: 'all'
|
||||
%body
|
||||
.reveal
|
||||
.slides
|
||||
= render partial: "slides/grillrb/intro"
|
||||
= render partial: "slides/grillrb/what"
|
||||
= render partial: "slides/grillrb/how"
|
||||
= render partial: "slides/grillrb/next"
|
||||
|
||||
%section#end{:style => "text-align: left;"}
|
||||
%h1 RubyX
|
||||
%p
|
||||
Read up
|
||||
=link_to "ruby-x.org", "https://ruby-x.org"
|
||||
%br/
|
||||
Start coding
|
||||
= link_to "github.com/ruby-x/" , "http://github.com/ruby-x"
|
||||
%br
|
||||
Make contact
|
||||
=link_to "google group ruby-x" , "https://groups.google.com/forum/#!forum/ruby-x"
|
||||
|
||||
= javascript_include_tag "reveal"
|
||||
= javascript_include_tag "highlight"
|
||||
:javascript
|
||||
// More info https://github.com/hakimel/reveal.js#configuration
|
||||
Reveal.initialize({
|
||||
controls: true,
|
||||
progress: true,
|
||||
center: true,
|
||||
hash: true,
|
||||
|
||||
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
||||
|
||||
width: 950,
|
||||
height: 600,
|
||||
});
|
BIN
public/rubyx.odp
BIN
public/rubyx.odp
Binary file not shown.
Loading…
Reference in New Issue
Block a user