The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Для Python предложен JIT-компилятор, использующий технику copy-and-patch"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Для Python предложен JIT-компилятор, использующий технику copy-and-patch"  +/
Сообщение от opennews (??), 26-Дек-23, 14:28 
Брандт Букер (Brandt Bucher) из компании Microsoft, входящий в число core-разработчиков CPython и  работающий команде, занимающейся увеличением производительности интерпретатора CPython, опубликовал  реализацию JIT-компилятора для Python, использующую технику Copy-and-Patch. Публикация JIT приурочена к Рождеству и анонс написан в стихах...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=60352

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (-), 26-Дек-23, 14:28   –4 +/
> runtime-компоненты сводятся примерно к 300 вручную написанным строкам на языке Си и 3000 сгенерированным строкам кода на Си.

Интересно, сколько дыр будет в этих 300 строках?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #48, #73

3. Сообщение от Аноним (3), 26-Дек-23, 14:35   +8 +/
Помнится Google все пыталась как-то ускорить Python, проекты делалЮ работников напрягал. Потом плюнули на это неблагодарное дело и создали Go. Теперь вот Microsoft что-то пытается сделать там, где это не особо легко by-design. Лично я жду mojo на посмотреть, что они там сделают.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4, #5, #21, #41, #55, #72

4. Сообщение от Аноним (4), 26-Дек-23, 14:45   –8 +/
Гугл никогда ничего не сделал за всю свою историю, так что не удивительно. Да и успехи мс с питоном всё наглядно демонстрируют.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #11

5. Сообщение от Tron is Whistling (?), 26-Дек-23, 14:47   +2 +/
А получилось только у фейсбука с PHP - HHVM. Но потом идеи затянули в PHP 7 и 8, и HHVM тоже стал не нужен.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

6. Сообщение от Аноним (6), 26-Дек-23, 14:55   +7 +/
>При работе JIT в процессе выполнения программы осуществляется перебор созданных интерпретатором инструкций байткода и копирование для каждой инструкции заранее скомпилированного машинного кода в область памяти с исполняемым кодом, а также изменение на лету инструкций для подстановки в них обрабатываемых данных (JIT копирует готовые шаблоны уже скомпилированных функций и подставляет в них необходимые значения, такие как аргументы и константы). При загрузке объектных файлов также осуществляется копирование машинного кода в память и подстановка внешних символов.

Стековая машина что-ли? Я писал jit-компищятор на основе техники copy and patch. Было quick and dirty. Кончилось тем, что я это выкинул и написал x86-специфичный аллокатор регистров + энкодер инструкций (constexpr функции!) + constant size структуру для хранения инструкций + двухпроходный компилятор + кучу кода в inline assembly для интеграции отжитенного кода в остальную программу - все функции, вызываемые из горячего цикла пришлось в виде ассемблера в программу всунуть.

Пoтому что сишный и плюсовый код норовили заюзать регистры, которые я заюзал в jitе, зарезервировать их оказалось невозможно ни в gcc, ни в шланге (register type varName asm ("regName") не резервирует регистр!), сохранять на стеке перед каждым вызовом ВСЕ РЕГИСТРЫ (потому что компиляторы не имеют интерфейса, чтобы им сообщить свою calling convention для каждой функции и/или блока кода отдельно) ОЧЕНЬ тормознуто, при этом компилеро-сгенерированный код (по подстановкам в asm-блоках, не буду же я регистры напрямую юзать, это неудобно) не гнушался портить %rbp, поэтому пришлось всунуть его в clobber-list, теперь компилер орёт, что это deprecated.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #7, #10, #22, #28, #36

7. Сообщение от Аноним (7), 26-Дек-23, 15:06   +5 +/
Все регистры пришлось сохранять ещё потому, что на максимальных флагах защиты от всех микроархитектурных уязвимостей компилер всё нулил при выходе из функции, не анализируя, откуда функция вызывается. Ещё очень неудобно вызывать функции из асм-кода. Приходртся самому всё класть на стэк. Изменяется прототип - всё насмарку, уследить за этим трудно. Зато у меня одна из самых быстрых программ. К сожалению пока неопубликована. У меня есть кое-какие идеи как этот джит выкинуть, сгенерировав экспоненциально много (а для этого нужно будет произвести большой поиск в графе состояний ветвями и границами, при этом результат гарантированно даст не очень большой показатель экспоненты, так что будет feasible) функций силами компилятора, шаблонов, constexpr и хардкода, а потом выбрав нужную. Если покажет производительрость наравне или выше джита - вообще джит выкину. Тогда и зарелижу.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #9, #25

