Preview

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

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

Обзор языковых виртуальных машин и подходов к их тестированию

https://doi.org/10.15514/ISPRAS-2026-38(3)-45

Аннотация

Языковые виртуальные машины (ВМ) обычно используются в инфраструктуре систем программирования для объектно-ориентированных языков высокого уровня. Такие языки пользуются популярностью среди разработчиков и исследователей благодаря следующим особенностям: кроссплатформенности, автоматическому управлению памяти (сборке мусора) и изолированной средой исполнения программы, которая, совместно с верификатором кода загружаемых классов, гарантирует определенный уровень безопасности исполняемой программы. В настоящее время существует большое количество как архитектур системы команд ВМ, так и их реализаций. В данном обзоре приводятся список архитектур ВМ и список популярных реализаций ВМ. В статье иллюстрируется схема работы типовой ВМ. Разработка ВМ – сложный процесс, в ходе которого могут совершаться ошибки. Для обеспечения качества реализации ВМ процесс разработки обязательно включает в себя этап тестирования. В обзоре рассматриваются подходы, нацеленные на тестирование ВМ, и производится их сравнение. Рассматривается возможность использования методов тестирования, приведенных в обзоре, для функционального тестирования реализаций существующих и разрабатываемых архитектур ВМ.

Об авторе

Александр Сергеевич ПРОЦЕНКО
Институт системного программирования им. В.П. Иванникова РАН
Россия

Научный сотрудник отдела технологий программирования ИСП РАН. Область научных интересов: языковые виртуальные машины, микропроцессоры, архитектура системы команд, верификация и тестирование.



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

1. ГОСТ Р. 56938-2016. Защита информации. Защита информации при использовании технологий виртуализации. Общие положения.-М.: Стандартинформ. 2016.

2. Amdahl G.M., Blaauw G.A., Brooks F.P. Architecture of the IBM System/360. IBM Journal of Research and Development, 1964, vol. 8, no. 2, pp. 87-101.

3. Anderson D.W., Sparacio F.J., Tomasulo R.M. The IBM System/360 model 91: Machine philosophy and instruction-handling. IBM Journal of Research and Development, 1967, vol. 11, no. 1, pp. 8-24.

4. Goldberg R.P. Architecture of virtual machines. Proceedings of the workshop on virtual computer systems, 1973, pp. 74-112.

5. Goldberg R.P. Survey of virtual machine research. Computer, 1974, vol. 7, no. 6, pp. 34-45.

6. Smith J., Nair R. Virtual machines: versatile platforms for systems and processes. Elsevier, 2005.

7. Li X.F. Advanced design and implementation of virtual machines. CRC Press, 2016.

8. Описание слогана “Write once, run anywhere”. Доступно по ссылке: https://en.wikipedia.org/wiki/Write_once,_run_anywhere. Дата обращения 10.02.2025.

9. The Java Language Specification. Available at: https://docs.oracle.com/javase/specs/jls/se11/html/index.html, accessed 14.02.2025.

10. Durelli V.H.S., Felizardo K.R., Delamaro M.E. Systematic mapping study on high-level language virtual machines. Virtual Machines and Intermediate Languages, 2010, pp. 1-6.

11. Shi Y. et al. Virtual machine showdown: Stack versus registers. ACM Transactions on Architecture and Code Optimization (TACO), 2008, vol. 4, no. 4, pp. 1-36.

12. Fang R., Liu S. A performance survey on stack-based and register-based virtual machines. arXiv preprint arXiv:1611.00467. 2016.

13. Pemberton S., Daniels M. Pascal implementation. Ellis Horwood, 1982.

14. Sitton G.A., Kendrick T.A., Carrick A.G. The PL/EXUS language and virtual machine. Proceedings of a symposium on High-level-language computer architecture, 1973, pp. 124-130.

15. Goldberg A., Robson D. Smalltalk-80: the language and its implementation. Addison-Wesley Longman Publishing Co., Inc., 1983.

16. Deutsch L.P., Schiffman A.M. Efficient implementation of the Smalltalk-80 system. Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, 1984, pp. 297-302.

17. Xerox 1100 Scientific Information System. Available at: https://archive.computerhistory.org/resources/access/text/2010/06/102660634-05-03-acc.pdf, accessed 19.02.2025.

18. Squeak Virtual Machine. Available at: https://squeak.org/, accessed 14.02.2025.

19. Pharo Virtual Machine. Available at: https://github.com/pharo-project/pharo-vm, accessed 14.02.2025.

20. CHAMBERS C., UNGAR D. Customization: Optimizing compiler technology for SELF, a dynamically-typed object-oriented programming language. ACM SIGPLAN notices, 2004, vol. 39, no. 4, pp. 298-312.

