2009-05-03 11 views
10

スマートフォン/モバイルデバイスのOSが動的言語を選択する言語として許可されていないのはなぜですか? iPhoneはObjective-Cを使用し、Google AndroidはJavaを使用し、Windows Mobileはあらゆる方法の.NET言語を使用します。モバイルOSとしてのPython/Ruby

モバイルOSがPython、Ruby、その他の動的言語で書かれている理由は何でしょうか?私は、低レベルではカットしないだろうが、CやC++はそれでうまくいくだろうと理解しています。例えば、Pythonはその上にあるレイヤーと相互作用することができます。つまり、JythonやCPythonがあります。

なぜ今日のモバイルOSで動的言語サポートが表示されないのか不思議に思っていました。

答えて

14

一般に、これらのすべてです。メモリ、スピード、そしておそらく最も重要なのはプログラマの親しみです。 AppleはObjective Cに膨大な投資をしています.Javaは基本的に誰にでも知られています.C#も非常に人気があります。あなたが大量のプログラマーの訴求を試みているなら、たとえそれが退屈であっても、人気のあるものから始めるのが理にかなっています。

これを停止する技術的な要件はありません。我々はRubyのスタック全体を書くことができ、プログラマがCの遅いビットを再実装できるようにすることができます。これはモバイルOSを作っている企業にとっては投資になるだろうし、その日の終わりには、これからも多くの利益を得られるとは思えない。

最後に、モバイルデバイスの始まりです。 5年後には、ずっと広いモバイルスタックを見ても驚くことはありません。

0

私は基本的な理由は、セキュリティと信頼性の組み合わせだと思う。誰かが簡単に電話をハッキングできるようにする必要はなく、インストールされているものを何らかの形で管理したいと思っています。

+0

無関係 - あなたはpython標準ライブラリを削除し、安全で信頼できるサブセットを作成することができます。 – Francis

+2

ああ、愚かではない。 Pythonの標準ライブラリを削除すれば、未だ制御されていないコードをインストールすることができます。 –

+0

だから何ですか?カーネルに触れるライブラリがない場合は、どうすれば "電話をハックする"ことができますか?すべてのコードをテストして制御するには、Appleのようにデジタル署名で管理されているので、言語自体にはまだ関係しません。 – Francis

1

Jailbroken iPhoneにはPythonがインストールされている可能性があります。私は実際にPythonを非常に頻繁に使用しています。

1

私は、パフォーマンス上の懸念が理由の一部であるかもしれないが、理由のすべてではないと思う。モバイルデバイスには、非常に強力なハードウェアはありません。

私はこれについて部分的には分かりませんが、

0

メモリも重要な要素です。残念ながら、Pythonでメモリを食べるのは簡単です。

1

最も重大な問題の1つはガベージコレクションです。ガベージコレクションでは、しばしばリアルタイムパフォーマンスが必要な組み込みマシンで予測不能な一時停止が発生することがあります。

これは、低速のプログラムと引き換えに一時停止を減らす別のガベージコレクタを持つJava Micro Editionがあるためです。

(CPythonのような)ガベージコレクタもまた一時停止する傾向がありませんが、(リンクされたリストのような)多数のネストされたポインタを持つデータが削除されると爆発する可能性があります。

+0

しかし、iPhoneでは、保持カウントを使って自分の "ゴミ"を管理しています。あなたは実際にあなたのオブジェクトをリリースしなければなりません、またはあなた自身のリークを引き起こすでしょう。 – Tacoman667

+0

@Tacoman、それは参照カウントと呼ばれています。あなたは手動でやっていますが、同じものとして分類されています。 – Unknown

0