8. Сообщение от Аноним (8), 26-Дек-23, 15:07   +2 +/
Ускоряют питон, а он все не ускоряется
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #19, #114

9. Сообщение от Аноним (9), 26-Дек-23, 15:11   +8 +/
Ты =очень= крутой, аноним.

Но пользоваться твоей программой я, конечно, не буду.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #13, #14, #38

10. Сообщение от Аноним (10), 26-Дек-23, 15:14   +/
>сохранять на стеке

Вообще сохранять на стеке очень тормознуто, горячий обрамляющий цикл сделан так, что стэк код вообще редко трогает и оптимизирован с помощью llvm-mca. Отjitенный код стек вообще не трогает, переходы туда и обратно jmpами, все аргументы в регистрах.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #79

11. Сообщение от ebpfsfan (?), 26-Дек-23, 15:15   –8 +/
ога, половина интернета в котором ты сидишь сделана гуглом, все так
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #15, #23

12. Сообщение от _kp (ok), 26-Дек-23, 15:17   –1 +/
JIT - это лишние тормоза, считай полумеры.
Так бы и написали что компиляцию в нативный код не осилили, ибо из за динамической типизации все равно фигня с производительностью.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #33, #59, #81

13. Сообщение от Аноним (13), 26-Дек-23, 15:17   +/
А никто и не заставляет :). Кушайте Растишку.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #42

14. Сообщение от Аноним (14), 26-Дек-23, 15:19   +1 +/
И я не крутой. Я просто перфекционист.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #43

15. Сообщение от Аноним (4), 26-Дек-23, 15:19   +7 +/
>сделана гуглом

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

вообще, разработка софта там явно не в приоритете

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #67

17. Сообщение от ИмяХ (ok), 26-Дек-23, 15:41   +/
То есть питон сейчас стал в 100 раз быстрее?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #24, #45

18. Сообщение от Аноним (18), 26-Дек-23, 15:45   –1 +/
> и анонс написан в стихах

а маска на презентации скучная не кожаная

Ответить | Правка | Наверх | Cообщить модератору

19. Сообщение от sig11 (ok), 26-Дек-23, 15:45   +/
Кто сказал, что ускоряют?
"а в среднем отстал по производительности на 35%,"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

21. Сообщение от Вы забыли заполнить поле Name (?), 26-Дек-23, 15:54   +2 +/
Google сделал v8, так что ускорять они умеют. Ты говоришь про https://github.com/google-deepmind/s6 ? Ну есть numba в замену к нему.

Более того есть другие технологии, тот же https://github.com/facebookincubator/cinder

В ядре питона уже поняли что нужно ускорять и занимаются этим, хотя пока до внедрения жита не дошло, но это в планах https://github.com/faster-cpython/ideas

Кстати, pyston на практике не так сильно повышает производительность в отличие от pypy

Что касается go, то это другой язык.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

22. Сообщение от Проходил мимо (?), 26-Дек-23, 15:57   +/
Судя по описанию, вами была проделана впечатляющая работа. Но у меня, после прочитанного, создалось впечатление, что проще было бы критичное по скорости ядро "движка" сразу писать на ассемблере, а на всем остальном делать только высокоуровневую обвязку.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #30

23. Сообщение от Пряник (?), 26-Дек-23, 15:58   +1 +/
Да? Они Apache/Nginx/PHP/MySQL/Postfix написали?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #29

24. Сообщение от Аноним (24), 26-Дек-23, 16:00   +1 +/
В 100 раз быстрее jit генерация байткда, само исполнение стало быстрее на десятки процентов в лучшем случае.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

25. Сообщение от Аноним (25), 26-Дек-23, 16:01   +/
а что делает твой софт?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #31

28. Сообщение от Пряник (?), 26-Дек-23, 16:04   +/
Это та самая борьба с компилятором, которую вылечили в расте?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

29. Сообщение от Аноним (29), 26-Дек-23, 16:05   +1 +/
Нет, но гугл сделал ASP.NET MVC.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #120

30. Сообщение от Аноним (30), 26-Дек-23, 16:13   +/
Не, clang генерит быстрый код, когда часть из входных данных захардкодожена.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22

