Каков наилучший способ компилировать JavaScript-подобные структуры в статический, быстрый C ++?

0

Что касается разработки компилятора с языка, очень похожего на JavaScript на C++, мне нужен способ представления структур данных. Основными структурами данных JavaScript являются массивы и хэш-таблицы. Массивы более сложны: я могу использовать вектор нетипизированных указателей. Он должен быть вектором, потому что массивы JS являются динамическими и указателями, потому что массивы JS могут содержать любой объект, например:

var array = [1,2,[3,4],"test"];

Я не вижу способа представить это, кроме этого (есть?). Для хэшей я мог бы использовать что-то похожее, за исключением включения шага хеширования строки на доступ.

Проблема заключается в следующем: JavaScript-хэши JIT-компилируются в реальные C++ объекты, которые, вероятно, намного быстрее, чем хеши. Таким образом, я боюсь, что моя попытка сгенерировать C++, как это, приведет к более медленному коду, чем версия JavaScript!

  1. Имеет ли это смысл?
  2. Какой был бы лучший подход к моему компилятору?
  • 0
    Как насчет простой репликации того, что делают JIT-компиляторы JavaScript, и создания скрытых классов для распространенных шаблонов объектов? mrale.ph/blog/2012/06/03/...
  • 1
    Вы повторно обнаружили одну из многих причин, по которым быстрые динамические реализации языка выполняют адаптивную оптимизацию во время выполнения. Компилятор AOT плохо подходит для этих языков, точка. Если вы хотите конкурировать с JIT-компиляторами в этом отношении, не пишите AOT-компилятор.
Показать ещё 2 комментария
Теги:
data-structures
compiler-construction

1 ответ

0

Если это компилятор AOT, вы можете обрабатывать только хэш-ключи, которые вы видите во время компиляции. В этом случае вы можете изменять хеш-доступ к известным ключам к обращениям к массиву, предоставляя каждому известному ключу небольшое целое число как индекс.

  • 0
    function f(o) { return o.a; }; f({a: 1, b: 2}); f({a: 1, c: 2});
  • 0
    В этом случае компилятор знает, что ключи a , b и c всегда будут доступны, и может преобразовать хеширование в простой смещенный доступ.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню