|
![]() |
#1 |
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. |
|
![]() |
#2 |
Участник
|
А чем код железного процессора так отличается от кода виртуальной машины что это в корне запрещает hotswapping? (кстати, VS поддерживает edit and continue для C++)
И еще, какие ограничения есть на hotswapping у JVM из коробки и зачем нужны всякие чудестные другие штуки, которые находятся по запросу "java hotswapping" (типа JRebel). Лично мое мнение что для продакшена концептуально лучше blue-green deployment - это позволяет получить гарантию, что код относится к одной какой-то версии. Что вы про это думаете? Для разработки есть edit and continue с ограничениями (что на JVM, что на .NET). Еще интересно про "интерпретаторы" - про тот же PHP сложилось впечатление, там нет никакого хотсваппинга (т.е. время жизни всего в типичном случае - один запрос) и легкость обновления достигается именно за счет этого, нет? |
|
![]() |
#3 |
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 одобрил? ![]() |
|
![]() |
#4 |
Участник
|
Цитата:
Какая при этом разница между интепретацией и JIT, если в файлике все равно байткод? Цитата:
Подмена приложения (blue-green deployment ) в большинстве случаев все равно требует downtime пусть и значительно уменьшенный. А главное опять же нехилый DevOps и особенно с DB.
Цитата:
Так и есть. Помимо этого дает еще и неубиваемость в отличие от того же ASP.NET.
PHP наиболее отвечает stateless природе web. Цитата:
А как мы можем blue-green deployment в D365FO? Это может MS без downtime?
Тут ведь помимо downtime и вопрос срочности. Но может кто-то более знакомый с кишками обслуживания прода меня поправит. А вопрос срочности тут при чем? Вы про несколько минут на компиляцию модуля? Или про что? Имхо в любом случае надо как-то различать совместимые изменения и несовместимые с запуском двух версий и если они не совместимы будет даунтайм потому, что всех надо перегрузить. Или будут ошибки, если не всех перегружать. Цитата:
Я на практике где сомневаюсь обрамляю код параметром DB.
Типа список галок на некой форме для отключения недавно добавленного функционала пусть даже это просто кусок кода. Потому как даже в AX2012 страшно жить. Цитата:
То есть способность быстро откатывать и накатывать изменения она очень важна. Иначе лучше вообще ничего не менять. Вот накатили мы приложение из AppStore и через какое время продакшн пошел в разнос в силу логического конфликта. По хорошему должен отключаться галкой абсолютно весь занесенный или прицепившийся код. А кто за это отвечает? ISV скажет ничего не знаем MS одобрил?
![]() |
|
![]() |
#5 |
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. |
|
![]() |
#6 |
Участник
|
Цитата:
(Кстати, недавно слышал передачку про blazor там заюзали Mono в режиме интерпретации) Цитата:
C .NET по-настоящему серьезно я работал многие годы назад, поэтому конечно еще и гуглю чтобы не бредить. Хорошим примером хотсваппинга в .NET является Shadow Copying Assemblies
Цитата:
JIT может быть не только компилятором, но и оптимизировать используя и интерпретацию и компиляцию. Поэтому суть в реализации JIT.
В чистой интерпретатации мы просто заменяем source code файл. В этом смысле программировать в PHP как находиться в сказке. Задно какая разница между хотсвоппингов двух различных сборок: одна частично скомпилирована потому, что какие-то участки кода выполнялись там не один раз (как в HotSpot), другая - потому, что какие-то пути выполнялись, какие-то нет (как в .NET) Цитата:
Девопс возникает из-за массы (специфичных к версиям) нюансов для которых требуется отдельная голова и часто уже отдельный подрядчик. И да, возможно дело не в том с какой стороны разбивать яйцо, а в том что исторически сложилось.
Цитата:
То есть такой вот Agile который захватывает и PROD. C green-blue подменой это какие-то другие проекты с деплоймент раз в несколько месяцев, а то и вообще разово.
Как, кстати, гарантируется корректность работы в случае хотсвоппинга в стиле X++ - например, мы изменили класс А и B. Работает клиент, но класс B пока загрузил, не может ли быть такого, что в какой-то момент он станет работать со старой версией класса A и с новой класса B? Последний раз редактировалось belugin; 19.05.2018 в 22:54. |
|
![]() |
#7 |
Banned
|
Цитата:
Сообщение от belugin
![]() Не вижу никакой связи между первым утверждением и вторым, честно говоря. Если я что хочу то и делаю и я один, то я не сам себе операционная система, если нас трое и мы что хотим то и делаем мы не операционная система, вот если нас несколько десятков, то да.
... И как же там с регистрацией в реестре и блокировками того, что используется Цитата:
Сообщение от belugin
![]() (Кстати, недавно слышал передачку про blazor там заюзали Mono в режиме интерпретации)
Делать копию Java в лучшем китайском стиле копирования и носиться с достижениями на этом поприще. Blazor: Техническое введение https://habr.com/post/348660/ Ну и зачем это все? Хотите Java, берите Java. Зачем вообще делать "свою" Java? Цитата:
То есть исключительно с точки зрения удобства программиста как пользователя, с точки зрения стоимости, c точки зрения рынка. Сел, завел, доехал. Простота, стоимость, выполнение задачи. В AX это возможная простота деплоймента которую делает сам программист. Что крайне удобно для всех. В D365FO основной нюанс это TFS где нужен отдельный специалист. Ну и отдельные VM для каждого программиста. Тот самый DevOps который сильно отличает жизнь в AX и в D365FO. blue-green в AX выглядит серьезной и дорогой операцией которую часто просто никто не захочет делать без острой необходимости. Это не просто 2 часа работы одного программиста. Тут я сравниваю импорт xpo с рестартом с downtime 1-2 часа и blue-green как переключение пользователей на новый AOC и возней с DB схемами и прочим. Если мы говорим о D365FO то технические нюансы деплоймента и хотсвоппинга в PROD мало имеют смысла так как это делает MS а не программист. Если же мы сравниваем возможности .NET с Java, то мое глубокое мнение что .NET как был second-class по сравнению с Java так им и остался. Цитата:
Но совсем без перезапуска клиентской части это PHP ![]() Из чего складываются впечатления от среды и комфорт программиста в среде? - быстродействие - полный контроль над средой - полное понимание среды Что возможно только там где простота и легкость. А вот просто и легко ли в D365FO, я сильно сомневаюсь. |
|
Теги |
ax7, dynamics 365 for operations, x++ |
|
|