31. Сообщение от Аноним (31), 26-Дек-23, 16:34   +7 +/
Когда доделаю - на опеннете может появиться анонс. А пока - "ничего".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #32, #70, #115

32. Сообщение от pavlinux (ok), 26-Дек-23, 16:58   +5 +/
Приз за лучший "Коммент Года 2023"!  
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

33. Сообщение от Bottle (?), 26-Дек-23, 17:04   +4 +/
JIT потенциально обладает преимуществом перед обычной компиляцией. Вот есть у тебя куча ветвлений switch-case в коде, профилировщик собирает статистику и на основе этого компилирует код так, чтобы первыми проверялись самые частые case'ы.
Это, к слову, также положено в основу PGO.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #35, #37, #44

35. Сообщение от Аноним (35), 26-Дек-23, 17:16   –2 +/
Ты с if/else не попутал?

switch/case выстраивает jump table, там похер в каком порядке идут значения

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #46, #54

36. Сообщение от Витюшка (?), 26-Дек-23, 17:37   +/
Выглядит очень интересно, как минимум много умных услов)

А что за проект? Язык программирования? Что он вообще делает?

Хобби? Работа? Наука?
Публикации есть?

Я в этом не силён. Но Zig позволяет тебе выбирать calling convention для каждой функции.

callconv(WINAPI)
callconv(.Inline)
callconv(.Naked)
callconv(.C)

Наверное ещё что-то. Много оптимизаций встроено в язык.

Писать compile time код - это просто песня. Generic код тоже.

Есть ассемблерные вставки в языке (из коробки).

Можно вызывать С код и С++.
Можно даже С++ код компилировать компилятором Zig! Те просто берёшь и компилируешь свой С++, а потом добавляешь Zig потихоньку. Переписывать всё не нужно.

Для твоей задач подходит идеально.
Быстрее чем на Zig уже не будет.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #47

37. Сообщение от all_glory_to_the_hypnotoad (ok), 26-Дек-23, 17:40   +1 +/
JIT жрёт память и добавляет внезапные лаги. Так что лучше иметь стабильный по задержкам, но чуть менее производительный код, чем JIT со всеми его минусами. Ну или иметь возможность включать JIT только для определённых функций/модуля
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #40, #83

38. Сообщение от Вы забыли заполнить поле Name (?), 26-Дек-23, 17:40   +/
> Ты =очень= крутой, аноним.
> Но пользоваться твоей программой я, конечно, не буду.

Если она есть вообще.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9

39. Сообщение от YetAnotherOnanym (ok), 26-Дек-23, 17:43   +/
> примечателен очень высокой скоростью генерации кода

В питоне быстрая генерация кода - это самое главное. Те, кому надо, чтобы код быстро работал, обходят питон стороной.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #58, #66

40. Сообщение от Вы забыли заполнить поле Name (?), 26-Дек-23, 17:51   +/
> JIT жрёт память и добавляет внезапные лаги. Так что лучше иметь стабильный
> по задержкам, но чуть менее производительный код, чем JIT со всеми
> его минусами. Ну или иметь возможность включать JIT только для определённых
> функций/модуля

Вроде как в нормальных компиляторах jit не всегда задействуется. Там несколько этапов от простого интерпретатора байткода до полноценного jit. В зависимости от статистики происходит переключение между ними. По крайней мере так сделано в v8 и так планируют делать в python

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37

41. Сообщение от Легивон (?), 26-Дек-23, 17:57   +/
Потому что есть tradeoff между достигаемой скоростью и возможностью интеграции с любыми внешними окружениями.
Никого почему-то не смущает что все ML работает на таком медленном питоне. Возможности по интеграции могут быть гораздо важнее скорости числодробления (последним можно кстати заниматься на numpy и т.п. с такими же сишными скоростями)
А вот с js получилось прямо забавно. Ведь удалось достигнуть и правда запредельных результатов. А потом... потом они просто взяли и отдали свой сверх остный инструмент самым ущербным мартышкам. И что толку? Браузер всеравно тормозит ровно настолько, чтобы страницы хоть как-то открывались. Ничего бы и не изменилось будь в client side скриптинге медленный питон.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #50, #74

42. Сообщение от Аноним (9), 26-Дек-23, 18:02   +1 +/
Чем больше я понимаю ЯП и учу Схему, тем больше пишу на баше.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13

