Кстати, если бы рынок требовал, то и TeaVM была бы не маргинальной технологией где-то на задворках Java-экосистемы, а я бы сейчас сидел в своём уютном стартапе и грёб бы деньги лопатой. Но нет, разработчикам вовсе не понятно, почему им вместо того, чтобы нанять отдельных фронтэндеров, надо брать какой-то непонятный компилятор. В принципе, я могу их понять - даже если берёте в руки непонятный компилятор, то язык-то у вас останется Java, а вот во всю остальную фронтэндерскую работу (CSS, вёрстка, адаптивный дизайн и т.д.) придётся вникать, так то чаще всего действительно проще нанять фронтэндера, у которого уже есть свой любимый инструмент.
Есть ровно два сценария для задачи "запустить Java в браузере": есть уже достаточно толстая нетривиальная логика, которую нет вообще никакой возможности переписать на JS/TS (например, у нас это OT, чей код строго верифицирован в Coq) или есть уже достаточно большое приложение, которое и так работает на Android и iOS (через Graal Native Image) и хочется запускать его в web (и при этом нативный look&feel вообще не нужен - часто это сценарий для игр). Признаю, такие сценарии редки, но они встречаются в природе.
но рынок требует, и разработчики пытаются реализовать такой таргет в своих рантаймах.
А где по ссылкам "рынок требует"? Я как раз по первой ссылке вижу, что "какие-то странные чуваки пришли и зачем-то создали issue", а им сказали "мы не хотим над таким работать".
Ко мне часто приходили какие-то странные чуваки и доказывали, что если вот Java вместо JVM запускать в WASI, то от этого Java станет в 1000 раз лучше. Я подозреваю, что это чуваки из стартапов, которые разрабатывали или предоставляли в аренду виртуальные рантамы, как докер. Потом, видимо, кто-то из пришедших оказался инженером и прямо выкатил PR. Но в тот конкретный момент мне было совсем не до код-ревью больших PR, и чувак тогда сделал "friendly fork", написал пару статей, выступил на конференциях и... всё заглохло. Подозреваю, что бизнесу попытались объяснить, зачем ему это, бизнес покупать не захотел.
А чем WASI не "POSIX"?
Тем, что WASI - это жалкий обрубок POSIX. В частности, там нет сигналов, нет mmap, mprotect и других очень любимых авторами рантаймов вещей. И ещё WASI в браузере нет, для этого нужно тащить довольно здоровенный polyfill. И ещё полноценным POSIX WASI не станет никогда, т.к. безопасность.
Почему нельзя реализовать исключения, наследование и виртуальные функции через механизмы JS?
Так в статье я и пишу о том, что перевод из JVM в JS - это гораздо лучше работающий вариант. Вот прямо на конкретных примерах разбираю. И задаю вопрос: а если JS всё равно работает лучше для этой задачи, зачем мне WebAssembly?
Кто сказал, что Web Assembly это именно низкоуровневая платформа, аналогичная аппаратной?
Хм, как минимум спека WebAssembly.
Представьте, что вы решаете обратнуюПредставьте, что вы решаете обратную задачу - перевод какого-то другого языка в байт-код JVM. задачу - перевод какого-то другого языка в байт-код JVM.
Ой, тогда это либо изначально язык, создававшийся для исполнения на JVM (и названный в честь острова рядом с Питером), либо я получу результат с довольно плохой производительностью и плохо вписывающийся как в местную экосистему, так и в свою собственную. Даже JavaScript невозможно эффективно реализовать в JVM.
то вопрос нубиса, который джаву полгода назад "изучил"
Я джаву 20 лет назад изучил, умею генерировать и инструментировать байт-код, написал свою JVM и работал в команде Kotlin, и я вот сам не понимаю, почему нельзя делать так, как спрашивает автор. Тем более, что на уровне JVM такое поддерживается. Собственно, если класс не предполагает наличие какой-либо логики в нём (например, это простой DTO; такой паттерн можно найти в т.ч. у Фаулера), то не понятно, какой смысл в том, чтобы оборачивать поля в пары get/set.
Поддерживаю свой проект TeaVM уже 10 лет. Денег с него не получил никаких. Всё ещё надеюсь, что это удастся изменить. Сейчас я просто работаю в компании, которая использует TeaVM для своих нужд, а я как бы под рукой и всегда могу что-то оперативно поправить, это и является основным мотиватором не забрасывать. Есть ещё несколько компаний, которые используют TeaVM (в том числе, JetBrains), есть товарищи, которые сделали бэкэнд для игрового движка libgdx и даже есть товарищи, которые свои игры выкладывали на этом поделии (раз, два, и т.д.). Денег не зарабатываю ровно по двум причинам:
Чукча инженер, а не бизнесмен. Как делать бизнес, понятия не имею.
Похоже, что фреймворки, компиляторы и т.д., сейчас действительно очень сложно монетизировать и мало у кого это получается.
А пока рабочие планы такие: возможно, проект, на котором я сейчас работаю, очень хорошо выстрелит (он и так выстрелил, но хочется, чтобы прямо намного-намного лучше) и компания сможет тратить деньги на "статусный" проект для демонстрации что "мы не просто красивые UI рисуем, у нас свой фреймворк", и мне удастся, продолжая сидеть на зарплате, 100% рабочего времени трудиться над проектом.
Не, конечно, хотелось бы это коммерциализировать и работать над проектом full time. Просто я на 100% инженер, и на 0% - бизнесмен. Я не представляю, как можно заработать на проекте, даже нет ни малейших идей, с чего начинать.
Я где-то писал про то, что "в Германии такого не бывало"? Я про то, что здесь и сейчас в Германии на порядки безопаснее находиться. Исторические ретроспективы, так же как и долгосрочные прогнозы на ближайшие 70 лет, в данном случае мне совсем не интересны.
У меня на работе мы нашли применение native image: компиляция приложения в iOS - там нельзя JIT ни под каким соусом. Получается, можно из одного набора исходников (с небольшой платформо-специфической частью) собирать приложения для Android, iOS и для веба (привет, компиляторы Java в JS).
Да я на свой счёт не принимаю. Просто как-то немного надоела эта вечная мантра "а в котлине есть натив и JS", когда это не является его конкурентным преимуществом. Мы на работе пишем на связке Kotlin+Java, и никакой возможности использовать Kotlin/Native и Kotlin/JS у нас нет. Что не мешает нам компилировать приложение в веб, андроид, iOS и пачку VR/AR/XR устройств (хотя последние - это по сути Android с добавками). Обидно, что в Java есть всё то же самое, но это как-то не особо кем-либо пиарится.
Это единственная ваша реплика, с которой могу согласиться.
В котлине можно писать сколь угодно сложные программы, с использованием и всех стандартных библиотек котлина и с использованием котлиновских бриджей на все браузерные объекты
TeaVM тоже позволяет писать сколь угодно сложные программы. Уж я не знаю, разрешат ли правила Хабра публиковать ссылку на продукт, в коде которого 500К+ строчек и который полность компилируется TeaVM. А, ну вот JetBrains используют в своём DataLore.
Это правда, поддерживается только подмножество стандартной библиотеки Java. Однако, учитывая скудность стандартной библиотеки Kotlin, в итоге получается, что TeaVM покрывает даже больший функционал. В TeaVM так же есть бриджи на многие (хотя и не далеко не все) браузерные объекты.
Господи, опять этот пропагандистский приём про "своими мозгами". Своими мозгами думаем, ситуацию взвешиваем, анализируем. И чего вы опять про Германию? Разговор был про то, что в России творится, а вы опять стрелки переводите. О том, как там в Германии, я могу долго говорить, иллюзий никогда не было, но сейчас даже при всех недостатках жизни там по сравнению с РФ, я в РФ - ни ногой. Это не потому, что тут райские кущи и единороги какают бабочками. А потому что в РФ существует угроза для моей жизни.
Жалеть о чём? О том, что руководство РФ принимает решения, прямо-таки вынуждающие меня валить за бугор? Ну так уже полтора года жалею. И тут надо не на 5-10 лет назад в прошлое смотреть, а на 20.
Мой опыт тут нерелевантен. Насколько я знаю, никакой привязки к городу тут нет, Германия довольно-таки децентрализована по сравнению с Россией, и Берлин тут вообще не самый приятный и востребованный город. Да и вообще, голубая карта - это не чисто немецкая фишка, вроде подобные программы есть во многих более-менее крупных странах ЕС. Лично я релоцировался с работодателем, который закрыл офисы в России и предложил сотрудникам релокацию в одну из стран присутствия.
Да я уже нашёл пару приятных мест в Мюнхене и Берлине. Тут другой момент есть: это Питер кофейный (и вообще, гастрономический) город, но про Россию в целом не могу сказать, чтобы это была сильно кофейная страна. Сразу бросилось в глаза по прибытии: в кафе и ресторанах тут сидят пенсионеры. В России же - айтишники и всякие хипстеры. Т.е. вот тут у пенсионера хватает денег на то, чтобы посидеть в кофейне, в отличие от.
Кстати, если бы рынок требовал, то и TeaVM была бы не маргинальной технологией где-то на задворках Java-экосистемы, а я бы сейчас сидел в своём уютном стартапе и грёб бы деньги лопатой. Но нет, разработчикам вовсе не понятно, почему им вместо того, чтобы нанять отдельных фронтэндеров, надо брать какой-то непонятный компилятор. В принципе, я могу их понять - даже если берёте в руки непонятный компилятор, то язык-то у вас останется Java, а вот во всю остальную фронтэндерскую работу (CSS, вёрстка, адаптивный дизайн и т.д.) придётся вникать, так то чаще всего действительно проще нанять фронтэндера, у которого уже есть свой любимый инструмент.
Попробуйте TeaVM.
Есть ровно два сценария для задачи "запустить Java в браузере": есть уже достаточно толстая нетривиальная логика, которую нет вообще никакой возможности переписать на JS/TS (например, у нас это OT, чей код строго верифицирован в Coq) или есть уже достаточно большое приложение, которое и так работает на Android и iOS (через Graal Native Image) и хочется запускать его в web (и при этом нативный look&feel вообще не нужен - часто это сценарий для игр). Признаю, такие сценарии редки, но они встречаются в природе.
А где по ссылкам "рынок требует"? Я как раз по первой ссылке вижу, что "какие-то странные чуваки пришли и зачем-то создали issue", а им сказали "мы не хотим над таким работать".
Ко мне часто приходили какие-то странные чуваки и доказывали, что если вот Java вместо JVM запускать в WASI, то от этого Java станет в 1000 раз лучше. Я подозреваю, что это чуваки из стартапов, которые разрабатывали или предоставляли в аренду виртуальные рантамы, как докер. Потом, видимо, кто-то из пришедших оказался инженером и прямо выкатил PR. Но в тот конкретный момент мне было совсем не до код-ревью больших PR, и чувак тогда сделал "friendly fork", написал пару статей, выступил на конференциях и... всё заглохло. Подозреваю, что бизнесу попытались объяснить, зачем ему это, бизнес покупать не захотел.
Тем, что WASI - это жалкий обрубок POSIX. В частности, там нет сигналов, нет mmap, mprotect и других очень любимых авторами рантаймов вещей. И ещё WASI в браузере нет, для этого нужно тащить довольно здоровенный polyfill. И ещё полноценным POSIX WASI не станет никогда, т.к. безопасность.
Так в статье я и пишу о том, что перевод из JVM в JS - это гораздо лучше работающий вариант. Вот прямо на конкретных примерах разбираю. И задаю вопрос: а если JS всё равно работает лучше для этой задачи, зачем мне WebAssembly?
Хм, как минимум спека WebAssembly.
Ой, тогда это либо изначально язык, создававшийся для исполнения на JVM (
и названный в честь острова рядом с Питером), либо я получу результат с довольно плохой производительностью и плохо вписывающийся как в местную экосистему, так и в свою собственную. Даже JavaScript невозможно эффективно реализовать в JVM.Вы случаем Хаффмана (и вообще, энтропийное сжатие) не путаете с различными LZ-алгоритмами?
Ещё есть адаптивный алгоритм Хаффмана, где по мере поступления символов пересчитываются частоты символов и (инкрементально) перестраивается дерево.
Я джаву 20 лет назад изучил, умею генерировать и инструментировать байт-код, написал свою JVM и работал в команде Kotlin, и я вот сам не понимаю, почему нельзя делать так, как спрашивает автор. Тем более, что на уровне JVM такое поддерживается. Собственно, если класс не предполагает наличие какой-либо логики в нём (например, это простой DTO; такой паттерн можно найти в т.ч. у Фаулера), то не понятно, какой смысл в том, чтобы оборачивать поля в пары get/set.
Поддерживаю свой проект TeaVM уже 10 лет. Денег с него не получил никаких. Всё ещё надеюсь, что это удастся изменить. Сейчас я просто работаю в компании, которая использует TeaVM для своих нужд, а я как бы под рукой и всегда могу что-то оперативно поправить, это и является основным мотиватором не забрасывать. Есть ещё несколько компаний, которые используют TeaVM (в том числе, JetBrains), есть товарищи, которые сделали бэкэнд для игрового движка libgdx и даже есть товарищи, которые свои игры выкладывали на этом поделии (раз, два, и т.д.). Денег не зарабатываю ровно по двум причинам:
Чукча инженер, а не бизнесмен. Как делать бизнес, понятия не имею.
Похоже, что фреймворки, компиляторы и т.д., сейчас действительно очень сложно монетизировать и мало у кого это получается.
А пока рабочие планы такие: возможно, проект, на котором я сейчас работаю, очень хорошо выстрелит (он и так выстрелил, но хочется, чтобы прямо намного-намного лучше) и компания сможет тратить деньги на "статусный" проект для демонстрации что "мы не просто красивые UI рисуем, у нас свой фреймворк", и мне удастся, продолжая сидеть на зарплате, 100% рабочего времени трудиться над проектом.
Не, конечно, хотелось бы это коммерциализировать и работать над проектом full time. Просто я на 100% инженер, и на 0% - бизнесмен. Я не представляю, как можно заработать на проекте, даже нет ни малейших идей, с чего начинать.
Я где-то писал про то, что "в Германии такого не бывало"? Я про то, что здесь и сейчас в Германии на порядки безопаснее находиться. Исторические ретроспективы, так же как и долгосрочные прогнозы на ближайшие 70 лет, в данном случае мне совсем не интересны.
У меня на работе мы нашли применение native image: компиляция приложения в iOS - там нельзя JIT ни под каким соусом. Получается, можно из одного набора исходников (с небольшой платформо-специфической частью) собирать приложения для Android, iOS и для веба (привет, компиляторы Java в JS).
Да я на свой счёт не принимаю. Просто как-то немного надоела эта вечная мантра "а в котлине есть натив и JS", когда это не является его конкурентным преимуществом. Мы на работе пишем на связке Kotlin+Java, и никакой возможности использовать Kotlin/Native и Kotlin/JS у нас нет. Что не мешает нам компилировать приложение в веб, андроид, iOS и пачку VR/AR/XR устройств (хотя последние - это по сути Android с добавками). Обидно, что в Java есть всё то же самое, но это как-то не особо кем-либо пиарится.
Вы не поверите, но в той скудной документации, которая имеется, информация об этом присутствует.
Собственно, не считая людей, которые присылают PR на ревью, я и есть автор.
Кстати, если не нравится поделие от ноунейма (который, кстати, в своё время поработал над Kotlin/JS), то чем тот же GWT не устраивает?
А что "такое" вы ожидали увидеть?
Это единственная ваша реплика, с которой могу согласиться.
TeaVM тоже позволяет писать сколь угодно сложные программы. Уж я не знаю, разрешат ли правила Хабра публиковать ссылку на продукт, в коде которого 500К+ строчек и который полность компилируется TeaVM. А, ну вот JetBrains используют в своём DataLore.
Это правда, поддерживается только подмножество стандартной библиотеки Java. Однако, учитывая скудность стандартной библиотеки Kotlin, в итоге получается, что TeaVM покрывает даже больший функционал. В TeaVM так же есть бриджи на многие (хотя и не далеко не все) браузерные объекты.
Господи, опять этот пропагандистский приём про "своими мозгами". Своими мозгами думаем, ситуацию взвешиваем, анализируем. И чего вы опять про Германию? Разговор был про то, что в России творится, а вы опять стрелки переводите. О том, как там в Германии, я могу долго говорить, иллюзий никогда не было, но сейчас даже при всех недостатках жизни там по сравнению с РФ, я в РФ - ни ногой. Это не потому, что тут райские кущи и единороги какают бабочками. А потому что в РФ существует угроза для моей жизни.
Жалеть о чём? О том, что руководство РФ принимает решения, прямо-таки вынуждающие меня валить за бугор? Ну так уже полтора года жалею. И тут надо не на 5-10 лет назад в прошлое смотреть, а на 20.
Скорее, моя реплика была не про "найти работодателя", а про "сделать бюрократию, если работодатель уже найден"
Мой опыт тут нерелевантен. Насколько я знаю, никакой привязки к городу тут нет, Германия довольно-таки децентрализована по сравнению с Россией, и Берлин тут вообще не самый приятный и востребованный город. Да и вообще, голубая карта - это не чисто немецкая фишка, вроде подобные программы есть во многих более-менее крупных странах ЕС. Лично я релоцировался с работодателем, который закрыл офисы в России и предложил сотрудникам релокацию в одну из стран присутствия.
Да я уже нашёл пару приятных мест в Мюнхене и Берлине. Тут другой момент есть: это Питер кофейный (и вообще, гастрономический) город, но про Россию в целом не могу сказать, чтобы это была сильно кофейная страна. Сразу бросилось в глаза по прибытии: в кафе и ресторанах тут сидят пенсионеры. В России же - айтишники и всякие хипстеры. Т.е. вот тут у пенсионера хватает денег на то, чтобы посидеть в кофейне, в отличие от.