多くの理由があります。その中:そのようなソフトウェアロックイン戦略として

  • ビジネス上の理由、
  • 効率:動的言語は、通常は遅くなるように知覚される(場合によっては本当に遅い、または少なくともに制限を提供しますあなたができる最適化の量。モバイルデバイスでは、PCよりもずっと頻繁にコードを最適化する必要があります)、メモリの使用量が増加する傾向にあり、メモリが少なくてキャッシュが少ないポータブルデバイスでは大きな問題になります。
  • それは、箱から出してのPythonとRubyとJavaを言うサポートしています。
    • 、ドキュメントを書くとサポートを提供するために、仕事は三つに開発作業を分割3倍意味します。
  • 管理が必要、
  • は、これらすべての言語をサポートするデバイス上でより多くのストレージを必要とし、それがウェブ上で表示されるように役立つ材料のために時間がかかりますし、あなたのプラットフォーム上で、あなたと同じ言語を使用するより少ない開発者があります確信させる。私はいつも、Javaのメリットは非技術的な観客に簡単に説明できると感じてきました。 .NetとObj-Cも、それぞれMicrosoftとAppleのプラットフォームにとって非常に自然な選択と思われます。質問の前提に
2

反し:最初の主流のモバイル機器の一つは、アプリケーション開発のためのNewtonScriptと呼ばれる特殊動的言語を使用するように設計されたNewton、でした。ニュートンの開発環境と言語は、アプリケーションが連携して情報を共有することを特に容易にしました。これは、現在のiPhoneの経験とは正反対です。ニュートンスクリプトはRubyのように "気持ちがいい"ニュートンはいくつかのパフォーマンス上の問題を抱えていたし、Appleが後にCコードを組み込んだ後でも既存のコードの移植は容易ではなかったNewtonScriptプログラムまた、ニュートンの知的財産を保護することは非常に困難でした。他の開発者はほとんどの場合、コード内を見て、それを気まぐれに無効にすることもできます(セキュリティの悪夢)。

ニュートンは商業的な失敗でした。

Palmはアップル社のベストアイデアを数多く取り入れて改善しましたが、全体的な簡素化の一環として動的言語サポートを捨てましたが、PalmOSはモバイル市場シェアの大半を(長年にわたって)モバイルソフトウェア開発者は新しいプラットフォームに集まりました。

多くの理由があったなぜニュートンは失敗でしたが、おそらくニュートンスクリプトを非難しています。 AppleはiPhoneと「考え方が異なる」、早い段階での決定の1つは、既存のコア開発者ベースを可能な限り活用して、Objective Cで人々の開発を容易にすることです。iPhoneが公式になると動的な言語のサポートです。これは、セキュリティで保護された高性能プラットフォームを提供しながら、最善を尽くすための長期的かつ慎重な検討の後、後で追加されます。

そして5分後には、他のものが続きます。 :-)

+1

NewtonScriptは、その時点でハンドヘルドデバイスに多くのリソース(CPUとメモリ)を必要としました。パフォーマンスは完全に受け入れられました。最後に、MessagePad 2100は1000ドル近く、StrongARMは4MBのRAMを搭載していましたが、Palm Pilotは非常に安価で、1MB未満のRAMと低速の68K派生プロセッサで動作しました。 今日の主流言語のうち、NewtonScriptはJavaScriptに最も関連しています。これらはどちらもプロトタイプベースです。 Java VMの両方がホスト上で前処理ステップを実行し、比較的簡単なので、危険/ Androidプラットフォームはおそらくこの理想に最も近いでしょう。 –

+2

実際には、NewtonScriptはAppleのNewtonプロジェクトの* second *言語でした。最初のものはMacintosh Common Lispで実装されたDylan(おそらくDynamic Languageの言葉遣い)でした。そのプロジェクトは殺され、容認できないほど性能の低いものに取り替えられました。 (私はプログラマーとしてニュートンが大好きだが、ユーザーにとってはそれも遅すぎると認めなければならない。)Appleの競合他社が現在Appleの間違いを繰り返しているかどうかを知る時間があります。 –

+1