43. Сообщение от YetAnotherOnanym (ok), 26-Дек-23, 18:05   +1 +/
Я так понимаю, если тебя вовремя не остановить, ты дойдёшь до того, что всю computationslly-heavy функциональность запихнёшь в fpga'шку.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #76

44. Сообщение от _kp (ok), 26-Дек-23, 18:16   –2 +/
В теории, если считать скорость постоянной перекопиляции пренебрежимо мала, то есть когда задержка не заметна, и раздражает пользователя.
А для пользователя не нативное приложение - неполноценное приложение.
Ведь никто в здравом уме не поставит что то типа VsCode по умолчанию вместо нотепада как редактор по умолчанию.

Исключения есть, например когда приложение например на Яве и стартует мгновенно, и работает быстро, и неискушенный пользователь ничего не замечает. Но, это и редкость, и обычно небольшие программы.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33

45. Сообщение от _kp (ok), 26-Дек-23, 18:18   +/
> То есть питон сейчас стал в 100 раз быстрее?

Нет, его отдельные операции стали быстрее, а в целом скорость примерно как была.
Ведь если похерить хотя бы динамическую типизацию, что сильно ускорит, но так тогда это и будет уже Питон.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #49

46. Сообщение от Bottle (?), 26-Дек-23, 18:27   +2 +/
Семантически switch-case и if-else одинаковы, современные компиляторы их разворачивают в одинаковые инструкции 100%. Это раньше могли быть приколы вида того, что for(;;) и while(true) преобразовались в разные ассемблерных инструкции.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #52, #53

47. Сообщение от Аноним (47), 26-Дек-23, 18:29   +/
>Но Zig позволяет тебе выбирать calling convention для каждой функции.

Да де-факто стандартные расширения сишки тоже позволяют, но из приведённого вами списка. При этом компилятор сгенерирует ненужные перебросы из одних регистров в другие с сохранениями состояния caller-saved на стеке. Мой код же стека касается в редких случаях - когда нужно выделить память. Тогда уже гулять-так гулять. Остальная свистопляска идёт в регистрах и кэше.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #78, #80

48. Сообщение от Аноним (48), 26-Дек-23, 18:31   +9 +/
В ненаписанных 300 строках кода дыр точно не будет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

49. Сообщение от Аноним (48), 26-Дек-23, 18:33   +/
Сделать транслятор типа TypePython с подсказками о типах для AST.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45 Ответы: #122

50. Сообщение от Витюшка (?), 26-Дек-23, 18:34   –1 +/
Только тут они написали говнокод и выйграли (заработали на этом), а в другом случае бы так не получилось.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #60

52. Сообщение от Аноним (52), 26-Дек-23, 19:04   +/
Вы путаете обычный switch и switch с паттерн матчингом. Для обычного свитча компилятор собирает lookup табличку, в которой jmp на нужную ветку идёт даже без cmp инструкций. А вот паттерн матчинг разворачивается в обычные if со всеми вытекающими
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46 Ответы: #82

53. Сообщение от Аноним (35), 26-Дек-23, 19:10   –1 +/
Что ты, блин, несёшь? Ты сам то проверял? Ничего там не одинаково.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

54. Сообщение от Аноним (-), 26-Дек-23, 19:28   +/
Это если у тебя switch по перечисляемому+упорядочиваемому типу, и если используется непрерывный диапазон значений этого типа. Попробуй создать джамптабличку для:

switch(n) {
   case 1: ...;
   case 2: ...;
   case 3: ...;
   case 5: ...;
   case 8: ...;
   case 13: ...;
   ...
   case fib(n): ...; // это на случай если твоя недопёрла как посчитать остальные константы
   ...
   default: ...;
}

Я б рекомендовал иногда заглядывать в вывод gcc -S, чтобы понимать, какой код он генерирует. Какой смысл вообще знать про джамптаблицы, если ты не знаешь как высокоуровневый код превращается в низкоуровневый?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #57

55. Сообщение от Аноним (55), 26-Дек-23, 19:36   +/
Вообще-то у Go корни древнее вашего этого питона. Гугли историю, в том числе plan9.

Гуглу повезло что оказались под боком спецы которые пуд соли съели на создании языков программирования, в Go затащили все самые лучшие решения за их жизнь.

Гуглу это надо было чтоб заменить легаси на сях и плюсах.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #69

