Метафора про компиляцию :)

Главная Форумы Разработка игр Метафора про компиляцию :)

Просмотр 5 веток ответов
  • Автор
    Сообщения
    • #2522
      Сергей Кормишин
      Хранитель

      Привет, ребята!

      Я вот недавно объяснял приятелю, что называется “на пальцах” что такое “компиляция”, статическая типизация и анализ типов, может кому-то мое объяснение пригодится.

      Грубо говоря программа,- это как конвейер по сборке автомобилей. На вход в конвейер подаем “сырье” (данные, ввод пользователя), а на выходе получаем “тачку” (результат рассчетов, отрисованную картинку, игру и тп).

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

    • #2524
      Сергей Кормишин
      Хранитель

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

      В системе со статической компиляцией – это будет сделано на этапе компиляции (проектирования конвейера).
      В системе с динамической типизацией – это будет сделано во время выполнения (когда рабочие в начале рабочего дня или после обеда придут на рабочее место и возопят: Че за!?)

    • #2542
      Ermitash
      Участник

      Как раз проверим правильно ли я понимаю. Компиляция- это перевод всего нашего написанного кода в машинный язык, то есть 0 и 1. По поводу типизации, при статической у нас ошибка на этапе компиляции отлавливается, а при динамической при работе уже.
      Пример:
      class A
      {
      public:
      int a;
      int*b;

      A()
      {
      a=*b;
      }
      }

      int main()
      {
      A static;
      A* dynamic = new A();
      return 0;
      }

      До динамика по сути не должно дойти, при компиляции выдаст ошибку на static. Однако, если закомментить static, то прога откомпилится и тогда произойдет ошибка при выполнении программы.

    • #2545
      Сергей Кормишин
      Хранитель

      Из твоего сниппета не оч. понятно где должна быть ошибка :)
      На сколько я помню, например, в C# 4.0 есть dynamic, который примерно так работает:

      int a = 10;
      dynamic b = “string”;
      dynamic c = b + a;
      // во время компиляции ошибки быть не должно, а в runtime – упадет.
      Код примерный, я не оч. помню как это работает в C# 4. Тоесть в динамической типизации – ошибка диагностируется при попытке выполнить операцию над объектом типа.

    • #2555
      Ermitash
      Участник

      Ды я в C++ его создал. Пока c# не пользуюсь на уровне dynamic

    • #2581
      Сергей Кормишин
      Хранитель

      В С++? Не оч. понял – динамической типизации в плюсах нет, на сколько мне известно) А твой код вроде должен компилироваться…

Просмотр 5 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
Понравилась статья? Поделиться с друзьями:
Автор snezhok_13
Время от времени пишет статьи о разработке игр и проводит интервью с разработчиками. Сейчас работает engine-progremmer'ом в Larian Studios. Большой поклонник игр Naughty Dog.