Действительно, преобразование javascript в собственный код обеспечит колоссальное улучшение производительности, однако это совсем не простая задача. При этом существует множество причин, по которым перенос с одного языка на другой затруднен, и это особенно верно, если мы считаем, что основным языком является javascript, а целевым языком - java или что-то подобное C# и цель c.
Javascript сильно отличается от этих языков, многие идеи трудно сопоставить один к одному, а мышление совершенно иное.
Еще одна особенность javascript, которая затрудняет его перенос на другой язык, заключается в том, что javascript никогда не может быть версионным языком, и что, поскольку это язык Интернета, он всегда должен поддерживать обратную совместимость. Это означает, что если инструмент должен был переноситься с javascript на другой язык, этот инструмент должен поддерживать все, что поддерживает javascript - можно возразить, что инструмент может поддерживать только недавнее подмножество javascript, что-то вроде es6, однако это опасно по двум причинам: во-первых, будет трудно точно определить это подмножество, поскольку многие функции es6 работают с полифилами из es5, а во-вторых, это означает, что этот инструмент не сможет поддерживать всю экосистему javascript.
вот некоторые подробности о некоторых сложных частях javascript, которые нужно перевести на язык, например java:
- javascript - это динамический c язык, не только нет ограничений на типы, но и javascript выполняет чрезвычайно сложные методы приведения типов в разных операциях в разных условиях
consider this
true + 1 === 1 + '1' // false
true + 1 === 1 + +1 // true
- Javascript система модулей введена совсем недавно ( начиная с es6) это практически означает, что любая программа представляет собой один огромный кусок кода, в котором переменные проходят через
- Javascript система наследования (система прототипного наследования) сильно отличается от классических систем наследования в этих языках, например, в javascript во время выполнения вы можете изменить класс объекта , в то же время во время выполнения вы также можете изменить методы класса.
Теперь, помимо всех технических проблем, обратите внимание на то, что здесь есть мудрое решение для продукта - сделать RN таким . Это позволило RN быстрее выводить на рынок go и не быть привязанным к определенному родному языку, это означает, что таким способом намного проще поддерживать новые среды, просто перенося элементы управления пользовательского интерфейса в собственный пользовательский интерфейс этой среды и сохраняя javascript как есть. И вдобавок ко всему, если завтра кто-то найдет способ преобразовать javascript в java, этот инструмент можно легко интегрировать в конвейер RN, не затрагивая другие компоненты и поддерживаемые среды RN.