LINUX.ORG.RU

История изменений

Исправление FishHook, (текущая версия) :

это не переменные, у них id одинаков и это константы, под которые память в программе не выделена

в питоне первые 256 интегеров закешированы

В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.

виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?


def double(a):
   return a + a


print(double(10))
print(double("abc"))
  1. виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
  2. а + а рассахариватеся в а.__add__(a)
  3. ВМ ищет ключ с именем __add__ в хеш таблице
  4. Если не нашла, идет в класс и ищет __add__ в хеш-таблице класса
  5. Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение

То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.

Исправление FishHook, :

это не переменные, у них id одинаков и это константы, под которые память в программе не выделена

в питоне первые 256 интегеров закешированы

В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.

виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?


def double(a):
   return a + a


print(double(10))
print(double("abc"))
  1. виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
  2. а + а рассахариватеся в а.__add__(a)
  3. ВМ ищет ключ с именем __add__ в хеш таблице
  4. Если не нашла, идет в класс и ищет add в хеш-таблице класса
  5. Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение

То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.

Исправление FishHook, :

это не переменные, у них id одинаков и это константы, под которые память в программе не выделена

в питоне первые 256 интегеров закешированы

В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.

виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?


def double(a):
   return a + a


print(double(10))
print(double("abc"))
  1. виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
  2. а + а рассахариватеся в а.__add__(a)
  3. ВМ ищет ключ с именем add в хеш таблице
  4. Если не нашла, идет в класс и ищет add в хеш-таблице класса
  5. Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение

То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.

Исходная версия FishHook, :

это не переменные, у них id одинаков и это константы, под которые память в программе не выделена

в питоне первые 256 интегеров закешированы

В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.

виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?


def double(a):
   return a + a


print(double(10))
print(double("abc"))
  1. виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
  2. а + а рассахариватеся в а.add(a)
  3. ВМ ищет ключ с именем add в хеш таблице
  4. Если не нашла, идет в класс и ищет add в хеш-таблице класса
  5. Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение

То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.