Метафора про компиляцию :)
Главная › Форумы › Разработка игр › Метафора про компиляцию :)
- В этой теме 5 ответов, 2 участника, последнее обновление 6 лет, 10 месяцев назад сделано Сергей Кормишин.
-
АвторСообщения
-
-
19 февраля, 2018 в 19:35 #2522Сергей КормишинХранитель
Привет, ребята!
Я вот недавно объяснял приятелю, что называется “на пальцах” что такое “компиляция”, статическая типизация и анализ типов, может кому-то мое объяснение пригодится.
Грубо говоря программа,- это как конвейер по сборке автомобилей. На вход в конвейер подаем “сырье” (данные, ввод пользователя), а на выходе получаем “тачку” (результат рассчетов, отрисованную картинку, игру и тп).
Так вот компиляция,- это считай проектирование и расстановка функциональных единиц в этом конвейере.
А контроль типов и статическая типизация в отличие от динамической позволяют на этапе проектирования (компиляции) конвейера понять что где-то закралась ошибка. В отличие от динамической типизации когда специалисты по электрике придут и обнаружат, что их заставляют работать над сборкой двигателей. -
19 февраля, 2018 в 19:39 #2524Сергей КормишинХранитель
И в более-менее безопасной с точки зрения типов данных системе – будет сгенерирована ошибка, что мол “эта функция” (специалисты по электрике) не может работать с таким типом данных (не могут выполнять сборку двигателей вместо наладки электрики).
В системе со статической компиляцией – это будет сделано на этапе компиляции (проектирования конвейера).
В системе с динамической типизацией – это будет сделано во время выполнения (когда рабочие в начале рабочего дня или после обеда придут на рабочее место и возопят: Че за!?) -
21 февраля, 2018 в 04:18 #2542ErmitashУчастник
Как раз проверим правильно ли я понимаю. Компиляция- это перевод всего нашего написанного кода в машинный язык, то есть 0 и 1. По поводу типизации, при статической у нас ошибка на этапе компиляции отлавливается, а при динамической при работе уже.
Пример:
class A
{
public:
int a;
int*b;A()
{
a=*b;
}
}int main()
{
A static;
A* dynamic = new A();
return 0;
}До динамика по сути не должно дойти, при компиляции выдаст ошибку на static. Однако, если закомментить static, то прога откомпилится и тогда произойдет ошибка при выполнении программы.
-
21 февраля, 2018 в 10:47 #2545Сергей КормишинХранитель
Из твоего сниппета не оч. понятно где должна быть ошибка :)
На сколько я помню, например, в C# 4.0 есть dynamic, который примерно так работает:
int a = 10;
dynamic b = “string”;
dynamic c = b + a; // во время компиляции ошибки быть не должно, а в runtime – упадет.
Код примерный, я не оч. помню как это работает в C# 4. Тоесть в динамической типизации – ошибка диагностируется при попытке выполнить операцию над объектом типа. -
21 февраля, 2018 в 20:18 #2555ErmitashУчастник
Ды я в C++ его создал. Пока c# не пользуюсь на уровне dynamic
-
22 февраля, 2018 в 20:47 #2581Сергей КормишинХранитель
В С++? Не оч. понял – динамической типизации в плюсах нет, на сколько мне известно) А твой код вроде должен компилироваться…
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.