Русскоязычное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Русскоязычное программирование » концепции и механизмы языков и рантаймов » Практический смысл горячей замены кода


Практический смысл горячей замены кода

Сообщений 1 страница 26 из 26

1

Уткин спрашивает про корутины, значит мне тоже можно спросить.

Проповедует горячую замену кода Будден. А ещё он много читал про "зиму искусственного интеллекта".
Можно предположить, что он хочет сделать компилятор, который сам себя улучшает во время простоя
(нормальная такая суперидея).

В чём такая крутизна горячей замены кода? Берём обыкновенный C#, делаем там два домена (один и другой, как у Intel в стратегии tick-tock). Ну и, соответственно, работаем как с севооборотом - сначала один домен "под парами" и не используется, а потом другой.
Неиспользуемый домен выгружается, пересоздаётся по-новой и заполняется новым кодом, после чего туда передаётся управление.

Это совершенно стандартная широко распространённая технология, работающая с 2002-го года на 80% десктопов.

Хочет будден, чтобы в рантайме ещё и компилятор был? Ну есть такие динамические библиотеки в C# (и для работы с АСТ тоже).
В общем, объясните, пожалуйста, почему он так взволнован этой темой.

Отредактировано Лис (2018-11-04 10:50:27)

-1

2

utkin
Вопрос не в интерпретаторе. А в синхронизации, непротиворечивости состояний и переменных. А так же их типов.

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

0

3

utkin написал(а):

Так не бывает . Либо универсальность либо типы процессора.

Так не про процессор речь. А про типы переменных. Смена переменных бывает к примеру шаблоны в Си++, дженерики в Delphi.

Практическое применение находят в математических библиотках. 

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

utkin написал(а):

А в изобретение велосипеда, первый из которых назывался Бейсик. Ява и JIT - один шаг и у Вас горячая замена кода.  Все что Вам нужно - изначально интерпретировать код.

Интерпреататоры решает только часть проблем.  Взять язык форт в котором был шитый код.

utkin написал(а):

Опять же практическое применение?

У корутинов практическое применение для инициализации USB в UEFI.
Так к же все фремворки JS их поддерживают. Так как запрос одного JSON до 3 секунд из-за тайма-утов. Наличие таймаутов связано с ненадёжность сетей, повышения безопасности и загруженностью сервера.
Без асинхронной обработки у вас бы вся рекламо бы жутко тормозила, а она динамически подтягивается.  В бы не смогли сообщение отправить да и многое чего.

Что касается горячей замены кода, то практическая польза. К примеру создание ИИ с помощью генетических алгоритмов которые будут динамически изменять код. Или с точки срения исследований очень удобно сменить часть кода без пересборки и переррасчётов.

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

Отредактировано Павиа (2018-11-04 20:01:09)

0

4

В AL-IV сделана для быстрой отладки:

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

    нельзя изменять декларации методов, функций, полей класса;
    нельзя добавлять новые или удалять существующие методы / функции / поля;
    можно изменять только тело функций и методов;
    функции, которые отрабатывают только один раз (например, CONSTRUCT), и уже были выполнены, повторно не вызываются, если это не предусмотрено вашим кодом;

Но преимущество в том, что цикл поиска проблем и их решения значительно сокращается: перекомпиляция одного класса занимает буквально пару секунд, после чего новый код начинает работать немедленно. Легко добавлять/редактировать DEBUG-вставки, править основной код, не затрачивая время на полную пересборку приложения и на переход к проверке нужной функциональности (формы, сцены, сценария и т.д.) - программа уже запущена, и находится в нужном состоянии. (Если бы меня вернули в 80-е - 90-е годы и спросили, что я предпочитаю, например, в Turbo-C: пошаговую отладку или горячую перезагрузку кода, я бы сейчас выбрал второе).

Отредактировано MihalNik (2019-01-28 11:59:16)

0

5

Лис написал(а):

Это совершенно стандартная широко распространённая технология, работающая с 2002-го года на 80% десктопов.

А где подробнее почитать, если она стандартная и широкораспространённая? Хотябы пару источников / примеров.

Отредактировано atzx (2019-01-28 17:04:30)

0

6

