AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.05.2018, 18:14   #1  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
Это проблема не компилируемости как таковой ИМХО а конкретного сочетания технологий.
...
Еще вполне возможно что в других технологиях с хотсвоппингом лучше. Например edit and continue в вижуал студии для C# работает с большими ограничениями - в Java, говорят, их меньше.
Согласен. Если подумать то CLR это подобная JVM вещь как process VM, и там и там запускается P-code (MSIL и Java Bytecode). И там и там компиляция. Но тут вопрос момента этой компиляции и тех самых сочетаний нюансов.

CLR требует компиляцию всего кода сразу и до. То есть взяли копировать Java/JVM но так и не поняли ее суть.

JVM компилирует частями и по потребности (в общем случае). Что позволяет оптимизацию при исполнении и более быструю разработку.

Та же Аксапта использовала JVM и такую "интерпретационную" компиляцию по частям что давало нам множество преимуществ в разработке. C необходимостью полной сборки MorphX был бы невозможен. А без MorphX это не 21 век.

P.S.
AppStore что сейчас обсуждается тоже душу не греет потому как скопирован опять таки с потерей сути. Действительно хочется увидеть клиента D365FO устанавливающего AppStore по кнопке. Это скорее анекдот.

Последний раз редактировалось ax_mct; 18.05.2018 в 18:20. Причина: P.S.
Старый 18.05.2018, 18:35   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
CLR требует компиляцию всего кода сразу и до. То есть взяли копировать Java/JVM но так и не поняли ее суть.
Вы имеете ввиду компиляцию из исходного кода в промежуточный или из промежуточного в машинный?

Не могли бы вы привести ссылку для подтверждения своего утверджения?

Compilation by the JIT Compiler
JIT compilation converts MSIL to native code on demand at application run time, when the contents of an assembly are loaded and executed.

Старый 18.05.2018, 20:20   #3  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
Вы имеете ввиду компиляцию из исходного кода в промежуточный или из промежуточного в машинный?

Не могли бы вы привести ссылку для подтверждения своего утверджения?

Compilation by the JIT Compiler
JIT compilation converts MSIL to native code on demand at application run time, when the contents of an assembly are loaded and executed.

Думаю что из промежуточного в машинный.
Промежуточный это P-code в X++, CIL в .NET, Bytecode (.class) в Java. Это файлы полученные из исходного кода и которые используются VM для перевода в машинный код (ngen и прочие не общие вещи не расматриваем).

Действительно получается что все упирается в реализацию JIT.
В Java их далеко не одна. Самый общий это HotSpot
https://ru.wikipedia.org/wiki/HotSpot
который сочетает и компилятор и интерпретатор.

Oracle HotSpot это больше 80% рынка JVM.

https://plumbr.io/blog/java/java-version-and-vendor-data-analyzed-2017-edition


Oracle HotSpot использует интерпретацию по умолчанию, и только потом компиляцию часто используемых методов.
Цитата:
HotSpot VM defaults to interpreting Java byte code. It compiles (JIT compilation) methods that runtime profiling determines to be "hot", that is, the methods that are executed for a predetermined number of times. JIT compliers are either client or server compilers.
https://docs.oracle.com/javase/9/jro...n.htm#JRHMG117

В CLR возможностей использования интерпретации в JIT - нет совсем.
А она таки для программистов удобнее и мы ее потеряли с D365FO.
Старый 18.05.2018, 21:46   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Действительно получается что все упирается в реализацию JIT.
А чем код железного процессора так отличается от кода виртуальной машины что это в корне запрещает hotswapping? (кстати, VS поддерживает edit and continue для C++)

И еще, какие ограничения есть на hotswapping у JVM из коробки и зачем нужны всякие чудестные другие штуки, которые находятся по запросу "java hotswapping" (типа JRebel).

Лично мое мнение что для продакшена концептуально лучше blue-green deployment - это позволяет получить гарантию, что код относится к одной какой-то версии. Что вы про это думаете?

Для разработки есть edit and continue с ограничениями (что на JVM, что на .NET).

Еще интересно про "интерпретаторы" - про тот же PHP сложилось впечатление, там нет никакого хотсваппинга (т.е. время жизни всего в типичном случае - один запрос) и легкость обновления достигается именно за счет этого, нет?
Старый 18.05.2018, 23:51   #5  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
А чем код железного процессора так отличается от кода виртуальной машины что это в корне запрещает hotswapping? (кстати, VS поддерживает edit and continue для C++)
Думаю что это ограничения OS, в частности Windows. Регистрация в реестре и невозможность удалить файл если он "используется".
VM это сама себе OS и что хочет то и может себе позволить. При этом там где интерпретация это явно легче.

