paralines
bootsnap
paralines | bootsnap | |
---|---|---|
2 | 4 | |
44 | 2,640 | |
- | 0.2% | |
0.0 | 8.0 | |
over 2 years ago | about 1 month ago | |
Ruby | Ruby | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
paralines
-
Simple MapReduce that melt my brain (yes, fibers there)
Now the problem: how to organize concurrency/parallelization? (I like to do parallel things with Ruby)
-
ParaLines gem — nice output to console/file from concurrent threads
https://github.com/Inversion-des/paralines https://rubygems.org/gems/paralines
bootsnap
-
Abstract Methods and NotImplementedError in Ruby
Indeed, I did not mention Bootsnap so as to detract the core point.
> That's one of the things Bootsnap does to speedup boot time. And when you do that, there's no compilation at runtime.
Correct, if one does `bootsnap precompile`.
Bootsnap hooks itself on `Kernel#load` + `Kernel#require` and `RubyVM::InstructionSequence#load_iseq`:
https://github.com/Shopify/bootsnap/blob/f627992c52642394311...
https://github.com/Shopify/bootsnap/blob/f627992c52642394311...
https://github.com/Shopify/bootsnap/blob/f627992c52642394311...
https://github.com/Shopify/bootsnap/blob/f627992c52642394311...
Essentially this means that it makes LOAD_PATH lookup faster + intercepts iseq compilation to store to cache on a miss and return a cached version on a hit.
That does not change the load order.
> But that doesn't change anything about OP's suggestion, it's still impossible to know if an interface will ever be implemented.
Again correct, as even with `bootsnap precompile` it would only result in earlier ISeq generation (it is essentially cache priming instead of doing it "lazily" on demand), not the time at which these ISeq get loaded and effective, so even then an `abstract` keyword would be ineffective.
-
Long story short: I build a Ruby extension with Zig
I always had mixed feelings about writing native Ruby extensions. They surely are the way to make critical parts of the code run faster, but the developer experience around that was not great for a Ruby programmer like me. Sure, I know C. This was the second language I learned (after Pascal). I can write C, I can read C, and I even wrote some larger extensions in it, but I never felt comfortable with it.
- Acelerando o boot da sua aplicação Rails
-
Cut your Rails boot times on Heroku in half with a single command
To alleviate this problem, the engineers at Shopify created bootsnap, a gem which automatically detects and caches exact load paths to make those require calls fast (see Bootsnap: Optimizing Ruby App Boot Time for details).
What are some alternatives?
Async Ruby - An awesome asynchronous event-driven reactor for Ruby.
heroku-buildpack-ruby - Heroku's buildpack for Ruby applications.
Coltrane - 🎹🎸A music theory library with a command-line interface
wordmove - Multi-stage command line deploy/mirroring and task runner for Wordpress
Puts Debuggerer - Ruby library for improved puts debugging, automatically displaying bonus useful information such as source line number and source code.
zig-ruby
super_spreader - ActiveJob-based backfill orchestration library
memo_wise - The wise choice for Ruby memoization
snapcrawl - Crawl a website and take screenshots
colorls - A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. :tada: