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


16

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

Або ви знаєте, чи dxможе утиліта інтелектуально перетворювати .classфайли, створені з таких функціональних мов, як Scala?

Редагувати : Щоб додати трохи більше корисності для спільноти, а також допомогти мені вибрати краще, чи можу я трохи уточнити питання?

  • Чи використовували ви якісь альтернативні мови з Dalvik? Котрий?
  • Які існують проблеми, з якими я можу зіткнутися?
  • Чи прийнятні показники? Маючи на увазі, я маю на увазі, що програма все ще відчуває відгуки користувачів.

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


Я оновив питання. Дякую @geekosaur за вашу первинну відповідь. Це була вихідна інформація, яку я шукав.
— Берин Лорич

Я чула шепіт у кафе Haskell людей, які роблять це за допомогою FFI + Haskell + Courage. Я вважаю, що для цього існує бібліотека щодо github / hack
— Daniel Gratzer

Відповіді:


7

Є повідомлення в блозі Крістіана Нокірхена під назвою Програмування для Android із Scala, де показано, як створювати програми Scala для Android. Схоже, dexможе працювати з Scala, але вам потрібно використовувати такий інструмент, як ProGuard, щоб скоротити бібліотеку класів Scala до розміру, оскільки dexв іншому випадку імпортується весь час виконання Scala.

Також триває робота над програмуванням Android з Erjang та Clojure .


1
Здається, що майже всі запропоновані вами варіанти мають серйозні покарання за виконання. Це говорить мені, що варіанти ще не дуже зрілі для простого часу. Може, через інший рік?
— Берін Лорич

Поки ви не використовуєте великі частини бібліотеки класів Scala, не повинно бути суттєвого штрафу за продуктивність. Також ви можете автоматизувати весь процес за допомогою maven.
— Кім

@Berin: Я думаю , що майбутній не використовують JVM-таргетинг мов - dexце все - таки оптимізовано для вирішення не тільки Java байткод , але і байткод Java - конвенція (ви побачите деякий обговорення цього в посиланнях, наданих раніше) - але націлювання Дальвік В.М. безпосередньо. Можливо, це може бути швидшим, ніж dexмаршрут Java .
— geekosaur

1
А для тих, хто цікавиться: байткод VM Dalvik задокументований: опкоди , формати інструкцій . Я бачу, що деякі можливості для оптимізації візирних каналів неможливі, орієнтуючись на JVM одразу, не кажучи вже про розумніші оптимізації, використовуючи безпосередньо архітектуру Далвіка.
— geekosaur

@Kim, у статті, яку я знайшов, сказано, що проблема продуктивності полягала в відмінностях між алгоритмами завантаження класів для Java та Dalvik. Якщо я тримаюся осторонь динамічних особливостей мови Scala, я повинен мати можливість уникати проблем із завантаженням класу. Це ж питання зачепило інші варіанти. Зараз все ще досить нове. Я все ще можу в кінцевому підсумку спробувати це на цьому проекті - це будь-який доказ концепції.
— Берін Лорич

7

Kawa - це чудовий, але маловідомий варіант Схеми, який спокійно існує багато років і працює як на Спільницькому порталі, так і на Далвіку . Тому, подібно до Mirah, його вихід не включає зайвих VM і включає лише явно імпортні бібліотеки. Kawa має безліч стандартних макросів (включаючи деякі специфічні для Android API), які дозволяють створити симпатичний чистий синтаксис (якщо припустити, що це не проти дужок) і додає смачні смаколики на вершині схеми, як-от "обіцянки" (лінивий евал та ф'ючерси в одному). Мова є досить міцною і добре задокументованою і активно підтримується та розвивається з перших днів Яви.

Календар календарів Java підсумовує достоїнства Кави з деякими інформативними прикладами та посиланнями.


Вау, дякую, що вказали мені на Каву! Я свербіла, щоб зробити якісь розробки для Android не для Java, і це виглядає дійсно багатообіцяюче.
— Евікатос

1

Окрім шкали, я можу запропонувати вам ознайомитись з мірою на андроїді, ось деякі деталі: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Отже, що робить цей підхід "кращим", ніж інші мови? Міра - це статична мова, схожа на рубін. Це дозволяє певний функціональний стиль, мабуть, краще, ніж java.Зазвичай "перенесення" мови на android є проблематичним, оскільки вам також потрібно портувати стандартну бібліотеку. Міра уникає цього, уникаючи мати стандартний ліб. У матеріалі, що посилається, є хороший огляд досвіду REAL WORLD, який працює з mirah на android та як це вийшло. (спробуйте 2)


1
Будь ласка , не переписуйте ту саму відповідь, все, що вам потрібно було зробити, щоб попросити не відповідати відповідь після її редагування, щоб позначити її на модераторну увагу.
— янніс

0

На Clojure на Android було багато руху ( https://github.com/clojure-android/neko ) Neko .
Є питання щодо продуктивності, пов’язані з Далвіком В.М. та компілятором Clojure; ці питання повільно вирішуються.

Презентація про поточний стан (липень 2015 року): https://www.youtube.com/watch?v=mVXTcAEKgF8&index=9&list=PLZdCLR02grLoBx0Y5ZrpdmLxc160PIwzQ


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.