https://docs.microsoft.com/ru-ru/dotnet … .appdomain
.NET Framework 1.1+

https://ru.wikipedia.org/wiki/Список_ве … _Framework
релиз .NET Framework 1.1 вышел 1 апреля 2003 года.

Как выгрузить домен:
https://docs.microsoft.com/ru-ru/dotnet … ain.unload

Как нагенерировать код - Reflection.Emit, например

0

7

Microsoft held 89.23% of the OS market in April 2016

Почему тут нет андроида? Потому что десктопы.
https://www.extremetech.com/wp-content/uploads/2016/05/NetApplicationsMarketShare.png

что с чем предустановлено:
https://docs.microsoft.com/ru-ru/dotnet … ng-systems

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

Отредактировано Лис (2019-01-30 07:54:09)

0

8

А тоесть вот это ты писал про дотнет? Не знаю, почему, но в своё время кодеры старались избегать дотнета. Но вообще да, работоспособен в случае необходимости.

Отредактировано atzx (2019-06-22 15:58:44)

0

9

Кодеры разные. Кто-то как Будден заточился на lisp, кто-то на java, кто-то на dotnet (как авторы 1Скрипт, например).

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

Точнее даже не так.
Почему именно эта технология позиционируется БудДеном как супервозможность? В чём её "ключевитость"?
Почему система с такой технологией сразу начнёт выигрывать закупочные конкурсы?
Почему пользователи побегут покупать систему с такой технологией в магазины? (а не купят точно такую же, но от Microsoft)

Отредактировано Лис (2019-01-31 16:13:36)

0

10

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

Отредактировано atzx (2019-06-22 17:37:08)

0

11

atzx написал(а):

Для дотнета это всё равно чуждый подход

необоснованное утверждение.

Ты наверное хотел сказать, что фича Edit & Continue из состава Visual Studio реализована не при помощи AppDomain, а при помощи другого механизма.

atzx написал(а):

Надо у Дениса спрашивать

Я у всех спрашиваю, и у него тоже. То, что он считает ниже своего достоинства ответить - это особенности его маркетинговой политики.

Кстати, называть его Денисом невежливо.  Называть вежливо так, как он называется, то есть БудДен-ом.

0

12

E&C нужно щупать, что он из себя представляет на самом деле, подходит ли это под обсуждаемую тему. Также никогда не слышал о REPL для C#, например.

Отредактировано atzx (2019-06-22 16:02:49)

0

13

atzx написал(а):

Также никогда не слышал о REPL для C#, например.

REPL это слишком убогая среда для пользователя. Если программеры не будут прогонять через себя UI, то и для конечного пользователя оно скатится в... REPL. Так или иначе, будет дико кривым.

0

14

atzx написал(а):

никогда не слышал о REPL для C#, например

Там Watches есть, и окно Evaluate. По другому называется, но с тем, чтобы что-то вычислить в рантайме или переприсвоить - никаких проблем.

Ещё PowerShell есть, если что. Хотя он и немного "из другой оперы".

Отредактировано Лис (2019-02-01 00:55:57)

0

15

MihalNik, я вообще не понял в чём посыл. Ниасилил repl чтоли?

Отредактировано atzx (2019-06-22 16:06:26)

0

16

atzx написал(а):

вообще не понял в чём посыл

А выше прочитать сначала до конца? Кладов прикрутил горячую замену для отладки в Делфи. В чем проблема-то формошлепства? Хотя присваивание в Object Inspector значений полям объектов называть формошлепством (что скорее добавление/расстановка визуальных компонент) довольно странно. Собственно формошлепство там занимает менее 1% времени - поэтому он и хорош. Хотя там и паттернами вроде MVC никто не запрещал никогда заниматься, но это уже оффтоп.
Ранее давал ссылку на Лисю, который интерпретируемый лисп на FreePascal. AL-IV изначально написан на C#, хотя выдает код и Делфит/FPC, а ранее поддерживались С++/Java/Python. Где проблема у Делфи/С# не ясно.
В чем проблема горячей замены в ВМ не ясно. Хотя изначально понятно, что гибкость требует дополнительной косности и невозможно без виртуализации вставить вместо одной машинной инструкции другую - они банально разного размера бывают и проще всего заменить адрес вызова/перехода. Что не зависит от интепретации или генерации машинокода.

atzx написал(а):

Ниасилил repl чтоли

Корректная формулировка выглядела бы скорее "никогда не видел что ли скриптовый язык и интерпретатор?". Вопрос, очевидно, странный.

Отредактировано MihalNik (2019-02-01 12:32:22)

0

17

Вопрос риторический. Не, нет никаких проблем ни у формошлёпства, ни у делфи, ни у C#, просто к ним оно (горячая замена) притягивается за уши.

Отредактировано atzx (2019-06-22 16:06:43)

0

18

Не, нет никаких проблем ни у делфи ни у C#, просто к ним оно (горячая замена) притягивается за уши.

Еще раз - "горячая замена" притягивается вообще-то к чему угодно ну оочень небольшим кол-вом кода. Что значит "за уши" - не раскрыто. Предположу, что за уши - это не там где нужно. Тогда возникает вопрос - осуществляется ли оптимизация ее обрезкой там, где она не нужна. Например, у конечного пользователя на уже отлаженной программе. :rolleyes:

0

19

Угу, поиграть с указателями и горячая замена может быть где угодно (кроме джава, хахаха). За уши значит что сначала мы притягиваем горячую замену, потом repl, потом ..., потом получаем lisp. Зачем, если можно взять готовый?

Отредактировано atzx (2019-06-22 16:08:35)

0

20

(кроме джава, хахаха)

Как будто полиморфизм там не реализуем или интерпретировать JAVA-код невозможно.

atzx написал(а):

Зачем, если можно взять готовый?

М.б., затем, что кучи всего другого необходимого для конечного продукта в тысячи раз больше, чем кода для горячей замены кода? Нее, еще можно выдать пользователю возможность горячей замены, типа, если что не так работает - допиливай, бро) Скорее всего пользователь выберет горячую замену разработчика  :D

Вопрос умения оптимизации вырезанием горячесменной косвенности разными лиспами не раскрыт :rolleyes:

Отредактировано MihalNik (2019-02-01 13:48:35)

0

21

Да просто смысл брать одну какую-то фичу лиспа и пытаться её как коня в вакууме рассматривать? Есть лисп (куча вариантов), подходит - бери пользуйся, не подходит - никто не заставляет же.

Отредактировано atzx (2019-06-22 16:08:06)

0

22

atzx написал(а):

Да просто смысл брать одну какую-то фичу лиспа и пытаться её как коня в вакууме рассматривать?

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

Есть лисп (куча вариантов), подходит - бери пользуйся, не подходит - никто не заставляет же.

Гениальный "маркетинговый" ответ на вопрос как что-то работает или не работает:
- Бери или проваливай!

Отредактировано MihalNik (2019-02-01 13:55:35)

0

23

- Или сделай сам если очень надо.

Отредактировано atzx (2019-02-01 13:58:35)

0

24

- Или сделай сам если очень надо.

Лис говорит, что в C# оно давно есть. У Кладова написано, что это есть в AL-IV через Делфи, и четко определено зачем, где и когда.
Для лиспа не дано ответа на вопрос прибито это гвоздями или нет, а если да, то какой они длины. Это, если что, вопрос про оптимизацию конкретных компиляторов.

Отредактировано MihalNik (2019-02-01 17:30:27)

0

25

Я не отвечаю, потому что так действуют стальные лучи моей непреклонной воли, которые так рекламировал Лис. Я молчанием призываю народы склониться перед светом моей гениальности и наконец перестать флудить и начать хоть что-то делать. Например, можно создать и продвинуть опрос на тему «считаете ли вы надписи на латинице национальным унижением». При этом надо правильно подобрать ответы. Тут к психологам и маркетологам. Люди ответят на опрос и задумаются.

Отредактировано БудДен (2019-02-02 22:57:49)

0

26

А вот что я делал сегодня (и день ещё не закончился)

https://github.com/budden/ch115/commits/ch115

Ничего существенного пока.

0


Вы здесь » Русскоязычное программирование » концепции и механизмы языков и рантаймов » Практический смысл горячей замены кода