Языковые параметры, совместимые с исходным кодом JVM/CLR
-
03-07-2019 - |
Вопрос
У меня есть инструмент миграции базы данных Java с открытым исходным кодом (http://www.liquibase.org), который я рассматриваю для портирования на .Net.
Большая часть инструмента (по крайней мере, с точки зрения сложности) основана на логике типа «если вы добавляете первичный ключ, а база данных — Oracle, используйте этот SQL».Если база данных MySQL, используйте этот SQL.Если первичный ключ имеет имя и база данных Postgres, используйте этот SQL».
Я мог бы разветвить кодовую базу Java и скрыть ее (вручную и/или автоматически), но по мере поступления обновлений и исправлений ошибок в вышеуказанной логике я не хочу применять ее к обеим версиям.Что я хотел бы сделать, так это переместить всю эту логику в форму, которую можно было бы скомпилировать и использовать как в версиях Java, так и в .Net.
Код, который я хочу преобразовать, не содержит каких-либо расширенных библиотек (JDBC, System.out и т. д.), которые значительно различаются от Java к .Net, поэтому я не думаю, что это будет проблемой (в худшем случае это может быть спроектирован вокруг).
Итак, что я ищу:
- Язык, на котором я могу кодировать общие части моего приложения и компилировать его в классы, используемые «стандартными» языками на целевой платформе.
- Не добавляет никаких требований к системе во время выполнения.
- Ничего так странно, что это отпугивает потенциальных участников
Я знаю, что в Python и Ruby есть реализации для JVM и CLR.Насколько они соответствуют моим требованиям?Кто-нибудь успешно (или безуспешно) использовал эту технику для кроссплатформенных приложений?Есть ли какие-то проблемы, о которых мне стоит беспокоиться?
Решение
Проверьте Язык программирования Фантом.Он имеет собственный синтаксис, подобный Java/C#, но может быть ориентирован как на виртуальную машину Java, так и на .NET CLR.
Их «Почему Фантом» страница дает общий обзор их подхода к переносимости по сравнению с динамическими языками, работающими на виртуальной машине.
Другие советы
Возможно, вам повезет, используя ИКВМ.НЕТ.Я не уверен в его точном статусе, но стоит попробовать, если вы настаиваете на запуске кода Java в .NET Framework.Он включает в себя .NET-реализацию библиотеки базовых классов Java, поэтому кажется достаточно завершенным.
Единственный вариант, который я мог бы предложить, — это портировать код на Дж# язык, полноценный язык .NET (хотя и не первоклассный в том смысле, что C# или VB.NET).Язык был спроектирован так, чтобы различия с Java были минимальными.
Если вы думаете о встроенном подходе, вы можете взглянуть на Lua.