@python_beginnersЭта группа больше не существует

Страница 263 из 1885
⬗VLAD⌶K⬖
09.08.2016
12:45:16
я смотрю торрент никому не понравился?)

Bulat
09.08.2016
12:45:55
поставлю качать вечером

⬗VLAD⌶K⬖
09.08.2016
12:48:57
Например, библиотеки для языка Python могут распространяться либо в виде файлов с исходным кодом (расширение «py»), либо в виде файлов с байт-кодом[4] (расширение «pyc», буква «c» от англ. compiled

Темный
09.08.2016
12:49:58
я смотрю торрент никому не понравился?)
а что там? для вновь не читающих тонну флуда)

Google
Stanislav
09.08.2016
12:50:15
Так а чем он лучше?

Быстрее?

⬗VLAD⌶K⬖
09.08.2016
12:50:36
запускается быстрее в разы

сам посуди близкий к процессору код уже больше похожий на машинный с инструкциями интерпретатору

либо сырой текстовый файл с раширением, для большого исходника разница огромная

Zart
09.08.2016
12:53:45
Быстрее?
быстрее чего?

Stanislav
09.08.2016
12:53:58
.py и запуска из консольки

Denis
09.08.2016
12:54:15
Единственный плюс .pyc - закрытые исходники

Stanislav
09.08.2016
12:54:16
Если он все равно прогоняется через интерпритатор

Он же не на проце выполняется

Stanislav
09.08.2016
12:54:33
Единственный плюс .pyc - закрытые исходники
Так декомпилится вообще изи

Google
Stanislav
09.08.2016
12:54:36
С комментариями

.pyo вырезает комменты

Denis
09.08.2016
12:54:51
В последних версиях убрали

Stanislav
09.08.2016
12:55:02
Для 2 есть

Zart
09.08.2016
12:55:11
так, давайте по порядку

⬗VLAD⌶K⬖
09.08.2016
12:55:19
Он же не на проце выполняется
он минует стадию анализа кода на валидность

так как уже обработан процессором

Zart
09.08.2016
12:55:53
процессор исполняет машинный код - набор байтиков в памяти, которые он считывает по очереди и выполняет базовые инструкции - операции с регистрами, ветвления, вот это всё

я еще застал эпоху когда приходилось вбивать циферками вот это всё 8)

Zart
09.08.2016
12:57:28
чтобы понимать происходящее был придуман ассемблер - это символьный язык, в котором опкодам процессора назначены текстовые мнемоники, но тем не менее этот язык практически остается один-в-один соответствующим машинным кодам

⬗VLAD⌶K⬖
09.08.2016
12:57:33
на разных архитектурах процессора pyc файл не исполнится*

Zart
09.08.2016
12:57:53
pyc не зависит от архитектуры

Denis
09.08.2016
12:58:01
на разных архитектурах процессора pyc файл не исполнится*
На разных питонах может и нет, на разных процессорах исполнится

⬗VLAD⌶K⬖
09.08.2016
12:58:10
да ну. вики вроде правду говорит

Zart
09.08.2016
12:59:03
но писать на таком низком уровне достаточно утомительно, поэтому были разработаны более высокоуровневые языки - фортран, алгол, ада

чтобы перевести более человекопонятные тексты в машинный код было придумано несколько методов базовые - компиляция и интерпретация

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

компиляция же занималась трансляцией высокоуровневых команд в наборы машиных кодов напрямую, что давало очень высокую скорость исполнения

Google
Zart
09.08.2016
13:02:35
должно быть очевидно что в случае с интерпретацией достаточно портировать только интерпретатор на другой проц, но сами программы оставить как есть в случае с компиляцией, весь собранный код придётся компилировать заново под процессор с другой системой команд

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

в нем по сути были просто незаполненные поля для адресов переходов. и эту задачку решал линкер - он брал на входе набор этих полуфабрикатов и размещал их в памяти, заполняя уже финальными адресами пробелы

позднее появился гибридный вариант, p-code, он же байткод, когда вместо компиляции в нативные машинные коды, компиляция выполнялась в более абстрактную модель

так работали вижел бейсик, перл, жаба

⬗VLAD⌶K⬖
09.08.2016
13:06:51
бэйсик вообще раньше был некомпилируемым, помню

Zart
09.08.2016
13:07:11
хз что ты помнишь, ибо их было дохера

и были и компилируемые и интерпретируемые варианты

⬗VLAD⌶K⬖
09.08.2016
13:08:12
частный случай, ибо их дохера

Zart
09.08.2016
13:08:59
p-code/байткод - этот гибридный метод позволяет получать преимущества портабельности интерпретируемых языков - потому что код генерируется под универсальную абстракцию и преимущества компиляции - когда байткод можно либо очень быстро интерпретировать (JVM, питон и иже с ним), либо собрать из него нативный бинарник на лету (JIT, CLR), который будет работать на практически максимальной скорости

