I don't know how Ruby handles that, but I guess it's similar to .Net, Python and all interpreted/dynamic languages. For these languages, I think it's ok (and better) to transform load functions to constructors, since "empty" objects are basically useless. That's what I do in SFML.Net, and even in CSFML actually.