|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
Статическая и динамическая типизация15.01.2020, 20:25. Показов 3791. Ответов 16
Метки нет (Все метки)
Статическая и динамическая типизация
Статические языки программирования заставляют Вас указывать тип каждой переменной, который определяет, сколько места переменная займёт в памяти и что с ней можно сделать. Компьютер использует эту информацию, что-бы скомпилировать программу в очень низкоуровневый машинный язык. Статические языки программирования машины понимают быстрее. Переменные в этих языках не могут изменять свой тип они статичны. Целое число — это целое число, раз и навсегда. <Примеры программ на статических языках программирования C++, C#, Perl, Ruby> Динамические языки не заставляют Вас определять тип переменных перед тем, как их использовать. Утиная типизация: «Если это выглядит как утка и крякает как утка, значит это утка». >>> "Если это выглядит как утка и крякает как утка значит это утка" 'Если это выглядит как утка и крякает как утка значит это утка' >>> x = 5 >>> y = "5" >>> type(5) <class 'int'> >>> type(y) <class 'str'> >>> Значение 5 — целое число, без объявления типа переменной. Динамические языки не компилируются (переводят код в понятный компьютеру код) программой, а интерпретируются. И вот здесь мой вопрос, как я понимаю код (инструкции) в python компилируется в байт-код, а затем PVM (виртуальной машиной) данный байт-код интерпретируется для нас с вами, ну если утрировано (там много всяких нюансов). Но не в этом суть. Меня интересует в чем принципиальное отличие этапа компиляции статическим языком процессору компьютера от момента интерпретирования PVM (виртуальной машиной) в python. PVM наверно также обращается к процессору компьютера, и так же транслирует или переводит какой-то код? А? Гуру помогите новобранцу?
0
|
|
| 15.01.2020, 20:25 | |
|
Ответы с готовыми решениями:
16
Динамическая типизация в классах Динамическая/статическая типизация, интерпретация/компиляция и функциональные языки - плюсы и минусы Статическая и динамическая память |
|
|
|||
| 15.01.2020, 21:14 | |||
|
Скомпилированный байткод исполняется виртуальным процессором.
1
|
|||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|||
| 15.01.2020, 21:26 [ТС] | |||
|
0
|
|||
|
|
||||
| 15.01.2020, 21:47 | ||||
|
Впрочем, при кодировании даже на С++ это далеко не всегда нужно программисту (вот если кодить на асме - тут, наверняка, понадобится) Тем более, это не нужно пишущему на Python.
1
|
||||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 15.01.2020, 22:19 [ТС] | |
|
Командные строки служат для запуска программ на Python из командной оболочки системы в следующем формате:
python [параметр*] [ файл_сценария | -c команда | -m модуль | -] [arg*] В этом формате python обозначает интерпретатор языка Python, исполняемый как по полностью указанному пути к каталогу, так и по слову python, зарезервированному в командной оболочке системы (например, в переменной окружения PATH). Параметры командной строки (параметр), определяющие режим работы интерпретатора Python, обычно указываются перед именем исполняемой программы, тогда как аргументы (arg), требующиеся для выполнения программы, - после ее имени. Я еще не совсем разобрался с этим вопросом, поэтому сформулировать вопрос мне пока будет затруднительно. Предварительно, командная оболочка просто обращается к интерпретатору и ни как не связана с внутренними процессами происходящими между интерпретатором и процессором или я что-то не понимаю? И что понимается все таки под аргументами? Добавлено через 14 минут Garry Galler,
0
|
|
|
|
||||
| 15.01.2020, 23:48 | ||||
Сообщение было отмечено AlexMarkov как решение
РешениеКонрентно про передачу параметров - смотрим модуль sys: https://python-scripts.com/module-sys. Подробнее - гуглим.
1
|
||||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 16.01.2020, 00:07 [ТС] | |
|
C Perl и Ruby я ошибся, ссылочка в тему спасибо!
0
|
|
|
Просто Лис
|
||||||||
| 16.01.2020, 05:16 | ||||||||
|
* порядок байтов
1
|
||||||||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 16.01.2020, 11:00 [ТС] | |
|
Я понял, а как в Python обстоят дела с объектами?
Как я понимаю в python все объект. Информация о типе так же является классом, т.е. таким же объектом. Тип Ещё одно свойство объекта — тип. Под «типом» объекта обычно подразумевается класс объекта. >>> x = "The Duck" >>> id(x) 60633200 >>> type(x) <class 'str'> >>> Если вы хотите использовать объект для перебора элементов, мы помещаем его в цикл for. Вы не проверяете, чем является объект. >>> for duck in 1,2,3,4,5: print(duck) 1 2 3 4 5 >>> Если операция завершится неудачей — нормально, это всего лишь говорит о том, что Вы предоставили неправильный тип. Что переводится в байт код? ID, имя переменной, информация о типе и сам объект? И как все таки обстоят дела с типом, если тип также класс объекта, то какого объекта? Что является последним объектом в этой цепочке? В данном примере <class 'str'> (тип строка) что из себя представляет?
0
|
|
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 16.01.2020, 11:32 [ТС] | |
|
Garry Galler, Рыжий Лис,???
0
|
|
|
|
|
| 16.01.2020, 11:39 | |
|
AlexMarkov, в байт-код переводится питоновский код. Это можно заключить даже из названия термина
![]() С типом дела обстоят хорошо. Он имеет тип type. "Какого объекта" - спрашивать неверно. "Какого класса" - можно.
1
|
|
|
Просто Лис
|
|||||||||||
| 16.01.2020, 11:47 | |||||||||||
|
В байт-коде очень много информации. На практике можно легко декомпилировать приложение.
Пример:
1
|
|||||||||||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
||
| 16.01.2020, 12:03 [ТС] | ||
|
dondublon,
>>> type(x) <class 'int'> >>> type(type(x)) <class 'type'> >>> Это немного на объект повыше или мне это знать не обязательно. Рыжий Лис, а можно пример декомпиляции более сложного словаря, а то так не совсем понятно и способ декомпилирования?
0
|
||
|
Просто Лис
|
|||||||||||
| 16.01.2020, 12:20 | |||||||||||
|
https://docs.python.org/3/library/dis.html
Добавлено через 2 минуты
1
|
|||||||||||
|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
| 16.01.2020, 12:36 [ТС] | |
|
Рыжий Лис, спасибо за пример но тут в документации есть одна фраза:
Детали реализации CPython: Байт-код - это деталь реализации интерпретатора CPython. Нет никаких гарантий, что байт-код не будет добавлен, удален или изменен между версиями Python. Использование этого модуля не должно рассматриваться для работы с виртуальными машинами Python или версиями Python. Вот что у меня получилось Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=1, argrepr='1', offset=0, starts_line=1, is_jump_target=False) Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=2, argrepr='2', offset=2, starts_line=None, is_jump_target=False) Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=3, argrepr='3', offset=4, starts_line=None, is_jump_target=False) Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=('a', 'b', 'c'), argrepr="('a', 'b', 'c')", offset=6, starts_line=None, is_jump_target=False) Instruction(opname='BUILD_CONST_KEY_MAP' , opcode=156, arg=3, argval=3, argrepr='', offset=8, starts_line=None, is_jump_target=False) Instruction(opname='STORE_NAME', opcode=90, arg=0, argval='d', argrepr='d', offset=10, starts_line=None, is_jump_target=False) Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval=None, argrepr='None', offset=12, starts_line=None, is_jump_target=False) Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=14, starts_line=None, is_jump_target=False) Скорее похоже на запись инструкций, чем на предоставленном выше примере. Ну все равно спасибо, в образовательных целях самое то.
0
|
|
|
|
||
| 16.01.2020, 13:58 | ||
|
Кстати, на стековерфлоу есть хороший тред для понимания того как устроена питоновская вирт. машина исполнения и чем она отличается от Java VM. https://stacko_verflow.com/que... r-parlance
(пробел убрать, без него форум блокирует ссылку на этот ресурс)
Относительно Python - непосредственно машинные инструкции генерит такая реалиазция Python как pypy (точнее его JIT компилятор), классический же CPython использует предварительные скомпилированные машинные инструкции.
2
|
||
| 16.01.2020, 13:58 | |
|
Помогаю со студенческими работами здесь
17
Статическая/динамическая компоновка Статическая и динамическая компановка Статическая или динамическая библиотека Статическая и динамическая нагрузочные прямые Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|