21. The Self Handbook. Available at: https://handbook.selflanguage.org/2024.1/, accessed 18.02.2025.

22. Язык программирования Self. Available at: https://selflanguage.org/, accessed 18.02.2025.

23. Lua 5.3 Bytecode Reference. Available at: https://the-ravi-programming-language.readthedocs.io/en/latest/lua_bytecode_reference.html, accessed 14.02.2025.

24. Ierusalimschy R., De Figueiredo L.H., Celes Filho W. The Implementation of Lua 5.0. J. Univers. Comput. Sci., 2005, vol. 11, no. 7, pp. 1159-1176.

25. Lopez G., Freeman-Benson B., Borning A. Implementing constraint imperative programming languages: the Kaleidoscope'93 virtual machine. Proceedings of the ninth annual conference on Object-oriented programming systems, language, and applications, 1994, pp. 259-271.

26. Disassembler for Python bytecode. Available at: https://docs.python.org/3/library/dis.html#python-bytecode-instructions, accessed 18.02.2025.

27. Ike-Nwosu O. Inside the Python Virtual Machine, 2015.

28. Java Language and Virtual Machine Specifications. Available at: https://docs.oracle.com/javase/specs/index.html, accessed 14.02.2025.

29. The Kaffe Virtual Machine. Available at: https://github.com/kaffe/kaffe, accessed 14.02.2025.

30. Krall A. Efficient JavaVM just-in-time compilation. Proceedings. 1998 International Conference on Parallel Architectures and Compilation Techniques (Cat. No. 98EX192, IEEE), 1998, pp. 205-212.

31. Alpern B. et al. Implementing Jalapeno in Java. ACM SIGPLAN Notices, 1999, vol. 34, no. 10, pp.314 324.

32. Alpern B. et al. The Jalapeno virtual machine. IBM Systems Journal, 2000, vol. 39, no. 1, pp. 211-238.

33. The Java HotSpot Performance Engine Architecture. Available at: https://www.oracle.com/java/technologies/whitepaper.html, accessed 14.02.2025.

34. Jikes RVM. Available at: https://www.jikesrvm.org/, accessed 17.02.2025.

35. Gagnon E.M., Hendren L.J. {SableVM}: A Research Framework for the Efficient Execution of Java Bytecode. Java (TM) Virtual Machine Research and Technology Symposium (JVM 01), 2001.

36. About the Oracle JRockit JDK. Available at: https://docs.oracle.com/cd/E15289_01/JRSDK/aboutjrockit.htm, accessed 14.02.2025.

37. Eclipse OpenJ9. Available at: https://eclipse.dev/openj9/, accessed 17.02.2025.

38. Kumar A.B.V. Supercharge Your Applications with GraalVM: Hands-on examples to optimize and extend your code using GraalVM's high performance and polyglot capabilities, Packt Publishing Ltd, 2021.

39. Introduction to GraalVM. Available at: https://www.graalvm.org/latest/introduction/, accessed 19.02.2025.

40. SpiderMonkey Bytecode Descriptions. Available at: https://udn.realityripple.com/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode, accessed 17.02.2025.

41. SpiderMonkey. Available at: https://firefox-source-docs.mozilla.org/js/index.html, accessed 17.02.2025.

42. ECMA-335 -Common Language Infrastructure (CLI). Available at: https://ecma-international.org/publications-and-standards/standards/ecma-335/, accessed 14.02.2025.

43. Общие сведения о платформе .NET. Available at: https://learn.microsoft.com/ru-ru/dotnet/framework/get-started/overview, accessed 14.02.2025.

44. The Mono Runtime. Available at: https://www.mono-project.com/docs/advanced/runtime/, accessed 14.02.2025.

45. Understanding V8’s Bytecode. Available at: https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775, accessed 18.02.2025.

46. V8 JavaScript engine. Available at: https://v8.dev/, accessed 18.02.2025.

47. Dalvik bytecode format. Available at: https://source.android.com/docs/core/runtime/dalvik-bytecode, accessed 17.02.2025.

48. Oh H.S. et al. Evaluation of Android Dalvik virtual machine. Proceedings of the 10th international workshop on java technologies for real-time and embedded systems, 2012, pp. 115-124.

49. Configure ART. Available at: https://source.android.com/docs/core/runtime/configure, accessed 17.02.2025.

50. Android runtime and Dalvik. Available at: https://source.android.com/docs/core/runtime, accessed 17.02.2025.

51. Introduction to Parrot. Available at: https://parrot.github.io/parrot-docs1/1.1.0/html/docs/intro.pod.html, accessed 17.02.2025.

