start on minsk

This commit is contained in:
Torsten Rüger 2020-01-30 19:58:23 +07:00
parent 7e391f0369
commit 66cf85c752
10 changed files with 509 additions and 4 deletions

View File

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

View 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;
}

View File

@ -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

View 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

View 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 80s , "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"

View 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

View 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 . . . . . .

View 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,
});

View File

@ -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/"