ContractedValue
bootsnap
ContractedValue | bootsnap | |
---|---|---|
1 | 4 | |
6 | 2,640 | |
- | 0.2% | |
5.3 | 8.0 | |
7 months 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.
ContractedValue
-
Cells - Introduction
Above implemented via my own gem contracted_value and feel free to swap it with any other value object implementation which can be gems or your own code.
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?
dry-struct - Typed struct and value objects
heroku-buildpack-ruby - Heroku's buildpack for Ruby applications.
ActiveAttr - What ActiveModel left out
wordmove - Multi-stage command line deploy/mirroring and task runner for Wordpress
contracts.ruby - Contracts for Ruby.
Coltrane - 🎹🎸A music theory library with a command-line interface
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:
paralines - Nice output to console/file from concurrent threads