Ruby uses the “just take an object and add some singleton methods to it” approach:
[: public ,: private ,: include ,: context ,: conf ,: irb_quit ,: exit ,: quit ,: irb_print_working_workspace ,: irb_cwws ,: irb_pwws ,: cwws ,: pwws ,: irb_current_working_binding ,: irb_print_working_binding ,: irb_cb irb_pwb ,: irb_chws ,: irb_cws ,: chws ,: cws ,: irb_change_binding ,: irb_cb ,: cb ,: workspaces ,: irb_bindings ,: bindings ,: irb_pushws ,: pushws ,: irb_push_binding ,: irb_ppb, : popws ,: irb_pop_binding ,: irb_popb ,: popb ,: source ,: jobs ,: fg ,: kill ,: help ,: irb_exit ,: irb_context ,: install_alias_method ,: irb_current_working_workspace ,: irb_change_workspace ,: irb_workspp_bp_bop ,: irb_load ,: irb_require ,: irb_source ,: irb ,: irb_jobs ,: irb_fg ,: irb_kill ,: irb_help]