52. A Parrot Overview. Available at: https://parrot.github.io/html/docs/overview.pod.html, accessed 17.02.2025.

53. Wang K. et al. Micro Virtual Machines: A Solid Foundation for Managed Language Implementation: Ph. D. Dissertation. Australian National University. DOI: 1885/147871, 2018.

54. The Mu Micro Virtual Machine. Available at: https://microvm.github.io/, accessed 14.02.2025.

55. Haas A. et al. Bringing the web up to speed with WebAssembly. Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation, 2017, pp. 185-200.

56. Gurdeep Singh R., Scholliers C. WARDuino: a dynamic WebAssembly virtual machine for programming microcontrollers. Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes, 2019, pp. 27-36.

57. Lauwaerts T., Singh R. G., Scholliers C. WARDuino: An embedded WebAssembly virtual machine. Journal of Computer Languages, 2024, vol. 79, pp. 101268.

58. Panda Bytecode Description. Available at: https://gitee.com/openharmony/arkcompiler_runtime_core/tree/master/static_core/isa, accessed 19.02.2025.

59. Panda Runtime. Available at: https://gitee.com/openharmony/arkcompiler_runtime_core/blob/master/static_core/docs/panda-runtime.md, accessed 19.02.2025.

60. JavaScript language overview. Available at: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Language_overview, accessed 18.02.2025.

61. Juneau J. et al. The definitive guide to Jython: Python for the Java platform. Apress, 2010.

62. Foord M., Muirhead C. IronPython in action. Manning Publications Co., 2009.

63. Операционная система Android. Available at: https://www.android.com/intl/ru_ru/what-is-android/, accessed 19.02.2025.

64. Irtoc tool. Available at: https://gitee.com/openharmony/arkcompiler_runtime_core/blob/master/static_core/docs/irtoc.md, accessed 18.03.2025.

65. Кулямин В.В. Методы верификации программного обеспечения, 2008, 111 с.

66. ГОСТ Р. 56939-2024. Защита информации. Разработка безопасного программного обеспечения. Общие требования. М.: Стандартинформ, 2024, 36 с.

67. Sirer E.G., Bershad B.N. Using production grammars in software testing. ACM SIGPLAN Notices, 1999, vol. 35, no. 1, pp. 1-13.

68. Информация о версиях JDK. Available at: https://www.java.com/releases/, accessed 24.12.2024.

69. The Microsoft Java Virtual Machine (MSJVM). Available at: https://en.wikipedia.org/wiki/Microsoft_Java_Virtual_Machine, accessed 24.12.2024.

70. Meyer J., Downing T. Java virtual machine. O'Reilly & Associates, Inc., 1997.

71. Jasmin is an assembler for the Java Virtual Machine. Available at: https://jasmin.sourceforge.net/, accessed 24.12.2024.

72. McKeeman W. M. Differential testing for software. Digital Technical Journal, 1998, vol. 10, no. 1, pp.100 107.

73. Sirer E. G., Bershad B. N. Testing Java virtual machines. Proc. Int. Conf. on Software Testing and Review, 1999.

74. Netscape Navigator. Available at: https://ru.wikipedia.org/wiki/Netscape_Navigator, accessed 24.12.2024.

75. Yoshikawa T., Shimura K., Ozawa T. Random program generator for Java JIT compiler test system. Third International Conference on Quality Software, 2003. Proceedings IEEE, 2003, pp. 20-23.

76. Calvagna A., Tramontana E. Automated conformance testing of Java virtual machines. 2013 Seventh International Conference on Complex, Intelligent, and Software Intensive Systems. IEEE, 2013, pp.547 552.

77. NuSMV: a new symbolic model checker. Available at: https://nusmv.fbk.eu/, accessed 24.12.2024.

78. The Byte Code Engineering Library. Apache Commons BCEL. Available at: https://commons.apache.org/proper/commons-bcel/, accessed 24.12.2024.

79. Kyle S. et al. Application of domain-aware binary fuzzing to aid Android virtual machine testing. ACM SIGPLAN Notices, 2015, vol. 50, no. 7, pp. 121-132.

80. Chen Y. et al. Coverage-directed differential testing of JVM implementations. Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation, 2016, pp. 85-99.

81. Jimple is the intermediate representation IR of Soot. Available at: https://soot-oss.github.io/SootUp/v1.1.2/jimple/, accessed 24.12.2024.

82. Soot – A framework for analyzing and transforming Java and Android applications. Available at: https://soot-oss.github.io/soot/, accessed 24.12.2024.

83. IBM SDK, Java Technology Edition, Version 8. Available at: https://www.ibm.com/support/pages/java-sdk-downloads-version-80, accessed 21.02.2025.

84. Guide to GNU gcj. Available at: https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcj/, accessed 21.02.2025.

85. Chen Y., Su T., Su Z. Deep differential testing of JVM implementations. 2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE). IEEE, 2019, pp. 1257-1268.

86. DaCapo Benchmarks. Java. Available at: https://www.dacapobench.org/, accessed 24.12.2024.

87. OpenJDK. Available at: http://openjdk.java.net, accessed 24.12.2024.

88. Renouf C. The IBM J9 Java Virtual Machine for Java 6. Pro IBM WebSphere Application Server 7 Internals, 2009, pp. 15-34.

89. Polito G., Ducasse S., Tesone P. Interpreter-guided differential JIT compiler unit testing. Proceedings of the 43rd ACM SIGPLAN International Conference on Programming Language Design and Implementation, 2022, pp. 981-992.

90. Tikovsky J. R. Concolic testing of functional logic programs. International Workshop on Functional and Constraint Logic Programming. Cham: Springer International Publishing, 2017, pp. 169-186.

91. Polito G. et al. Cross-ISA testing of the Pharo VM: lessons learned while porting to ARMv8. Proceedings of the 18th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes, 2021, pp. 16-25.

92. Misse-Chanabier P. Testing a virtual machine developed in a simulation-based virtual machine generator: дис. Université de Lille, 2022.

93. Zhao Y. et al. History-Driven Test Program Synthesis for JVM Testing. In 2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE). 1133–1144. https://doi.org/10.1145/3510003.3510059.

94. IBM Software Developers Kit (SDK). Available at: http://www.ibm.com/developerworks/java/jdk, accessed 24.12.2024.

95. Wu M. et al. JITfuzz: Coverage-guided Fuzzing for JVM Just-in-Time Compilers. In 2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE). 56–68. DOI: 10.1109/ICSE48619.2023.00017.

96. Wu M. et al. SJFuzz: Seed and Mutator Scheduling for JVM Fuzzing. Proceedings of the 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, 2023, pp. 1062-1074. https://doi.org/10.1145/3611643.3616277.

97. DragonWell от Alibaba. Available at: https://github.com/alibaba/dragonwell11, accessed 24.12.2024.

98. Zulu от Azul. Available at: http://www.azulsystems.com/products/zulu, accessed 24.12.2024.

99. Yang X. et al. Finding and understanding bugs in C compilers. Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation, 2011, pp. 283-294.

100. Язык программирования C. Available at: https://www.open-std.org/JTC1/SC22/WG14/, accessed 28.02.2025.

101. Zhang Q., Sun C., Su Z. Skeletal program enumeration for rigorous compiler testing. Proceedings of the 38th ACM SIGPLAN conference on programming language design and implementation, 2017, pp. 347 361.

102. GCC, the GNU Compiler Collection. Available at: https://gcc.gnu.org/, accessed 04.03.2025.

103. Clang: a C language family frontend for LLVM. Available at: https://clang.llvm.org/, accessed 04.03.2025.

104. C Language Testsuites. Available at: https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gccint/C-Tests.html, accessed 13.05.2025.

105. Zang Z. et al. Compiler testing using template java programs. Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering, 2022, pp. 1-13.

106. Oracle JDK. Available at: https://www.oracle.com/ae/java/technologies/downloads/, accessed 25.02.2025.

107. Степанов Д.С. Исследование и разработка методов автоматического поиска ошибок в компиляторах языков программирования: диссертация на соискание уч. ст. к. т. н., Санкт-Петербург, 2024.

108. Blackburn S.M. et al. Rethinking Java Performance Analysis. Proceedings of the 30th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 1, 2025, pp. 940-954.

109. Java Compatibility Kit 19 (JCK 19). Available at: https://www.oracle.com/bg/corporate/accessibility/templates/t2-12642.html, accessed 28.02.2025.

110. Shiv K. et al. SPECjvm2008 performance characterization. SPEC Benchmark Workshop, Berlin, Heidelberg : Springer Berlin Heidelberg, 2009, pp. 17-35.

111. Howden W. E. Theoretical and empirical studies of program testing. IEEE Transactions on Software Engineering, 1978, no. 4, pp. 293-298.


Рецензия

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


ПРОЦЕНКО А.С. Обзор языковых виртуальных машин и подходов к их тестированию. Труды Института системного программирования РАН. 2026;38(3):37-58. https://doi.org/10.15514/ISPRAS-2026-38(3)-45

For citation:


PROTSENKO A.S. A Survey of Language Virtual Machines and Approaches to Their Testing. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2026;38(3):37-58. (In Russ.) https://doi.org/10.15514/ISPRAS-2026-38(3)-45



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


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