[...]
>ruby relies on malloc(3) for low-level allocation, instead of doing it all
>with sbrk(2) and friends.
>
Interesting. (-- takes notes --). Almost seems like cheating :). But
in a good way. I'm going to have read gc.c. Speaking of reading ruby
source, is there an order you would recommend? Every time I look at
it I get overwhelmed by a) not knowing where to start and b) K&R C. I
can power-through the K&R C for the most part I think, but figuring
out what to read when is tougher.
It depends on what you're interested in (/me slaps self). The easiest starting
points would be array.c, hash.c (st.c if you really want to see the underlying
st_table implementation, but it's just your regular hash table), string.c...
that is, the core data structures. They are very easy to read, but maybe not
that interesting ultimately due to this very straightforwardness.
As for the more interesting stuff, here are some functions to begin with:
* eval.c:
* rb_eval: the basic AST walker
* rb_call, rb_get_method_body: method dispatching (+method cache) at work
* rb_add_method: managing the method tables (m_tbl)
* rb_include_module: to see how proxy classes (T_ICLASS) work; bits of
Ruby's object model
....
* parse.y: the grammar + yylex (*tricky*)
This is what I answered to a similar question 3 years ago in [74002]:
Ruby Core
* dln.c: wraps dlopen or the equiv. function of your platform, not very
interesting
* gc.c: quite easy to follow, of interest only if you want to know how
the GC works internally, but it's just mark & sweep doing "common
sense" things so you can safely skip it.
* st.c: a hash table implementation used internally by Ruby, quite
straightforward
* eval.c: much harder to read as you have to know the node types to
follow it; several functions are essentially a big switch() statement
for a node
* parse.y: this can help you see what different node types correspond
to by having a look at the grammar.
* regex.c: whatever, don't read it ![:slight_smile: :slight_smile:](https://emoji.discourse-cdn.com/twitter/slight_smile.png?v=12)
some other .c files contain only support code
Built-in classes
Take the class you like, scroll down to the Init_xxx() function and
locate the C function that implements the method you want to study. No
particular order required.
Hope this helps,
···
On Sat, Jun 03, 2006 at 03:25:02AM +0900, Logan Capaldo wrote:
On Jun 2, 2006, at 4:44 AM, Mauricio Fernandez wrote:
--
Mauricio Fernandez - http://eigenclass.org - singular Ruby