Preview

Труды Института системного программирования РАН

Расширенный поиск

Методы оптимизации программ на языке JavaScript, основанные на статистике выполнения программы

https://doi.org/10.15514/ISPRAS-2016-28(1)-1

Аннотация

Язык JavaScript является одним из самых популярных языков для разработки веб-приложений. В связи с ростом производительности персональных компьютеров, мобильных и встраиваемых систем использование JavaScript стало возможным также и в масштабных приложениях. Более того, в настоящее время язык JavaScript активно используется в операционных системах в качестве одного из основных языков для создания пользовательских приложений. Примерами таких систем являются Tizen OS и Firefox OS. С ростом популярности языка многие крупные компании выпустили свои реализации JavaScript, в которых для генерации машинного кода в основном используется многоуровневая динамическая компиляция. В данной работе описываются разработанные методы оптимизации динамических многоуровневых компиляторов с учетом информации о профиле выполнения программы. Метод был реализован в динамическом компиляторе языка JavaScript V8, разработанном компанией Google. Использование профиля выполнения программы позволяет оптимизировать программу для конкретных входных данных. Это особенно актуально в связи с использованием JavaScript в операционных системах. Сценарий использования оптимизации на основе профиля программы в операционных системах следующий: на этапе тестирования программного обеспечения можно организовать сбор информации о профиле программы и использовать его для оптимизации приложений под конкретные случаи выполнения. Одним из новых применений использования информации о профиле программы может быть обеспечение немедленного переключения выполнения часто исполняющихся участков кода на уровень оптимизирующего компилятора. Другое применение - удаление обратных переходов на неоптимизирующие уровни выполнения.

Об авторе

В. Г. Варданян
ЕГУ
Армения


Список литературы

1. Страница платфомы Node.js: nodejs.org.

2. Страница платформы Tizen: tizen.org.

3. Страница платофомы FirefoxOS: www.mozilla.org.

4. Страница компилятора V8: https://developers.google.com/v8/.

5. S. J. Fink и F. Qian, «Design, Implementation, and Evaluation of Adaptive Recompilation with on-stack replacement» Proceedings of the IEEE, pp. 241-252, 2003.

6. T. Ball и J. R. Larus, «Thomas Ball and James R. Larus. Optimally profiling and tracing programs» In POPL ’92: Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles, pp. 59-70, 1992.

7. Страница инфраструктуры LLVM: LLVM.org.

8. Страница компилятора GCC: https://gcc.gnu.org/.

9. R. Zhuykov, V. Vardanyan, D. Melnik, R. Buchatskiy и E. Sharygin, «Augmenting JavaScript JIT with Ahead-of-Time Compilation,» In Proceedings of IEEE,Computer Science and Information Technologies, pp. 116-120, 2015.

10. R. Zhuykov, V. Vardanyan, D. Melnik, R. Buchatskiy и E. Sharygin, «Augmenting JavaScript JIT with Ahead-of-Time Compilation,» 10th International Conference on Computer Science and Information Technologies, pp. 236-240, 2015.

11. S. Jeon и J. Choi, «Reuse of JIT compiled code based on binary code patching in JavaScript engine,» J. Web Eng, pp. 337-349, 2012.

12. В. Варданян, В. Иванишин, С. Асрян, А. Хачатрян и Д. Акопян, «Динамическая компиляция программ на языке JavaScript в статически типизированное внутреннее представление LLVM». Труды Института системного программирования РАН, том 27 (выпуск 6), 2015 г., стр. 33-48. DOI: 10.15514/ISPRAS-2015-27(6)-3

13. V. Vardanyan, «Optimizations of JavaScript programs,» GSPI's scientific journal 2014, pp. 122-128.

14. Р. Жуйков, Д. Мельник, Р. Бучацкий, В. Варданян, В. Иванишин и Е. Шарыгин, «Методы динамической и предварительной оптимизации программ на языке JavaScript,» Труды Института системного программирования РАН, том 26 (выпуск 1), 2014 г., стр. 297-314. DOI: 10.15514/ISPRAS-2014-26(1)-10

15. S.-W. Lee и S.-M. Moon, «Selective just-in-time compilation for client-side mobile javascript engine,» Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems, pp. 5-14, 2011.

16. S.-W. Lee, S.-M. Moon, W.-K. Jung, J.-S. Oh и H.-S. Oh, «Code size and performance optimization for mobile JavaScript just-in-time compiler,» Proceedings of the 2010 Workshop on Interaction between Compilers and Computer Architecture, 2010.

17. V. Vardanyan, S. Asryan и R. Buchatskiy, «Integrated register rematerialization in JavaScript V8 JIT compiler,» 10th International Conference on Computer Science and Information Technologies, pp. 240-244, 2015.

18. Анализ эффективности оптимизаций в компиляторе V8: http://www.cs.cmu.edu/~ishafer/compilers/.

19. Страница платформы Sikuli UI: http://www.sikuli.org/.

20. M. Poletto и V. Sarkar, «Linear scan register allocaton» ACM Transactions on Programming Languages and Systems, pp. 895-913 , 1999.

21. Описаные жадного алгоритма линейного сканирования: http://blog.llvm.org/2011/09/greedy-register-allocation-in-llvm-30.html.


Рецензия

Для цитирования:


Варданян В.Г. Методы оптимизации программ на языке JavaScript, основанные на статистике выполнения программы. Труды Института системного программирования РАН. 2016;28(1):5-20. https://doi.org/10.15514/ISPRAS-2016-28(1)-1

For citation:


Vardanyan V. Profile-based optimizations for JavaScript programs. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2016;28(1):5-20. (In Russ.) https://doi.org/10.15514/ISPRAS-2016-28(1)-1



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2079-8156 (Print)
ISSN 2220-6426 (Online)