Цитата:
Сообщение от belugin Посмотреть сообщение
И еще, какие ограничения есть на hotswapping у JVM из коробки и зачем нужны всякие чудестные другие штуки, которые находятся по запросу "java hotswapping" (типа JRebel).
JRebel не просто заменяет код метода, а позволяет менять сигнатуру, добавлять и удалять методы.
А это не просто бросить jar, а как-то обновлять все ссылки в работающей VM. Это реально круто.

Цитата:
Сообщение от belugin Посмотреть сообщение
Лично мое мнение что для продакшена концептуально лучше blue-green deployment - это позволяет получить гарантию, что код относится к одной какой-то версии. Что вы про это думаете?

Для разработки есть edit and continue с ограничениями (что на JVM, что на .NET).
Подмена приложения (blue-green deployment ) в большинстве случаев все равно требует downtime пусть и значительно уменьшенный. А главное опять же нехилый DevOps и особенно с DB.

Есть еще отключаемый Compile on Save, но тут если в Java мы компилируем исходник .java в байткод .class на уровне класса, то как я понимаю VS это делает на уровне проекта.

Цитата:
Сообщение от belugin Посмотреть сообщение
Еще интересно про "интерпретаторы" - про тот же PHP сложилось впечатление, там нет никакого хотсваппинга (т.е. время жизни всего в типичном случае - один запрос) и легкость обновления достигается именно за счет этого, нет?
Так и есть. Помимо этого дает еще и неубиваемость в отличие от того же ASP.NET.
PHP наиболее отвечает stateless природе web.
Кэширование (Vanish http://php.net/manual/en/book.varnish.php etc) еще надо сливать все же.
Типа удалить из некой папки кэш.

А как мы можем blue-green deployment в D365FO? Это может MS без downtime?
Тут ведь помимо downtime и вопрос срочности.
Я на практике где сомневаюсь обрамляю код параметром DB. Типа список галок на некой форме для отключения недавно добавленного функционала пусть даже это просто кусок кода. Потому как даже в AX2012 страшно жить.

То есть способность быстро откатывать и накатывать изменения она очень важна. Иначе лучше вообще ничего не менять. Вот накатили мы приложение из AppStore и через какое время продакшн пошел в разнос в силу логического конфликта. По хорошему должен отключаться галкой абсолютно весь занесенный или прицепившийся код. А кто за это отвечает? ISV скажет ничего не знаем MS одобрил?
Старый 19.05.2018, 11:37   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Думаю что это ограничения OS, в частности Windows. Регистрация в реестре и невозможность удалить файл если он "используется".
VM это сама себе OS и что хочет то и может себе позволить. При этом там где интерпретация это явно легче.
Регистрация в реестре чего? Что такое "используется"? VM это машина а не ОС (кстати, вы поискале в гугле на тему того, как делают хотсваппинг в .NET или это просто ваши впечатления?).

Какая при этом разница между интепретацией и JIT, если в файлике все равно байткод?

Цитата:
Подмена приложения (blue-green deployment ) в большинстве случаев все равно требует downtime пусть и значительно уменьшенный. А главное опять же нехилый DevOps и особенно с DB.
За счет чего же этот девопс возникает и как его избюегают интерпретаторы?

Цитата:
Так и есть. Помимо этого дает еще и неубиваемость в отличие от того же ASP.NET.
PHP наиболее отвечает stateless природе web.
т.е. дело вовсе не в "компилируемости", да?

Цитата:
А как мы можем blue-green deployment в D365FO? Это может MS без downtime?
Тут ведь помимо downtime и вопрос срочности.
Я думаю, вряд ли, так как нет гарантии что старый и новый код одновременно может работать с одной и той же БД. Так ее и нет в случае старого X++.

Но может кто-то более знакомый с кишками обслуживания прода меня поправит.

А вопрос срочности тут при чем? Вы про несколько минут на компиляцию модуля? Или про что?

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

Цитата:
Я на практике где сомневаюсь обрамляю код параметром DB.
Типа список галок на некой форме для отключения недавно добавленного функционала пусть даже это просто кусок кода. Потому как даже в AX2012 страшно жить.
Это называется feature toggle/test in production.

Цитата:
То есть способность быстро откатывать и накатывать изменения она очень важна. Иначе лучше вообще ничего не менять. Вот накатили мы приложение из AppStore и через какое время продакшн пошел в разнос в силу логического конфликта. По хорошему должен отключаться галкой абсолютно весь занесенный или прицепившийся код. А кто за это отвечает? ISV скажет ничего не знаем MS одобрил?
Это уже параллельно "компилируемости" - те же feature tooggle или blue green deployment только при откате версии.
Старый 19.05.2018, 20:51   #7  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
Регистрация в реестре чего? Что такое "используется"? VM это машина а не ОС (кстати, вы поискале в гугле на тему того, как делают хотсваппинг в .NET или это просто ваши впечатления?).
В свете того что количество разных реализаций JVM исчисляется десятками они сами себе OS. Что хотят то и делают. В частности как именно они реализуют хотсваппинг.

Понятно что еще до .NET можно было исхитряться загружать обычную dll динамически в каких-то случаях. Но в общем случае хотсваппинга для COM (машинный код) dll считай что не было. Понятно что не в уровне кода дело, а в сочетании реализаций.

C .NET по-настоящему серьезно я работал многие годы назад, поэтому конечно еще и гуглю чтобы не бредить. Хорошим примером хотсваппинга в .NET является Shadow Copying Assemblies https://docs.microsoft.com/en-us/dot...opy-assemblies

В AX2012 как понимаю на этой же основе (Shadow Copying Assemblies ) есть хотсваппинг серверных cборок https://msdn.microsoft.com/en-us/library/hh538487.aspx

Цитата:
Сообщение от belugin Посмотреть сообщение
Какая при этом разница между интепретацией и JIT, если в файлике все равно байткод?
JIT может быть не только компилятором, но и оптимизировать используя и интерпретацию и компиляцию. Поэтому суть в реализации JIT.

Цитата:
Сообщение от belugin Посмотреть сообщение
За счет чего же этот девопс возникает и как его избюегают интерпретаторы?
В чистой интерпретатации мы просто заменяем source code файл. В этом смысле программировать в PHP как находиться в сказке.
Девопс возникает из-за массы (специфичных к версиям) нюансов для которых требуется отдельная голова и часто уже отдельный подрядчик. И да, возможно дело не в том с какой стороны разбивать яйцо, а в том что исторически сложилось.

Цитата:
Сообщение от belugin Посмотреть сообщение
т.е. дело вовсе не в "компилируемости", да?
В принципе да. Это вопрос процессов, а не байт-кода.

Но все же когда создавалась Javа (на замену С++) она пошла по пути интерпретации.
Не все так просто с точки зрения кросс-платформенности.

Цитата:
Сообщение от belugin Посмотреть сообщение
А вопрос срочности тут при чем? Вы про несколько минут на компиляцию модуля? Или про что?

Имхо в любом случае надо как-то различать совместимые изменения и несовместимые с запуском двух версий и если они не совместимы будет даунтайм потому, что всех надо перегрузить. Или будут ошибки, если не всех перегружать.
Удовольствие от работы в среде программирования это тоже хорошая тема, но я про
feature toggle/test in production.

На моих проектах деплоймент на PROD раз в 1-2 недели. Возможность глубокой ночью что-то откатить или добавить в течение максимум 2 часов дорогого стоит. Возможность сделать это максимально просто - бесценна.

То есть такой вот Agile который захватывает и PROD. C green-blue подменой это какие-то другие проекты с деплоймент раз в несколько месяцев, а то и вообще разово.
При этом еще есть стоимость изменения куда этот DevOps включается.

Ну и поскольку тема про "впечатления от программирования в D365FO" и пошли мнения о волшебных кнопках в AppStore, мне стало интересно в контексте хотсваппинг, а что можно сделать и кто отвечает если установленное AppStore приложение начало приносить десятки тысяч убытков в день.
При том что "одобрено"

Последний раз редактировалось ax_mct; 19.05.2018 в 20:53.
Теги
ax7, dynamics 365 for operations, x++

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
instructorbrandon: April 12th, One Hour D365UG Training Webinar on Undocumented Technique for Performance Tuning D365FO Blog bot DAX Blogs 0 11.04.2018 03:42
D365FO - Как выбрать группу ресурсов (Azure Resource Group) для одно-серверной облачной среды D365FO? MarinaAX DAX: Администрирование 1 14.02.2018 00:03
cleverax: D365FO: Using Bar codes, External codes and GTIN in Warehouse app to identify an item. Blog bot DAX Blogs 0 03.02.2018 21:13
cleverax: D365FO: Manual inbound load rating Blog bot DAX Blogs 0 03.02.2018 21:13
Первые впечатления от АКСАПТЫ Rafael DAX: Прочие вопросы 0 27.11.2001 21:24

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:41.