NewtonScriptの差分継承の機能の1つでは、この非常に動的なオブジェクト指向プログラミング言語(バイトコードにコンパイルすることもできます)が非常に低いメモリ要件で機能することができました。つまり、子/関連オブジェクトは、親/関連オブジェクトとは異なるデータを格納する必要があるだけです。もちろん、これを実装するための検索では、パフォーマンス上の問題が発生します。 NewtonScriptの従兄弟である[io](http://iolanguage.com/)も差分継承を実装しています。 – morgant

0

webOS - JavaScriptのWebkitランタイムに対してアプリを書くのは、PreでデビューするPalmからの新しいOSです。時間はそれがどれほど成功するかを伝えますが、私はそれがこの道を下る最初の人ではないと考えています。モバイルデバイスがより強力になると、動的言語がより一般的になります。

2

モバイルデバイスでの複数言語の状況は、問題が示唆しているよりも優れています。 Java(そのJ2MEインカネーションで)は、かなり安価な携帯電話でも最近入手可能です。 Symbian S60は正式にはPythonJavascript for widgetsをサポートしていますが、まだかなり実験的ですが、Rubyポートがあります。 Charles Nutterはgetting JRuby running on Androidで実験しています。rhomobileはRubyでアプリケーションを開発できると主張していますが、すべての主要なスマートフォンOSで動作しますが、このような移植性の主張はこれらのアプリケーションが達成できるものに制限を設けています。

モバイルOS(リソースの共有や保護などのオペレーティングシステムの機能を担う)とランタイムプラットフォーム(ユーザーが作成したアプリケーションに作業環境とAPIのセットを提供する)を区別することが重要です。 OSは、Windows自体がC++で書かれていても、WindowsでC++とJavaの両方のアプリケーションを実行する方法など、複数のランタイムをサポートすることができます。

ランタイムには、異なるパフォーマンス特性があり、OSとハードウェアの機能が多かれ少なかれ公開されます。たとえば、J2MEは多数のデバイスで使用できますが、多くのデバイスでJ2MEランタイムはカメラへのアクセスやコールを行う機能を提供しません。 「ネイティブ」ランタイム(すなわち、アプリケーションがOSと同じ言語で書かれているランタイム)は、この点で違いはありません。「ネイティブ」アプリケーションは、ランタイムが許可するものによって異なります。

0

私のPalmはあなたが合理的なGUIを行うことができますLua implementationがあり、かなり役に立たない古いのPython 1.5、(あなたがコンパイルしたアプリケーションを作成することができます)superb ForthとcopmleteのGUI devのを可能にしScheme。最近のAppleのWWDC 2009で

、シンビアン同盟は誰もがマーケティングのピッチでちょうど昼食のためにも、今後のための無料Nokia 5800のティーザーと隣接する建物の中に最初の日イベントを開催しました - US $ 350電話。このイベントは、Ovi Storeのための開発をピッチすることでした、そして、彼らには開発者がいて、午後にプログラミング競争がありました。

Symbianの開発に重点を置いていた3つの言語は、Java、Flash(lite)、Pythonでした。 Pythonはデバイスor a PCで作業できる唯一のオプションで、OpenGL ESとその他の電話機能を備えたサンプルが含まれています。

Pythonアプリケーションをストアでホストできるスタンドアロンにバンドルするユーティリティでは、S60のPythonが、(まだ)支配的なプラットフォームでの重大な動的言語の候補としてそこにあると思います。

0

OpenMoko FreerunnerのSHRというLinuxディストリビューションがあります。その設定とフレームワークのコードのほとんどは、Pythonで書かれています...まあ、それほど高速ではありません。それは耐えられますが、最初からValaで書き直す予定でした。

一方、小さなアプリケーションのほんの一部は、pythonがユーザーアプリケーションを開発するのに十分な速さで動作します(唯一の欠点は大きな起動時間です)。

Freerunnerには、ARMという400MHzと128MBのRAMが搭載されています。モバイル機器が1GHzを超えると、Pythonのような言語も中間レベルのもの(カーネルの低レベルなもの)でも十分に速くなると思います。

0

RhomobileのオープンソースRhodesフレームワークは、今日これを提供しています。すべてのスマートフォン向けの世界初のRuby実装。

関連する問題