Функциональные языки, которые компилируются в Android Dalvik VM? [закрыто]

16

У меня проблема с программным обеспечением, которая соответствует функциональному подходу к программированию, но целевой рынок будет на ОС Android. Я спрашиваю, потому что есть функциональные языки, которые компилируются в виртуальную машину Java, но байт-код Dalvik! = Байт-код Java.

В качестве альтернативы, знаете ли вы, может ли dxутилита разумно конвертировать .classфайлы, сгенерированные из функциональных языков, таких как Scala?

Изменить : Чтобы добавить немного полезности для сообщества, а также чтобы помочь мне выбрать лучше, могу я немного уточнить вопрос?

  • Вы использовали альтернативные языки с Dalvik? Какие?
  • С какими "проблемами" (проблемами) я могу столкнуться?
  • Является ли производительность приемлемой? Под этим я подразумеваю, что приложение все еще чувствует себя отзывчивым к пользователю.

Я никогда не занимался разработкой мобильных телефонов, но я вырос на устройствах с ограниченными возможностями, и у меня нет иллюзий, что использование платформ нестандартных языков обходится дорого. Мне просто нужно знать, является ли стоимость такой, что я должен использовать мой подход на языке по умолчанию (т.е. применять функциональные принципы на языке ООП).

Берин Лорич
источник
Я обновил вопрос. Спасибо @geekosaur за ваш первоначальный ответ. Это была начальная информация, которую я искал.
Берин Лорич
Я слышал шепот в кафе Haskell о людях, которые делают это с FFI + Haskell + Courage. Я считаю, что для этого есть библиотека на github / hackage
Даниэль Гратцер,

Ответы:

7

В блоге Кристиана Нойкирхена под названием « Программирование для Android с помощью Scala» показано, как создавать программы для Scala для Android. Похоже, dexможет справиться с Scala, но вам нужно использовать инструмент, такой как ProGuard, чтобы сократить библиотеку классов Scala до размера, потому dexчто в противном случае будет импортировать всю среду выполнения Scala.

Также ведется работа над программированием для Android с Erjang и Clojure .

geekosaur
источник
1
Похоже, что почти все варианты, которые вы дали, имеют серьезные потери производительности. Это говорит мне о том, что варианты еще не достаточно развиты для прайм-тайма. Может быть, в другой год?
Берин Лорич
Пока вы не используете большие части библиотеки классов Scala, не должно быть никакого существенного снижения производительности. Кроме того, вы можете автоматизировать весь процесс с Maven.
Ким
@Berin: я думаю, что в будущем не будут использоваться языки, ориентированные на JVM, - dexв конце концов, он оптимизирован для работы не только с байт-кодом Java, но и с соглашениями о байт- кодах Java (вы увидите некоторое обсуждение этого в ссылках, которые я предоставил ранее), - но с ориентацией Дальвик В.М. напрямую. Возможно, это может закончиться быстрее, чем Java- dexмаршрут.
geekosaur
1
И для тех, кто интересуется: документирован байт-код Dalvik VM: коды операций , форматы команд . Я вижу, что некоторые возможности для оптимизации глазка невозможны, если сразу нацелить JVM, не говоря уже о более разумных оптимизациях с использованием архитектуры Dalvik напрямую.
geekosaur
@Kim, в статье, которую я нашел, говорится, что проблема в производительности заключается в различиях между алгоритмами загрузки классов для Java и Dalvik. Если я буду держаться подальше от динамических языковых возможностей Scala, я смогу избежать проблем с загрузкой классов. Та же самая проблема мучила другие варианты. Это все еще довольно новое прямо сейчас. Я все еще могу закончить тем, что попробовал это на этом проекте - это доказательство концепции в любом случае.
Берин Лорич
7

Kawa - прекрасный, но малоизвестный вариант Scheme, который тихо существовал в течение многих лет и изначально работает как на JVM, так и на Dalvik . Поэтому, как и в Mirah, его выходные данные не содержат дополнительных виртуальных машин и включают только явно импортированные библиотеки. В Kawa есть множество стандартных макросов (включая некоторые специфичные для API-интерфейсов Android), которые обеспечивают хороший чистый синтаксис (при условии, что они не обращаются к круглым скобкам), и добавляет некоторые вкусные вкусности поверх Scheme, такие как «обещания» (lazy eval и futures). в одной). Язык достаточно надежный и хорошо документированный, и активно поддерживается и развивается с первых дней существования Java.

Java Advent Calendar суммирует достоинства Kawa с некоторыми информативными примерами и ссылками.

ошибка
источник
Вау, спасибо, что указал мне на Каву! Мне не терпелось заняться разработкой Android не на Java, и это выглядит действительно многообещающе.
Evicatos
1

Кроме скалы, я могу предложить вам взглянуть на мирах на Android, вот некоторые подробности: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Так что же делает этот подход «лучше», чем другие языки? Mirah - это статический типизированный язык, похожий на ruby. Который допускает некоторый функциональный стиль, возможно, лучше, чем java. Обычно «портирование» языка на android проблематично, потому что вам тоже нужно портировать стандартную библиотеку. Мира избегает этого, избегая стандартной библиотеки. В ссылочном материале есть хороший обзор опыта REAL WORLD по запуску миры на андроиде и как это получилось. (попробуй 2)

AndreasScheinert
источник
1
Пожалуйста , не публикуйте тот же ответ, все, что вам нужно было сделать, чтобы попросить, чтобы ваш ответ был удален после того, как вы отредактировали его, чтобы пометить его для модерации.
Яннис