возвращаясь к pyc файлам

их состав предельно прост и не менялся с момента их появления. первые 4 байта - волшебный маркер версии 4 байта - отметка времени (os.path.gmtime), а дальше идёт сериализованный встроенным маршалером код объект

⬗VLAD⌶K⬖
09.08.2016
13:11:05
хорошо, любой байткод работает покуда есть интепретатор, это понятно, на всяком ли компьютере будет работать сам интерпретатор=) если взять какой нибудь частный случай процессора?

Zart
09.08.2016
13:12:12
что делает питон когда импортирует модуль с диска он сперва ищет .pyc (либо в __pycache__ начиная с третьего питона), либо рядом с файлом (второй, и в третьем для совместимости) если есть и метка времени с нем равна оригинальному - загружает его и пропускает всю стадию парсинга и обхода АСТ и генерации байткода

это дает солидную экономию времени для импорта

Bulat
09.08.2016
13:13:24
не зря спросил про байт-код :)

Stanislav
09.08.2016
13:13:31
Хорошо, это понятно

Для библиотек полезно, для импорта

Zart
09.08.2016
13:14:05
хорошо, любой байткод работает покуда есть интепретатор, это понятно, на всяком ли компьютере будет работать сам интерпретатор=) если взять какой нибудь частный случай процессора?
обычно байткоды дизайнят независимо от реальной архитектуры, что не мешает производителям железа реализовать потом эту абстракцию в реальном силиконе выходили java-процессоры, которые умеют напрямую выполнять байткод JVM. в ARM архитектуру в частности завезли расширения, которые позволяют такое делать на армах

Stanislav
09.08.2016
13:14:06
А если скрипт одиночка? Будет ли прирост в скорости когда выполняется скрипт?

Google
Zart
09.08.2016
13:14:39
python script.py <--- это не импорт. для скриптов байткод не сохраняется и не ищется

тем не менее питон умеет запускать .pyc напрямую. ему просто пофиг

а в jython pyc файлов нет. там идёт трансляция исходников питона в ява-классы, после чего они компилируются в родной байткод и кэшируются как .class файлы

а в IronPython понятия байткода нет вовсе

Danil
09.08.2016
13:16:51
а чо, разве в IL не компилируется?

Zart
09.08.2016
13:16:52
в комплекте идёт тулза, которая перегоняет питоновые исходники в одну здоровую ассембли на clr

оно генерит его на лету

опциональная тулза позволяет сохранить как дллку

правда она достаточно убога пока что, и собирает в неё весь грёбаный стдлиб, либы и твой код

Stanislav
09.08.2016
13:17:57
Admin
ERROR: S client not available

Zart
09.08.2016
13:17:58
разбить на ассембли ей низзя

⬗VLAD⌶K⬖
09.08.2016
13:18:36
в крестах обджект файл так вообще просто огромный

Stanislav
09.08.2016
13:18:43
Я думал ты про импорты писал

Zart
09.08.2016
13:18:49
это побочный эффект шаблонизации

Stanislav
09.08.2016
13:18:50
Типо импортит быстрее

Zart
09.08.2016
13:18:56
ну да

я же писал что для скриптов байткод не сохраняется

Stanislav
09.08.2016
13:20:37
Его можна сделать .pyc python -m compileall .

Google
Zart
09.08.2016
13:21:01
при python script.py питон на script.pyc смотреть не будет

хоть закомпиляйся

Stanislav
09.08.2016
13:21:32
Ага, то-есть невозможно сделать так?

Бля я запутался

Zart
09.08.2016
13:21:45
python script.pyc можно

Stanislav
09.08.2016
13:22:13
Ну

И будет быстрее?

Zart
09.08.2016
13:22:21
ты заебал

Stanislav
09.08.2016
13:22:29
Чем если бы запускать python script.py

Zart
09.08.2016
13:22:33
ручник с тормоза сними

⬗VLAD⌶K⬖
09.08.2016
13:22:55
?

Zart
09.08.2016
13:23:15
будет, но в общем случае достаточно мало особенно если весь скрипт из import django; django.main()

или какойнить фигни в этом духе

Stanislav
09.08.2016
13:23:36
Кстати А можно закомпилить весь проэкт джанго?

Будет быстрее?

Zart
09.08.2016
13:23:48
бля... я пошел

⬗VLAD⌶K⬖
09.08.2016
13:24:05
в компаниях за скорость работы спросят=)

Zart
09.08.2016
13:24:18
хинт: изя/пип при установке компилируют ёбаный проект полностью

ты б хоть раз заглянул бы в стдлиб или установленные пакеты в site-packages. вопрос бы отпал

Stanislav
09.08.2016
13:26:03
?

Я думал git clone python manage.py runserver ??????? Profit

⬗VLAD⌶K⬖
09.08.2016
13:26:46
ты продеплой не спрашивал же

Страница 263 из 1885

Эта группа больше не существует Эта группа больше не существует