AndroidのDalvik VMにコンパイルされる関数型言語?[閉まっている]


16

プログラミングへの機能的アプローチに適合するソフトウェアの問題がありますが、ターゲット市場はAndroid OSになります。JavaのVMにコンパイルされる関数型言語がありますが、Dalvikバイトコード!= Javaバイトコードがあるためです。

あるいは、dxユーティリティが.classScalaのような関数型言語から生成されたファイルをインテリジェントに変換できるかどうか知っていますか?

編集:コミュニティにもう少し役立つものを追加するために、また私がより良い選択をするために、質問を少し洗練させることができますか?

  • Dalvikで他の言語を使用しましたか?どれ?
  • 遭遇する可能性のある「落とし穴」(問題)とは何ですか?
  • パフォーマンスは許容範囲ですか?つまり、アプリケーションは依然としてユーザーに反応していると感じています。

私は携帯電話の開発を行ったことはありませんが、制約のあるデバイスで育ち、プラットフォームで非標準言語を使用するのにコストがかかるという幻想はありません。コストがデフォルト言語へのアプローチを靴磨きする必要があるかどうかを知る必要があるだけです(つまり、OOP言語で機能原理を適用します)。


質問を更新しました。最初の回答をありがとうございます。それは私が探していた開始情報でした。
ベリンロリチュ

Haskellカフェで、FFI + Haskell + Courageでこれをしている人のささやきを聞いたことがあります。私はgithubの/ hackage上のライブラリがそれのためにそこにあると信じて
ダニエルGratzer

回答:


7

Christian Neukirchenによる、Scalaを使用したAndroid向けプログラミングと呼ばれる、Android用 Scalaプログラムの作成方法を示すブログ投稿があります。dexScalaを処理できるように見えますがdex、Scalaランタイム全体をインポートするため、ProGuardなどのツールを使用してScalaクラスライブラリをサイズに縮小する必要があります。

ErjangClojureによる Androidプログラミングの進行中の作業もあります。


1
あなたが与えたオプションのほぼすべてが深刻なパフォーマンスのペナルティを持っているようです。それは、オプションがまだプライムタイムに十分なほど成熟していないことを教えてくれます。多分もう一年で?
ベリンロリチュ

scalaのクラスライブラリの大部分を使用しない限り、パフォーマンスが大幅に低下することはありません。また、Mavenを使用してプロセス全体を自動化できます。
キム

@Berin:私は、将来はJVMターゲット言語を使用していないと思います— dex結局、JavaバイトコードだけでなくJavaのバイトコード規約にも対処するように最適化されています(これについては、前に提供したリンクで説明します) Dalvik VMを直接。おそらく、Java dexルートよりも高速になる可能性があります。
ギコサウルス

1
そして、不思議に思う人のために:Dalvik VMバイトコードが文書化されています:opcodes命令フォーマット。Dalvikアーキテクチャを直接使用したよりスマートな最適化はもちろんのこと、JVMをすぐにターゲットにすることでは不可能なピープホール最適化の可能性がいくつかあります。
ギーコサウルス

@Kim、私が見つけた記事は、パフォーマンスの問題はJavaとDalvikのクラスローディングアルゴリズムの違いにあると述べました。Scalaの動的言語機能から離れれば、クラスの読み込みの問題を回避できるはずです。同じ問題が他の選択肢を悩ませました。今はまだかなり新しいものです。私はまだこのプロジェクトでそれを試してみるかもしれません-それは概念実証の方法です。
ベリンロリチュ

7

Kawaは、長年にわたって静かに存在してきた素敵であるがあまり知られていないSchemeのバリアントで、JVMとDalvikの両方でネイティブに実行されます。したがって、Mirahと同様に、その出力には追加のVMは含まれず、明示的にインポートされたライブラリのみが含まれます。Kawaには、すっきりした構文を作成するための多くの標準マクロ(Android APIに固有のものを含む)があり(括弧を嫌うものではないと仮定)、Schemeの上に "promises"(lazy evalおよびfuturesなど)で)。この言語は非常に堅牢で十分に文書化されており、Javaの初期の頃から積極的に維持され進化しています。

Javaアドベントカレンダーは、Kawaのメリットをいくつかの有益な例とリンクでまとめています。


わあ、川に向かってくれてありがとう!私は、Java以外のAndroid開発を行うためにかゆみをしてきました。
エヴィカトス

1

scalaのほかに、Androidのmirahをご覧になることをお勧めします。詳細は次のとおりです。http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

このアプローチが他の言語よりも「優れている」のはなぜですか?Mirahは、ルビに似た静的型付け言語です。これはjavaよりも間違いなく機能的なスタイルを可能にします。通常、標準ライブラリも移植する必要があるため、言語をAndroidに「移植」するのは問題です。Miraは、標準ライブラリを使用しないことでこれを回避します。参照資料では、Androidでmirahを実行したREAL WORLDの経験からの素晴らしい概要と、それがどのようになったのかを説明しています。(2を試してください)


1
同じ回答を再投稿しないでください。編集後に回答が削除されないようにするために必要なことは、適度な注意を促すためにフラグを立てることだけでした。
ヤンニス


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.