57. Сообщение от all_glory_to_the_hypnotoad (ok), 26-Дек-23, 20:22   +/
Для первого куска делаешь таблицу с null-дырками, для второго обычное дерево или вообще линейный поиск если case-ов мало. А как оно будет на самом деле зависит от компилятора, так-то некоторые и эквивалентный каскад из if-ов умеют в таблицу упаковывать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54 Ответы: #61

58. Сообщение от Аноним (48), 26-Дек-23, 20:25   –1 +/
... и направляются прямиком к Cython.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39 Ответы: #71, #116

59. Сообщение от BrainFucker (ok), 26-Дек-23, 20:25   –2 +/
> Так бы и написали что компиляцию в нативный код не осилили, ибо из за динамической типизации все равно фигня с производительностью.

В будущем сделают компиляцию в машинный код с помощью нейросетей. А так как ресурсов для запуска такого компилятора локально ни у кого е будет, она будет облачной.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #77

60. Сообщение от Легивон (?), 26-Дек-23, 20:34   +/
Тоесть вы хотите сказать, что до появления js в вебе сайтов не было?
Или что если бы не было client side скриптинга сайты были бы хуже?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50 Ответы: #130

61. Сообщение от Аноним (-), 26-Дек-23, 20:55   +/
Умница дочка!

Теперь ты можешь ещё раз похвастаться беспримерными своими познаниями, сделав следующий шаг, объяснив тому анониму с его верой в джамптейблы, как ко всему что ты описываешь применимы JIT и PGO оптимизации.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #57

65. Сообщение от Аноним (65), 26-Дек-23, 21:48   +3 +/
>Реализация JIT требует в качестве зависимости LLVM на этапе сборки

Оригинальный интерпретатор CPython, в том числе, тем и хорош, что никак не связан с LLVM и полностью автономный.

Ответить | Правка | Наверх | Cообщить модератору

66. Сообщение от Аноним (66), 26-Дек-23, 21:48   +/
> Те, кому надо, чтобы код быстро работал, обходят питон стороной

только ты об этом ничего не знаешь, так как не имеешь отношения ни тем, ни к другим

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

67. Сообщение от C00l_ni66a (ok), 26-Дек-23, 22:10   +1 +/
>какое соотношение

https://killedbygoogle.com/

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

69. Сообщение от Витюшка (?), 26-Дек-23, 22:39   –4 +/
И при этом "какой-то" пацан из универа, которому надоело кодить потом на С++ написал самый передовой язык программирования из всех, которые я знаю.

Который гораздо лучше Go, хотя бы в обработке ошибок.

А знаю я около 20 языков программирования. И это первая и единственная реальная замена чистому С.

У Go есть своя ниша, наверное очень неплохой был язык для своего времени. Но garbage collection сразу определил его место в истории.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #108

70. Сообщение от Аноним (70), 26-Дек-23, 22:44   +3 +/
Тогда подождём. А пока - "НЕ НУЖНО".
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

71. Сообщение от Аноним (4), 26-Дек-23, 23:09   +/
Реально кстати, у cython производительность 1 в 1 с си, при этом, оно выглядит как питон, и прозрачно интегрируется с питоном.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #58

72. Сообщение от th3m3 (ok), 26-Дек-23, 23:40   +/
>жду mojo на посмотреть, что они там сделают.

Mojo уже можно смотреть и писать. Они всё выложили.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #85

73. Сообщение от mister_0 (?), 26-Дек-23, 23:58   +1 +/
frama-c и не будет ни одной
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

74. Сообщение от Аноним (74), 27-Дек-23, 00:04   +1 +/
>  все ML работает на таком медленном питоне

На питуне там только "бизнес логика". Буквально обёртки сишных/плюсовых функции типа "взять данные там", "передать данные туда", "сделать из этого конвейер", "посчитать".
Эсли бы бекенд этого добра был бы таки на питоне, то работало бы оно везде, с любыми видяхами и процами, только в миллион раз медленнее.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

75. Сообщение от Аноним (75), 27-Дек-23, 00:29   +/
Кто прояснит — этот copy and patch чем-то отличается от AOT компиляции или это совсем что-то другое и я не в ту степь?
Ответить | Правка | Наверх | Cообщить модератору

76. Сообщение от x3who (?), 27-Дек-23, 00:29   +/
> Я так понимаю, если тебя вовремя не остановить, ты дойдёшь до того, что всю computationslly-heavy функциональность запихнёшь в fpga'шку.

