1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-19 06:58:02 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
nick-w-nick
79b95744f9 Merge 295fe153ad into 0c1dd29d8d 2024-11-18 13:45:20 -05:00
jbranchaud
0c1dd29d8d Add Output Bytecode For A Ruby Program as a Ruby TIL 2024-11-18 11:22:35 -06:00
nick-w-nick
295fe153ad added mention of ES6 compatibility
Hello, I've added a small blockquote below the description to indicate that this method of accessing an indefinite number of function arguments has been superseded by the use of the spread operator via rest parameters for ES6+ compatibility.
2022-01-06 11:39:04 -05:00
3 changed files with 46 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
_1510 TILs and counting..._
_1511 TILs and counting..._
---
@@ -1249,6 +1249,7 @@ _1510 TILs and counting..._
- [Navigate Back In The Browser With Capybara](ruby/navigate-back-in-the-browser-with-capybara.md)
- [Next And Previous Floats](ruby/next-and-previous-floats.md)
- [Or Operator Precedence](ruby/or-operator-precedence.md)
- [Output Bytecode For A Ruby Program](ruby/output-bytecode-for-a-ruby-program.md)
- [Override The Initial Sequence Value](ruby/override-the-initial-sequence-value.md)
- [Parallel Bundle Install](ruby/parallel-bundle-install.md)
- [Parse JSON Into An OpenStruct](ruby/parse-json-into-an-open-struct.md)

View File

@@ -5,6 +5,8 @@ an array-like object with all of the arguments to the function. Even if not
all of the arguments are referenced in the function signature, they can
still be accessed via the `arguments` object.
> For ES6+ compatibility, the `spread` operator used via [rest parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters) is preferred over the `arugments` object when accessing an abritrary number of function arguments.
```javascript
function argTest(one) {
console.log(one);

View File

@@ -0,0 +1,42 @@
# Output Bytecode For A Ruby Program
The `ruby` CLI comes with a flag to dump the disassembled YARV bytecode for the
given Ruby program. This can be a fun way to explore how a Ruby program is
interpreted under the hood.
Aaron Patterson demoed this behavior during his RubyConf 2024 talk.
Pass the `--dump` flag with `insns` along with either the path to your file or
an inline bit of Ruby.
Here is a really basic example:
```bash
ruby --dump=insns -e '2 + 3'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,5)> (catch: false)
0000 putobject 2 ( 1)[Li]
0002 putobject 3
0004 opt_plus <calldata!mid:+, argc:1, ARGS_SIMPLE>[CcCr]
0006 leave
```
And another quite basic example, but with local variables this time:
```bash
ruby --dump=insns -e 'x = 2; y = 3; x + y'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,19)> (catch: false)
local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 2] x@0 [ 1] y@1
0000 putobject 2 ( 1)[Li]
0002 setlocal_WC_0 x@0
0004 putobject 3
0006 setlocal_WC_0 y@1
0008 getlocal_WC_0 x@0
0010 getlocal_WC_0 y@1
0012 opt_plus <calldata!mid:+, argc:1, ARGS_SIMPLE>[CcCr]
0014 leave
```
If you want to dig in to how to read everything that is going on in these
outputs, I'd recommend checking out this [Advent of YARV
series](https://kddnewton.com/2022/11/30/advent-of-yarv-part-0.html)