Спасибо за статью!
Расскажите, пожалуйста, о способах лечения протрузии. ЛФК, физио терапия, массаж, мануальная терапия, плавание и т.п. Как Вы считаете, что эффективнее? (Понятно, не для самолечения, а что бы знать :) ) И какова сейчас эффективность лечения проблем позвоночника — протрузии и грыжы? Можно ли их полность вылечить?
P.S.
И Вы сказали, что знаете хороших врачей. Порекомендуйте, пожалуйста. МСК. Если хотите, можно в личку.
Добрый день!
Я сейчас пробую написать преобразователь Java кода в Arduino код (практически C).
Я так понимаю, это похоже на то что Вы делали. Но Вы используете Groovy, а я на чистой Java решил попробовать. Для анализа кода решил использовать ASTParser от Eclipse. И сразу возникло несколько вопросов. Каким образом Вы с исходниками работали? С помощью средств Groovy или ASTParser (хотя он вроде только для Java кода)? И как генерировали результирующий код из Java кода? Я сначала думал что ASTParser позволит просто изменить исходный код — т.е. по ходу парсинга в ASTVisitor изменяем текущую сущность, если надо, и дальше получаем исходник. Но как я понял, для этого используется другая сущность — ASTWriter, которая работает только для редактирования. А это мне вроде как не подходит. Поэтому возник второй вариант — самому формировать исходный код — например, формировать StringBuilder который при парсинге в ASTVisitor будет дополняться кодом. Вообще, может у вас какие нибудь идеи есть по этому поводу?
Добрый день!
Спасибо за интересную статью!
Просветите, пожалуйста, по поводу следующих нубовских вопросов:
В шейдерах код же исполняется native? А как решается вопрос с GC, как очищаются объекты? Или их нельзя создать? И можно ли создать свои классы?
Можно ли подобным образом компилировать Java код в C++? Я как-то нашёл проект для компиляции Java в C++ для микроконтроллеров (например, Arduino) — называется HaikuVM. И насколько я понял, там используется похожий принцип по разбору AST, но генерируется C++ который больше похож на байт код — по сути каждая инструкция из байт кода — преобразуется в вызов C функции с таким же названием. А у Вас же, насколько я понял, генерируется исходный код, который практически соответствует исходному Java коду. Или не так?
Периодически наблюдаю за вашей TeaVM — с того момента, как Вы статью на хабре написали. Сам писал на GWT, т.ч. интерес был не праздный. Но статей уже давно небыло. Не планируете написать ещё стаью о текущем состоянии дел с TeaVM? На github находил статьи на английском, но может тут напишете?
А в чём фишка поля (field) tag? Я так по коду понял, что если это поле есть, то при выводе лога оно печатается. Так? Ну и не могли бы Вы use case показать применимости тега? А то я с таким первый раз встречаюсь.
4. А существует ли более быстрый способ узнать имя вызывающего класса?
К сожалению, я его не знаю. По моему, в runtime этого нельзя быстро сделать.
А кстати в android.util.Log уровни сделаны константами, а не энамом.
Интересно, не знал. Сейчас посмотрел — действительно, числовые константы. Вообще в JUL (java.util.logging) Level тоже не enum, но используется как enum — final static поля с экземплярами этого класса на которые потом ссылаются.
P.S. Я вообще не придираюсь — просто интересно сделать code review. :)
1. Рефлексия — это плата за удобство использования.
В целом согласен — использовать удобно. Но нельзя ли в Android использовать compile-time аспекты? Может что то вроде AspectJ CTW? Может с этим получится сделать быстрое получение имени метода и класса? Т.е. при компиляции аспектов получать имя метод и класса у вызывающего кода и дальше его использовать. Конечно, будет сложнее чем сейчас — нужно будет компиляцию настраивать в gradle, но зато perfomance будет лучше.
4. Получение имени вызываемого класса через создание исключение (new Throwable().getStackTrace();) медленно.
5. Конструктор должен быть приватным. (насколько я понял, экземпляр этого класса из вне нельзя создать).
6. Поля V, D, I, и т.д., наверное, стоит сделать в виде enum.
А Вы поддержке IDEA писали по этому поводу? Если есть баг у них на трекере, то напишите, я проголосую за него (как, наверное, и многие из этого типика). Они вроде открыты для изменений — нужно только написать.
А как из C# работали с docx? Какие-то готовые решения или сами парсили xml? И как себя проект на Mono ведёт? Были ли ошибки? Я сам не C# разработчик и поэтому здесь могу ошибаться, но я слышал, что на крупных проектах нельзя так просто взять и перейти на Mono.
На счёт Docker интересно придумано! Он у вас и в production используется? А то на сколько я знаю, это технология больше для разработки подходит (для разворачивания на dev/test машинах).
На счёт «неиспытывать дискомфорта» понял. А что на счёт «вылечится, убрать протрузию»? :)
Расскажите, пожалуйста, о способах лечения протрузии. ЛФК, физио терапия, массаж, мануальная терапия, плавание и т.п. Как Вы считаете, что эффективнее? (Понятно, не для самолечения, а что бы знать :) ) И какова сейчас эффективность лечения проблем позвоночника — протрузии и грыжы? Можно ли их полность вылечить?
P.S.
И Вы сказали, что знаете хороших врачей. Порекомендуйте, пожалуйста. МСК. Если хотите, можно в личку.
Я сейчас пробую написать преобразователь Java кода в Arduino код (практически C).
Я так понимаю, это похоже на то что Вы делали. Но Вы используете Groovy, а я на чистой Java решил попробовать. Для анализа кода решил использовать ASTParser от Eclipse. И сразу возникло несколько вопросов. Каким образом Вы с исходниками работали? С помощью средств Groovy или ASTParser (хотя он вроде только для Java кода)? И как генерировали результирующий код из Java кода? Я сначала думал что ASTParser позволит просто изменить исходный код — т.е. по ходу парсинга в ASTVisitor изменяем текущую сущность, если надо, и дальше получаем исходник. Но как я понял, для этого используется другая сущность — ASTWriter, которая работает только для редактирования. А это мне вроде как не подходит. Поэтому возник второй вариант — самому формировать исходный код — например, формировать StringBuilder который при парсинге в ASTVisitor будет дополняться кодом. Вообще, может у вас какие нибудь идеи есть по этому поводу?
Спасибо за интересную статью!
Просветите, пожалуйста, по поводу следующих нубовских вопросов:
В шейдерах код же исполняется native? А как решается вопрос с GC, как очищаются объекты? Или их нельзя создать? И можно ли создать свои классы?
Можно ли подобным образом компилировать Java код в C++? Я как-то нашёл проект для компиляции Java в C++ для микроконтроллеров (например, Arduino) — называется HaikuVM. И насколько я понял, там используется похожий принцип по разбору AST, но генерируется C++ который больше похож на байт код — по сути каждая инструкция из байт кода — преобразуется в вызов C функции с таким же названием. А у Вас же, насколько я понял, генерируется исходный код, который практически соответствует исходному Java коду. Или не так?
К сожалению, я его не знаю. По моему, в runtime этого нельзя быстро сделать.
Интересно, не знал. Сейчас посмотрел — действительно, числовые константы. Вообще в JUL (java.util.logging) Level тоже не enum, но используется как enum — final static поля с экземплярами этого класса на которые потом ссылаются.
P.S. Я вообще не придираюсь — просто интересно сделать code review. :)
5. Конструктор должен быть приватным. (насколько я понял, экземпляр этого класса из вне нельзя создать).
6. Поля V, D, I, и т.д., наверное, стоит сделать в виде enum.
P.S. Игра — найди 10 ошибок?
На счёт Docker интересно придумано! Он у вас и в production используется? А то на сколько я знаю, это технология больше для разработки подходит (для разворачивания на dev/test машинах).