Чот вот это не пахнет даже минимизацией и переводом в базис FPGA-шкинскиких LU: "сгенерировав экспоненциально много функций силами компилятора"

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43

77. Сообщение от _kp (ok), 27-Дек-23, 00:34   +/

> В будущем сделают компиляцию в машинный код с помощью нейросетей.

Пока сподобятся, с этим справится процессор от уного чайника, или рак на горе свиснет.

> как ресурсов для запуска такого компилятора локально ни у кого не будет

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

Кстати, вменяемые смартфоны сейчас уже быстрые. Как что то на Расбери компилировать, так можно, не смотря что по сравнению со смартфоном по производительности он просто вонючка.

К тому же, перекомпилировать всем не обязательно, это ж на случай когда готового нативного бинарника негде скачать.

>> будет облачной.

Не будет, ибо и не выгодно, и на быстром компе тупо быстрее переаомпилировать самому, чем закачать и выкачать.
А вот репозитории, это да, им компилировать обновляемое ПО в нативные бинарникпи, самое то.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #59

78. Сообщение от Аноньимъ (ok), 27-Дек-23, 00:37   +/
Стек типо в кеше не присутствует?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #92

79. Сообщение от Аноньимъ (ok), 27-Дек-23, 00:39   –1 +/
И как оно работает в многопотоке?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #90

80. Сообщение от x3who (?), 27-Дек-23, 00:39   +/
> ненужные перебросы из одних регистров в другие с сохранениями состояния caller-saved на стеке.

Если такое есть без причины - то это копулятор лучше чинить.. Это же его сфера ответственности!

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #95

81. Сообщение от Аноньимъ (ok), 27-Дек-23, 00:41   +/
Фигня с производительностью не от динамической типизации там от слова совсем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #87, #113

82. Сообщение от Аноньимъ (ok), 27-Дек-23, 00:47   +/
Это исключительно зависит от конкретного ЯП.
Что там будет вкомпилировпнно и или выполненно в итоге.
Ифы тоже можно в jmp развернуть.

Bottle выше правильно пишет. Это одно и то же в разной записи.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52

83. Сообщение от Аноньимъ (ok), 27-Дек-23, 00:56   –1 +/
Лучше только в системах реального времени.
А вообще, нет, не лучше.

И нормальный джит отрабатывает один раз, после чего все летает без всяких задержек.
Пример жава и дотнет. Особенно последний, потому как оно в ровень с нативным кодом может.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #86, #97

84. Сообщение от Анонимemail (84), 27-Дек-23, 01:02   +/
Блин, как я сюда попал сборище каких то диванные критиков, у python минус такой минус сякой да он и медленный и проще сделать так да сяк .... :DD  ну елы палы что за сборище ламеров, которые повторяют пойнты, которые были актуальны наверное в 90х для python 2, и нулевых ... просто рука лицо почти с каждого сообщения
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #88

85. Сообщение от Аноним (3), 27-Дек-23, 01:11   +/
Да знаю я. У них даже онлайн среда есть для "попробовать" - https://playground.modular.com/
Но времени пока нет. В предыдущий раз как пробовал все было сыровата и в глубокой альфе.
Еще вопрос волнует - не сделают ли они при релизе платным mojo или с какими-либо ограничениями в бесплатной версии.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #72 Ответы: #127

86. Сообщение от Аноним (86), 27-Дек-23, 02:46   +2 +/
> Лучше только в системах реального времени.
> А вообще, нет, не лучше.
> И нормальный джит отрабатывает один раз, после чего все летает без всяких
> задержек.
> Пример жава и дотнет. Особенно последний, потому как оно в ровень с
> нативным кодом может.

Особенно это видно на тормозящих играх на unity

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #83 Ответы: #89

87. Сообщение от Аноним (86), 27-Дек-23, 02:51   +1 +/
> Фигня с производительностью не от динамической типизации там от слова совсем.

От чего же?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #81

88. Сообщение от Аноним (86), 27-Дек-23, 02:52   +/
> Блин, как я сюда попал сборище каких то диванные критиков, у python
> минус такой минус сякой да он и медленный и проще сделать
> так да сяк .... :DD  ну елы палы что за
> сборище ламеров, которые повторяют пойнты, которые были актуальны наверное в 90х
> для python 2, и нулевых ... просто рука лицо почти с
> каждого сообщения

