Я подумал, что, возможно, интерпретатор ruby выполняет аналогичную работу, что потенциально может означать, что проверка типов может увеличить скорость интерпретации.
Это еще не так, но потенциально можно было бы построить это однажды. Целью Sorbet было создание системы типов для людей по сравнению с созданием системы типов для компьютеров (компилятор). Это может привести к снижению производительности, но поскольку Stripe запускает его в производственной среде, мы держим его под контролем. Внутренне мы вызываем нас, если накладные расходы составляют> 7% процессорного времени.
Я немного почитал о динамически типизированных языках (в частности, о Javascript в данном случае) и обнаружил, что если мы продолжаем отправлять какой-либо функции (например, foo) объекты одного и того же типа, движок выполняет некоторую оптимизацию этой функции, поэтому, когда она вызывается снова с теми же типами, интерпретация будет выполняться быстрее.
Да, это можно сделать. То, что вы описываете, является обычной оптимизацией в компиляторах Just-In-Time (JIT). Метод, на который вы, кажется, ссылаетесь, использует профилирование во время выполнения и на самом деле является распространенным альтернативным методом, который позволяет достичь этого результата в отсутствии системы типов. Также стоит отметить, что хорошо построенные JIT могут делать это чаще, чем система типов, поскольку система типов кодирует то, что может произойти, в то время как профилирование и JIT могут оптимизировать то, что фактически происходит на практике< /эм>.
Тем не менее, создание JIT часто требует гораздо больше работы, чем создание онлайн-компилятора, поэтому, в зависимости от суммы инвестиций, которую вы хотите вложить в ускорение Ruby, либо использование JIT, либо использование типов может оказаться лучше в различных реальных условиях. .
Я подумал, что, возможно, интерпретатор ruby выполняет аналогичную работу, что потенциально может означать, что проверка типов может увеличить скорость интерпретации.
Резюмируя предыдущий абзац, система типов Sorbet в настоящее время не ускоряет Ruby, но и не сильно замедляет его. Системы типов действительно можно использовать для ускорения языков, но они не являются вашим единственным инструментом, поскольку основным конкурентом является профилирование и JIT-компиляция.
person
user537862
schedule
08.07.2019