Смешивание слабо типизированных и строго типизированных для интерпретации и компиляции с байт-кодом? - PullRequest
0 голосов
/ 02 августа 2020

Я думал о том, чтобы, возможно, иметь такой язык, как C ++, который имеет шаблоны и рассматривает шаблоны как интерпретируемый язык, например Python. Таким образом, он будет генерировать какой-то байт-код, чтобы, когда у вас есть что-то, что еще не разрешено, его можно было запустить, когда указан конкретный тип c. Например:

template<typename T>
void foo(T& value) {
   value.foo(1 + 1);
}

В приведенном выше случае неизвестно, существует ли foo() для T. Таким образом, шаблон необходимо инициировать для каждого переданного ему типа. Если бы было какое-то представление байт-кода, это было бы похоже на интерпретатор, подобный Python, во время компиляции. Байт-код будет сгенерирован только один раз для шаблона, а затем каждый экземпляр будет просто запускать байт-код. Именно тогда он решит, существует ли foo() для типа.

Это также позволит запускать код во время компиляции, так как его можно просто интерпретировать с помощью байт-кода, который уже должен быть сгенерирован.

Есть ли другие языки, которые делают что-то подобное? Где я могу узнать больше о байт-коде? Информация о типе по-прежнему должна передаваться в байт-коде, но многие реализации, на которые я смотрел, уже уменьшены до точки, где на самом деле нет никакой информации о типе, и байт-код просто работает с меньшими единицами, по сути, с тем, что процессор делает.

...