Потому что ничего не меняется сильно по скорости и потреблению памяти.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #84

89. Сообщение от Аноньимъ (ok), 27-Дек-23, 02:55   +/
Что угодно на чём угодно может тормозить. По самым разным причинам.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #86 Ответы: #96

90. Сообщение от Аноним (90), 27-Дек-23, 02:55   +/
Отлично.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #79

91. Сообщение от Аноним (86), 27-Дек-23, 02:59   +/
Фото на гитхабе у него забавное
Ответить | Правка | Наверх | Cообщить модератору

92. Сообщение от Аноним (90), 27-Дек-23, 03:03   +/
Присутствует, так как иногда приходится дёргать. Но основные обращения к памяти - это считывание данных и запись результатов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #78

95. Сообщение от Аноним (90), 27-Дек-23, 03:20   +/
У компилятора есть причины её не инлайнить - она виртуальная. Остаётся thiscallом её вызывать. А thiscall - это конкретная конвенция, а поддержки кастомных конвенций увы нет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #80

96. Сообщение от all_glory_to_the_hypnotoad (ok), 27-Дек-23, 03:41   –1 +/
Но тут по вполне конкретным причинам, которых нет у других ЯП. Например, из-за GC. Хотя может и из-за JIT тоже. В итоге никакого 'в ровень' не получается.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #89 Ответы: #118

97. Сообщение от all_glory_to_the_hypnotoad (ok), 27-Дек-23, 03:43   –1 +/
Лучше, например, в питоне, он тормозит равномерно. И в компилируемых ЯП вроде с++
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #83 Ответы: #119

108. Сообщение от leap42 (ok), 27-Дек-23, 09:26   +/
> Который гораздо лучше Go, хотя бы в обработке ошибок.

ахахаха, знаете, да, что комитет плюсецкого рассматривает уход от исключений в сторону обработки ошибок аля Go? если бы вы хоть один(!) раз написали серьёзный многопоточный проект, то знали бы что не так с исключениями, их обработкой и раскруткой стека при многопоточной нагрузке, но вы не знаете)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #69 Ответы: #111, #125

111. Сообщение от Витюшка (?), 27-Дек-23, 10:17   +/
Ты о чём вообще? Не осилил прочитать комментарий и бросился печатать ответ как увидел слово С++?

При чём тут исключения?
В Zig вообще нет никаких исключений.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #108

112. Сообщение от Аноним (112), 27-Дек-23, 10:36   +/
Как оно будет работать при "monkey patching"?
Ответить | Правка | Наверх | Cообщить модератору

113. Сообщение от _kp (ok), 27-Дек-23, 10:55   +/
> Фигня с производительностью не от динамической типизации

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

В тех же Java и C#, код без дергатни памяти, то есть в критичных местах, получается очень быстрый без плясок с бубнамм, хотя там и нативного кода в полноценном смысле вовсе нет. И вполне логично подумать именно на типизацию в Питоне.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #81 Ответы: #117

114. Сообщение от Аноним (114), 27-Дек-23, 12:39   +1 +/
https://opennet.ru/59641-python
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

115. Сообщение от Аноним (115), 27-Дек-23, 12:50   +/
"На словах я Лев Толстой, а не деле..."
Всё как обычно)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

116. Сообщение от YetAnotherOnanym (ok), 27-Дек-23, 13:00   –1 +/
cython.org:
> The Cython language is a superset of the Python language that additionally supports calling C functions and declaring C types on variables and class attributes

Так это си знать надо.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #58

117. Сообщение от Аноньимъ (ok), 27-Дек-23, 16:51   +/
Ну вот и думают.
Аннотацию типов добавили уже давно. Очень удобно. Осталось оптимизацию кода сделать который тайпчекается.

И я не в курсе что там у них с автовыводом типов.

В Ракете прикольно сделали типизированную версию.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #113

118. Сообщение от Аноньимъ (ok), 27-Дек-23, 16:59   +/
> Но тут по вполне конкретным причинам, которых нет у других ЯП. Например,
> из-за GC. Хотя может и из-за JIT тоже. В итоге никакого
> 'в ровень' не получается.

GC в ЯП никаких нет.

Получается не только лишь в ровень, если руки прямые.

