|
18.05.2018, 18:14 | #1 |
Banned
|
Цитата:
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 |
Участник
|
Цитата:
Не могли бы вы привести ссылку для подтверждения своего утверджения? 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 |
Banned
|
Цитата:
Сообщение от 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.
В CLR возможностей использования интерпретации в JIT - нет совсем. А она таки для программистов удобнее и мы ее потеряли с D365FO. |
|
18.05.2018, 21:46 | #4 |
Участник
|
А чем код железного процессора так отличается от кода виртуальной машины что это в корне запрещает 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 |
Banned
|
Цитата:
VM это сама себе OS и что хочет то и может себе позволить. При этом там где интерпретация это явно легче. Цитата:
А это не просто бросить jar, а как-то обновлять все ссылки в работающей VM. Это реально круто. Цитата:
Есть еще отключаемый Compile on Save, но тут если в Java мы компилируем исходник .java в байткод .class на уровне класса, то как я понимаю VS это делает на уровне проекта. Цитата:
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 |
Участник
|
Цитата:
Какая при этом разница между интепретацией и JIT, если в файлике все равно байткод? Цитата:
Подмена приложения (blue-green deployment ) в большинстве случаев все равно требует downtime пусть и значительно уменьшенный. А главное опять же нехилый DevOps и особенно с DB.
Цитата:
Так и есть. Помимо этого дает еще и неубиваемость в отличие от того же ASP.NET.
PHP наиболее отвечает stateless природе web. Цитата:
А как мы можем blue-green deployment в D365FO? Это может MS без downtime?
Тут ведь помимо downtime и вопрос срочности. Но может кто-то более знакомый с кишками обслуживания прода меня поправит. А вопрос срочности тут при чем? Вы про несколько минут на компиляцию модуля? Или про что? Имхо в любом случае надо как-то различать совместимые изменения и несовместимые с запуском двух версий и если они не совместимы будет даунтайм потому, что всех надо перегрузить. Или будут ошибки, если не всех перегружать. Цитата:
Я на практике где сомневаюсь обрамляю код параметром DB.
Типа список галок на некой форме для отключения недавно добавленного функционала пусть даже это просто кусок кода. Потому как даже в AX2012 страшно жить. Цитата:
То есть способность быстро откатывать и накатывать изменения она очень важна. Иначе лучше вообще ничего не менять. Вот накатили мы приложение из AppStore и через какое время продакшн пошел в разнос в силу логического конфликта. По хорошему должен отключаться галкой абсолютно весь занесенный или прицепившийся код. А кто за это отвечает? ISV скажет ничего не знаем MS одобрил?
|
|
19.05.2018, 20:51 | #7 |
Banned
|
Цитата:
Понятно что еще до .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 Цитата:
Цитата:
Девопс возникает из-за массы (специфичных к версиям) нюансов для которых требуется отдельная голова и часто уже отдельный подрядчик. И да, возможно дело не в том с какой стороны разбивать яйцо, а в том что исторически сложилось. В принципе да. Это вопрос процессов, а не байт-кода. Но все же когда создавалась 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++ |
|
|