From: Robert Feldt Date: 2006-05-23T17:17:58+09:00 Subject: Re: Performance characteristics of Ruby constructs. ------=_Part_61004_5936012.1148372275718 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On 5/23/06, Ola Bini wrote: > Hi! > > Thank you for the help. > I had forgot about the builtin benchmark.rb, actually. > I don't know of any good general info on speed of different Ruby constructs (there is some in the "Ruby Developers Guide" but probably a bit dated now) but if you decide to use benchmarking the attached benchmarking code might be more useful than the built-in one. It is based on code by Mauricio Fernandez to ensure you have a certain confidence in the measured time results. I simply added a ranked print-out of the times. There is a todo in the comment of things that should be added to make it even more useful (I had code for doing this way back when involved in writing a Ruby book but lost it in a HD crash and haven't had the need for it since then). Anyway if this is useful feel free to use it (and please blog about / publish any generally applicable performance results). Regards, Robert Feldt ------=_Part_61004_5936012.1148372275718 Content-Type: application/x-ruby; name="adaptive_benchmark.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="adaptive_benchmark.rb" X-Attachment-Id: f_enjz6tn4 IyBGcm9tIE1hdXJpY2lvIEZlcm5hbmRlegojIGh0dHA6Ly9laWdlbmNsYXNzLm9yZy9oaWtpLnJi P2FkYXB0YXRpdmUrYmVuY2htYXJrCiMgZXh0ZW5kZWQgYnkgUm9iZXJ0IEZlbGR0CiMgVE9ETzoK IyAgKiBBdXRvLWFkYXB0IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IChUSU1FUykKIyAg KiBSYW5kb21seSBjaG9vc2Ugd2hpY2ggb25lIHRvIHRpbWUgYXQgZWFjaCBzdGVwID0+IGRlY3Jl YXNlCiMgICAgICBhbnkgc3lzdGVtYXRpYyBHQyBlZmZlY3RzCiMgICogU3VidHJhY3QgdGhlIGV4 ZWN1dGlvbiB0aW1lIGZvciBhbiBlbXB0eSBibG9jayB0byB0aW1lIG9ubHkgdGhlCiMgICAgICB0 YXJnZXQgY29uc3RydWN0CiMgICogQ2FsYyBhbmQgcmVwb3J0IHRoZSBhY3R1YWwgdGltZSB1c2Vk IGJ5IGEgc2luZ2xlIHJ1biBvZiB0aGUgY29uc3RydWN0CiMgICAgICBieSBkaXZpZGluZyB0aGUg dG90YWwgdGltZSB3aXRoIHRoZSBudW1iZXIgb2YgcmVwcwojCmNsYXNzIEFkYXB0YXRpdmVCZW5j aG1hcmsKICBkZWYgaW5pdGlhbGl6ZShsZW4sIHJ1bnMpCiAgICBAZmllbGRfbGVuID0gbGVuCiAg ICBAbWluX3J1bnMgPSBydW5zCiAgICBAcmVzdWx0cyA9IEFycmF5Lm5ldwogIGVuZAoKICAjIFVz ZSBibWJtIGluc3RlYWQ7IGdpdmVzIG1vcmUgY29uc2lzdGVudCByZXN1bHRzCiAgZGVmIHNlbGYu Ym0obGVuID0gMTAsIG1pbl9ydW5zID0gMTApIAogICAgcHV0cyAiI3siICIgKiBsZW59ICAgICAg ICBcdHN0ZGRldiAgXHRydW5zXHRpbnRlcnZhbFx0Y29uZmlkZW5jZSIKICAgIHlpZWxkKGFiID0g bmV3KGxlbiwgbWluX3J1bnMpKQogICAgYWIucmVwb3J0X3JhbmtlZF9yZXN1bHRzCiAgZW5kCgog IGRlZiBzZWxmLmJtYm0obGVuID0gMTAsIG1pbl9ydW5zID0gMTApCiAgICAjIFJlaGVyc2FsICh0 byBnZXQgR0MgZ29pbmcpCiAgICBwdXRzICJSZWhlcnNhbDoiCiAgICBwdXRzICIjeyIgIiAqIGxl bn0gICAgICAgIFx0c3RkZGV2ICBcdHJ1bnNcdGludGVydmFsXHRjb25maWRlbmNlIgogICAgeWll bGQgbmV3KGxlbiwgbWluX3J1bnMpCgogICAgcHV0cyAiXG5SZWFsOiIKICAgIHB1dHMgIiN7IiAi ICogbGVufSAgICAgICAgXHRzdGRkZXYgIFx0cnVuc1x0aW50ZXJ2YWxcdGNvbmZpZGVuY2UiCiAg ICB5aWVsZChhYiA9IG5ldyhsZW4sIG1pbl9ydW5zKSkKCiAgICBhYi5yZXBvcnRfcmFua2VkX3Jl c3VsdHMKICBlbmQKCiAgZGVmIHJlcG9ydF9yYW5rZWRfcmVzdWx0cwogICAgcmVzID0gQHJlc3Vs dHMuc29ydF9ieSB7fHB8IHAubGFzdH0KICAgIG1pbl9hdmcgPSByZXMuZmlyc3QubGFzdAogICAg cHV0cyAiXG5SYW5rZWQ6IgogICAgcmVzLmVhY2hfd2l0aF9pbmRleCBkbyB8KG5hbWUsIHNhbXBs ZV9hdmcpLCBpfAogICAgICBwcmludCAiJTJzLiAlLSN7QGZpZWxkX2xlbn1zICU4LjZmXHRcdCUu MmYiICUgCiAgICAgICAgW2krMSwgbmFtZSwgc2FtcGxlX2F2Zywgc2FtcGxlX2F2Zy9taW5fYXZn XQogICAgICBwZXJjZW50YWdlX3Nsb3dlciA9IChzYW1wbGVfYXZnLW1pbl9hdmcpL21pbl9hdmcq MTAwLjAKICAgICAgaWYgc2FtcGxlX2F2ZyAhPSBtaW5fYXZnCiAgICAgICAgcHV0cyAiICAgICsl LjFmJSUiICUgcGVyY2VudGFnZV9zbG93ZXIKICAgICAgZWxzZQogICAgICAgIHB1dHMgIiIKICAg ICAgZW5kCiAgICBlbmQKICBlbmQKCiAgUkVQT1JUX09QVCA9IHs6cHJlY2lzaW9uID0+IDAuMSwg OmNvbmZpZGVuY2UgPT4gMC45OX0KCiAgZGVmIHJlcG9ydChuYW1lLCBvcHRpb25zID0ge30pCiAg ICBvbGRfc3luYywgJHN0ZG91dC5zeW5jID0gJHN0ZG91dC5zeW5jLCB0cnVlCiAgICBvcHQgPSBS RVBPUlRfT1BULmNsb25lLnVwZGF0ZShvcHRpb25zKQogICAgc2FtcGxlX2F2ZyA9IHNhbXBsZV92 YXJpYW5jZSA9IDAKCiAgICB0bXNfdG9fdG90YWwgPSBsYW1iZGF7fHRtc3wgdG1zLnV0aW1lICsg dG1zLnN0aW1lIH0KICAgIAogICAgdGFrZV9zYW1wbGUgPSBsYW1iZGEgZG8gfGl8CiAgICAgIEdD LnN0YXJ0CiAgICAgIHQwID0gdG1zX3RvX3RvdGFsW1Byb2Nlc3MudGltZXNdCiAgICAgIHlpZWxk CiAgICAgIGV4ZWNfdGltZSA9IHRtc190b190b3RhbFtQcm9jZXNzLnRpbWVzXSAtIHQwCiAgICAg IG5ld19zYW1wbGVfYXZnID0gc2FtcGxlX2F2ZyArIChleGVjX3RpbWUgLSBzYW1wbGVfYXZnKSAv IGkKICAgICAgaWYgaSA9PSAxCiAgICAgICAgc2FtcGxlX2F2ZyA9IG5ld19zYW1wbGVfYXZnCiAg ICAgICAgbmV4dAogICAgICBlbmQKICAgICAgc2FtcGxlX3ZhcmlhbmNlID0gKDEgLSAxLjAvaSkg KiBzYW1wbGVfdmFyaWFuY2UgKyAKICAgICAgICAoaSsxKSAqIChuZXdfc2FtcGxlX2F2ZyAtIHNh bXBsZV9hdmcpICoqIDIKICAgICAgc2FtcGxlX2F2ZyA9IG5ld19zYW1wbGVfYXZnCiAgICBlbmQK ICAgIAogICAgKDEuLkBtaW5fcnVucykuZWFjaHt8aXwgdGFrZV9zYW1wbGVbaV0gfQoKICAgIHBv cHVsYXRpb25fdmFyaWFuY2UgPSAxLjAgKiBAbWluX3J1bnMgLyAoQG1pbl9ydW5zIC0gMSkgKiBz YW1wbGVfdmFyaWFuY2UKICAgIGEgPSBvcHRbOnByZWNpc2lvbl0gKiBzYW1wbGVfYXZnCiAgICBu dW1fcnVucyA9IChzYW1wbGVfdmFyaWFuY2UgLyAoYSAqKiAyICogKDEgLSBvcHRbOmNvbmZpZGVu Y2VdKSkpLmNlaWwKICAgIHRvdGFsX3J1bnMgPSBAbWluX3J1bnMrbnVtX3J1bnMKICAgIChAbWlu X3J1bnMrMS4udG90YWxfcnVucysxKS5lYWNoe3xpfCB0YWtlX3NhbXBsZVtpXX0KCiAgICBwb3B1 bGF0aW9uX3ZhcmlhbmNlID0gMS4wICogdG90YWxfcnVucyAvICh0b3RhbF9ydW5zIC0gMSkgKiBz YW1wbGVfdmFyaWFuY2UKICAgIHB1dHMgIiUtI3tAZmllbGRfbGVufXMgJTguNmZcdCU4LjZmXHQl LTZkXHQlOC42Zlx0JTNkJSUiICUgCiAgICAgIFtuYW1lLCBzYW1wbGVfYXZnLCBNYXRoLnNxcnQo cG9wdWxhdGlvbl92YXJpYW5jZSksIHRvdGFsX3J1bnMsCiAgICAgICBhLCBvcHRbOmNvbmZpZGVu Y2VdICogMTAwXQogICAgQHJlc3VsdHMgPDwgW25hbWUsIHNhbXBsZV9hdmddCiAgZW5zdXJlCiAg ICAkc3Rkb3V0LnN5bmMgPSBvbGRfc3luYwogIGVuZAplbmQK ------=_Part_61004_5936012.1148372275718--