start on minsk
This commit is contained in:
parent
7e391f0369
commit
66cf85c752
@ -188,7 +188,7 @@ GEM
|
||||
ast (~> 2.2)
|
||||
public_suffix (3.0.3)
|
||||
puma (3.12.2)
|
||||
rack (2.0.6)
|
||||
rack (2.0.8)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rails (5.2.2)
|
||||
|
BIN
app/assets/images/slides/blue_book.png
Normal file
BIN
app/assets/images/slides/blue_book.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 218 KiB |
19
app/assets/stylesheets/slides.scss
Normal file
19
app/assets/stylesheets/slides.scss
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
||||
* listed below.
|
||||
*
|
||||
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
|
||||
* vendor/assets/stylesheets directory can be referenced here using a relative path.
|
||||
*
|
||||
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
||||
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
||||
* files in this directory. Styles in this file should be added after the last require_* statement.
|
||||
* It is generally better to create a new file per style scope.
|
||||
*
|
||||
*= require_self
|
||||
*= require reveal/reveal
|
||||
*/
|
||||
|
||||
.red{
|
||||
color: red;
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
.row
|
||||
%h2.center Compiling Ruby to Binary.
|
||||
%h2.center The community's ruby implementation
|
||||
%div
|
||||
%p.center
|
||||
%span
|
||||
Putting wings on ruby to let you fly (may take X years).
|
||||
Ruby imiplemented in 100% ruby, for everyone.
|
||||
.row
|
||||
.tripple
|
||||
%h2.center What
|
||||
@ -31,6 +31,17 @@
|
||||
=succeed "," do
|
||||
=link_to "empower you" , "/project/motivation.html"
|
||||
to make your ruby shine as much as you like.
|
||||
%p
|
||||
Since rubyX is written in ruby, anyone can easily join, and
|
||||
the project is very open to newcomers. In time the idea is to implement
|
||||
a democratic version of open source, as an alternative the current
|
||||
"benevolent dictator" model.
|
||||
%p
|
||||
Contrary to what many newcomers think, ruby-x is also technically easy to join.
|
||||
In the end it is just ruby, and only a very small percent of code is low level.
|
||||
We have a list
|
||||
=ext_link "of issues" , "https://github.com/ruby-x/rubyx/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+newbie%22"
|
||||
in github for beginners.
|
||||
.tripple
|
||||
%h2.center Status
|
||||
%p
|
||||
|
163
app/views/slides/minsk/_how.haml
Normal file
163
app/views/slides/minsk/_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
|
139
app/views/slides/minsk/_intro.haml
Normal file
139
app/views/slides/minsk/_intro.haml
Normal file
@ -0,0 +1,139 @@
|
||||
%section#intro
|
||||
%h1 RubyX
|
||||
%h2 community's ruby
|
||||
%p in 100% Ruby (compiler)
|
||||
%p No external dependencies
|
||||
%p Easy to understand
|
||||
%p Easy to join
|
||||
%section#torsten
|
||||
%h2 Torsten
|
||||
%h3 rubydesign
|
||||
%p github, twitter, medium , .fi
|
||||
%p 30+ years coding
|
||||
%p Now coding as hobby
|
||||
%section#method
|
||||
%h2 Method
|
||||
%h3 Chronological
|
||||
%p not top down / technical
|
||||
%p answer questions
|
||||
%section#style
|
||||
%h2 Style
|
||||
%p ruby "happiness"
|
||||
%p programmers fulfillment
|
||||
%section#study
|
||||
%h2 Why
|
||||
%p Studied physics
|
||||
%p Theoretical physics
|
||||
%h3 Bottomm Up thinking
|
||||
%section#happiness
|
||||
%h2 Road to happiness
|
||||
%table
|
||||
%tr
|
||||
%td 1994
|
||||
%td Fortran
|
||||
%td ★☆☆☆☆
|
||||
%tr.fragment
|
||||
%td 1994
|
||||
%td C++
|
||||
%td ★★★☆☆☆
|
||||
%tr.fragment
|
||||
%td 1996
|
||||
%td java
|
||||
%td ★★★★☆
|
||||
%tr.fragment
|
||||
%td 2001
|
||||
%td ruby
|
||||
%td ★★★★★
|
||||
%h4.fragment but real happiness . . .
|
||||
|
||||
%section#finland
|
||||
%h2 1999 move to Finland
|
||||
%p
|
||||
%img{:alt => "Finland", "data-src" => image_url("slides/grillrb/finland.jpg")}/
|
||||
%section#raisa
|
||||
%h2
|
||||
Raisa
|
||||
%small (2004 my wife)
|
||||
%p
|
||||
%img{:alt => "Raisa", "data-src" => image_url("slides/grillrb/raisa.jpg") , height: 400}/
|
||||
%section#work
|
||||
%h2
|
||||
Woodwork
|
||||
%small (2010 ecoframe)
|
||||
%p
|
||||
%img{:alt => "Villa Taika", "data-src" => image_url("slides/grillrb/villataika.jpg") , height: 400}/
|
||||
|
||||
%section#smallalk
|
||||
%h2 1995: Smalltalk
|
||||
%p Popular 80’s , "Blue Book" published
|
||||
%p
|
||||
%img{:alt => "Blue book", "data-src" => image_url("slides/blue_book.png") , height: 200}/
|
||||
%p Read and tried, but failed
|
||||
|
||||
%section#db
|
||||
%h2 2008: Purple
|
||||
%p In memory db
|
||||
%p core judy (C), rest ruby
|
||||
%p super performance, until used from rails
|
||||
%h3 Ruby has performance issues
|
||||
|
||||
%section#pi
|
||||
%h2 2013: PI
|
||||
%p pi becomes an arduino
|
||||
%p.fragment laptop becomes a pi
|
||||
%p.fragment
|
||||
Speed problem
|
||||
%b 10x
|
||||
possibly
|
||||
%b 30x
|
||||
sometimes
|
||||
%b 100x
|
||||
%section#start
|
||||
%h2 2013: PI
|
||||
%p pi becomes an arduino
|
||||
%p.fragment laptop becomes a pi
|
||||
%p.fragment
|
||||
Speed problem
|
||||
%b 10x
|
||||
possibly
|
||||
%b 30x
|
||||
sometimes
|
||||
%b 100x
|
||||
%section#start2
|
||||
%p Start 2014 at Frozen ruby
|
||||
%p.fragment started vm mindset
|
||||
%p.fragment main descisions
|
||||
%p.fragment good progress
|
||||
%section#no_vm
|
||||
%h2 Beginning
|
||||
%p learn arm
|
||||
%p check llvm and others
|
||||
%p 6 classes assembler
|
||||
%p 3 classes binary creation
|
||||
%p binaries easy, 1 month
|
||||
%section#calling
|
||||
%h2 Calling convention
|
||||
%p
|
||||
C or
|
||||
%span.red no C
|
||||
%p object oriented
|
||||
%p named fields
|
||||
%p simple, not too slow
|
||||
|
||||
%section#sending
|
||||
%h2 Dynamic calling
|
||||
%p very difficult
|
||||
%p many failed ideas
|
||||
%p "years" of trying
|
||||
%h3 decent layers
|
||||
|
||||
%section#demo
|
||||
%h2
|
||||
Demo of
|
||||
=link_to "cli" , "https://github.com/ruby-x/rubyx/blob/master/lib/rubyx/rubyxc.rb"
|
||||
%p
|
||||
%br
|
||||
=link_to "www.ruby-x.org" , "http://www.ruby-x.org"
|
||||
%p
|
||||
%br
|
||||
=link_to "github.com/ruby-x" , "https://github.com/ruby-x/rubyx"
|
73
app/views/slides/minsk/_next.haml
Normal file
73
app/views/slides/minsk/_next.haml
Normal file
@ -0,0 +1,73 @@
|
||||
%section#next
|
||||
%h2 Plans for RubyX
|
||||
%h2 What can you do
|
||||
%h2 Impact on community
|
||||
|
||||
%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#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 , gc , . . . . .
|
||||
|
||||
%section#community
|
||||
%h2 Impact on community
|
||||
%p assuming bootstrapped + working
|
||||
%p.fragment new applications
|
||||
%p.fragment desktops, native mobile, server, ai
|
||||
%p.fragment Broaden base, more tools, positive spiral
|
||||
|
||||
%section#evolution
|
||||
%h2 Evolution
|
||||
%p small core , gems + bundler
|
||||
%p.fragment democracy of gems
|
||||
%p.fragment better gc, better hash
|
||||
%p.fragment good thrive etc
|
||||
%p.fragment best results when not controlled
|
53
app/views/slides/minsk/_what.haml
Normal file
53
app/views/slides/minsk/_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/minsk/index.haml
Normal file
47
app/views/slides/minsk/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 Minsk 2020
|
||||
%meta{:content => "RubyX, community's ruby implementation", :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 'slides', media: 'all'
|
||||
%body
|
||||
.reveal
|
||||
.slides
|
||||
= render partial: "slides/minsk/intro"
|
||||
= render partial: "slides/minsk/what"
|
||||
= render partial: "slides/minsk/how"
|
||||
= render partial: "slides/minsk/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,
|
||||
});
|
@ -13,7 +13,7 @@ Rails.application.config.opal.dynamic_require_severity = :ignore
|
||||
# application.js, application.css, and all non-JS/CSS in the app/assets
|
||||
# folder are already added.
|
||||
Rails.application.config.assets.precompile += %w( debug.js debug.css
|
||||
reveal/reveal.css reveal.js highlight.js)
|
||||
slides.css reveal.js highlight.js)
|
||||
|
||||
Rails.application.config.assets.paths << "#{Gem.loaded_specs["rubyx-debugger"].gem_dir}/assets/"
|
||||
Rails.application.config.assets.paths << "#{Gem.loaded_specs["rubyx-debugger"].gem_dir}/lib/"
|
||||
|
Loading…
Reference in New Issue
Block a user