Но никогда не будет с дотнетом и шарпом в ровень идти хоть сишка хоть сипипишка которая туже сложность со всеми необходимыми проверками и защитами реализует.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #96 Ответы: #128

119. Сообщение от Аноньимъ (ok), 27-Дек-23, 17:01   +/
В Питоне глобальный лок всё ещё никуда не делся.
То как тормозит питон математикой не описать, нужно индусов звать танец танцевать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #97 Ответы: #129

120. Сообщение от Илья (??), 27-Дек-23, 17:01   +/
ASP net MVC amazon сделали же.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29 Ответы: #126

122. Сообщение от Аноним (122), 27-Дек-23, 18:49   +/
Mypyc
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #49

125. Сообщение от Аноним (125), 27-Дек-23, 22:06   +/
> если бы вы хоть один(!) раз написали серьёзный многопоточный проект, то знали бы что не так с исключениями, их обработкой и раскруткой стека при многопоточной нагрузке,

С исключениями в многопоточных приложениях все точно также, как и с неисключениями в многопоточных приложениях... Дело в многопоточных приложениях, а не в исключениях.

В компиляторах/либах баги бывали, но вроде это фиксилось со временем. В mingw такой баг ~10 лет встречался. Примерно с 2009-го по 2018-й. Вообще, в 2010-м было пофикшено в апстриме mingw, но там смотря как именно mingw собирали и как часто тулчейн обновлялся. В Qt даже в 2018-м прям официально скачивалась версия с "глючным" mingw. А в ответе было "Qt не использует исключения, поэтому у нас всё работает... а вы страдайте ;)"

В виндовых сборках GLib/GTK аналогично получалось, но пофиксить удалось сильно быстрее.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #108

126. Сообщение от амоним (?), 28-Дек-23, 00:31   +/
вот врете. это старая разработка фейсбука
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #120

127. Сообщение от Аноним (3), 28-Дек-23, 01:52   +/
Вот тут статейка на Хабре подоспела по поводу сравнения производительности Mojo с С+++ библиотеками. Вывод: Mojo лучшим пока проигрыват, но не сильно (а чистый Python уделает как тузик грелку)

https://habr.com/ru/articles/783138/

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #85

128. Сообщение от all_glory_to_the_hypnotoad (ok), 28-Дек-23, 02:14   +/
> Получается не только лишь в ровень, если руки прямые - настлько древняя мантра, что в 2023 даже уже не смешно
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #118

129. Сообщение от all_glory_to_the_hypnotoad (ok), 28-Дек-23, 02:19   +/
Есть, так не трогай его. Основная часть питонячего кода это однопоточные приложения. И пишу же про равномерность торможения, а не про просто торможение. Например, в тестах сервис длительно показывает хорошие персентили по задржкам, а в проде спустя большой uptime внезапно просаживается условный 99-ый ... потому что что-то потекло и GC зафрагментировал память и начал лютовать когда ему вздумается. В стандартном питоне такого нет. В Java и JS постоянно, особенно это хорошо заметно по браузерам.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #119

130. Сообщение от Советский инженер (ok), 30-Дек-23, 11:03   +/
>Или что если бы не было client side скриптинга сайты были бы хуже?

википедия была бы такой же,
а вот всякие магазины и другие онлайнбанкинги не существовали бы.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #60 Ответы: #131

131. Сообщение от Легивон (?), 30-Дек-23, 16:01   +/
> всякие магазины и другие онлайнбанкинги не существовали бы.

Это бред.
Во-первых контр пример: магазины существовали до засилья js в вебе.
Во-вторых: вы рассуждаете про отсутствие js полагая что без него браузеры не стали бы развиваться в сторону показа динамического контейнта. Это неверно, конечно они бы развивались дальше. Например показ пользователю вариантов дополнений введенного текста (например адреса) мог быть реализован стандартировано на уровне браузера специальным типом поля с указанием url куда отправлять ранее введенный текст для получения подсказки. Проверки правильности ввода - аналогично.
Веб мог быть гораздо более стандартизированным, понятным и управляемым если бы сиюминутные хотелки не победили. Но теперь его уже не удастся отрефакторить. Только бросить и сделать новый.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #130

132. Сообщение от Аноним (132), 31-Дек-23, 15:50   +/
JIT - дыра в безопасности которую M$ хотят вкорячить в питон.

JIT  на безопасных платформах работать не будет никогда.

JIT - зло которое надо искоренять!

Ответить | Правка | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру