Rus Eng
О компании
Технологии  
Компилятор переднего плана
Интегрированная среда разработки
Виртуальная машина С\С++
Тестовый набор для отладки компиляторов С\С++
Разработчикам ПО
Производителям микроконтроллеров
Партнеры / Клиенты
Перспективные проекты
| | | |
Главная страница    Технологии    Виртуальная машина С\С++
Виртуальная машина С\С++

Что это такое?

Виртуальная Машина (ВМ) представляет собой программную модель некоего идеализированного компьютера, архитектура которого адекватна соответствующему языку программирования. В нашем случае это означает, что виртуальная машина может непосредственно исполнять так называемое промежуточное представление (ПП), сгенерированное компилятором переднего плана. В рамках работ по компилятору переднего плана С++ виртуальная машина первоначально создавалась как специализированное средство его тестирования. Исходя из этого, виртуальную машину разрабатывал независимый коллектив программистов, который руководствовался исключительно лишь двумя документами: международным стандартом ISO/IEC 14882:1998 (определяющим язык программирования Си++) и спецификацией на промежуточное представление. В результате виртуальная машина устанавливает модельную среду "чистого Си++" - со свойствами, в точности предписанными стандартом, без каких-либо дополнительных допущений.

Какая от этого польза?

Если Вам удалось выполнить на виртуальной машине написанную Вами программу, то тем самым Вам гарантированы по крайней мере два результата:

  • Вы можете быть уверены, что исходный текст Вашей программы статически корректен, поскольку компилятор переднего плана, выполнив лексический, синтаксический и семантический анализ исходного текста, смог сгенерировать промежуточное представление программы;
  • Вы можете быть уверены, что Ваша программа динамически корректна, поскольку виртуальная машина смогла интерпретировать промежуточное представление программы, показав таким образом отсутствие у нее формальных ошибок времени выполнения.

Обратите внимание, что благодаря виртуальной машине Вам предоставлена подробная диагностика во время выполнения, которую зачастую невозможно получить иными способами. В частности, ВМ позволяет выявить такие ошибки, как:

  • неинициализированные объекты;
  • обращение за границу области памяти, отведенной под объект;
  • наличие указателей на уничтоженные объекты (как автоматические, так и в динамической памяти);
  • наличие объектов в динамической памяти, на которые нет указателей;
  • некорректные значения указателей, например, обращение по абсолютному физическому адресу;
  • недопустимые значения фактических аргументов при вызовах функций стандартной библиотеки;
  • недопустимые (некорректные) преобразования типов.

Возможные применения

Ниже перечислены некоторые возможные приложения технологии виртуальной машины. Мы надеемся, что эта технология могла бы оказаться полезной для решения и Ваших задач.

 

Инструментальные средства разработки программного обеспечения

  • эффективные высокоуровневые отладчики с возможностями подробной диагностики времени выполнения
  • средства сбора статистики во время выполнения (частота вызовов какой-либо функции, использование объектов и т.п.)

Автоматизированная верификация и сертификация программ

  • инспекция исходных текстов на соответствие корпоративным требованиям к стилю программирования
  • анализ исходных текстов на отсутствие "закладок", вирусов и т.п.
  • поиск в исходных текстах потенциально опасных обращений (например, по абсолютным физическим адресам)
  • анализ пригодности исходных текстов к переносу на другие платформы и т.д.

Другие приложения

  • специализированные интерпретаторы ("Scripting C++") прекрасный пример доступа к промежуточному представлению с использованием программного интерфейса IR API

Простейший пример

Ниже приведен простейший пример диагностики, которую выдает ВМ во время выполнения:

FATAL.CPP:
#include
#include
#include
#include
#include

int main() {

    int a = 5;
    int *b = &a;

    double *c = (double *)b;

    *c = 12.3;
};

C++ Compiler, Version 2.0
Copyright (c) 1998-2000 Interstron, Moscow, Russia
*** C++ FrontEnd

*** VM execute

Fatal: Not supported pointer conversion, Code: 25
NODE N: 351, Type=62, Source: (double*)b ,
File Name: FATAL.CPP, Str: 12, Pos: 27

ЗАО "Интерстрон" 1998-08.06.2015, ООО "Интерстрон" 09.06.2015 по н.в. Все права защищены.
Москва, Дмитровское шоссе, 1/1
e-mail: interstron-info@mail.ru
web: www.interstron.ru
Тел.: +7 (495) 769-55-68