|
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
|
|
Статическая и динамическая типизация15.01.2020, 20:25. Показов 3801. Ответов 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
Статическая/динамическая компоновка Статическая и динамическая компановка Статическая или динамическая библиотека Статическая и динамическая нагрузочные прямые Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|