で結局Luaのシンボル探索はどうなのか

以下極めていい加減な内容ですのでアテにしないでください


lua-5.1.3のltable.cを流し読みしてみました。

  • ハッシュ値をごにょごにょしているらしい
  • 先頭から順に1つ1つ確認していっているらしい
  • キーに自然数を使うとその数字を元にインデックスを出すので高速らしい

有用なのは最後1つくらい?
そもそも連想配列で要素探すのに先頭から見ていく以外方法ないですよね。ソートしてない限りは。
やるなら中途半端にソース読むよりベンチ取るべきでした。


なんでこんなことで悩んでいるかというと、何でもかんでも関数をグローバルに配置すると実行時の関数探索コストが増加するんじゃないかと気になったから。
実際にはシンボル数は200程度になりそうですし、Twitter上でのことですが「60fpsで作りたいもの作れればそれでよい」って意見もありまして。
徹底的にソース読んだりベンチ取ったりする気がないならウンウン唸ってないで何でもいいから作り続けたほうがいいのかも。




あとでサークルの先輩とltable.cを見直したところごくごく普通のハッシュの形だったことに気がつきました。

a = テーブル[ハッシュ値]
do {
    if(a.key == 探しているキー)
        return a;
    a = a->next;
} while(a);

大雑把に書けばこんなの?
Luaのことですから細かいこと気にしなくてもちゃんと高速に動くように作ってくれているんでしょう。