web-dev-qa-db-ja.com

小さなメモリで実行できるインタラクティブ言語は何ですか?

私はそのような汎用プログラミング言語を探しています

  • 対話型(ライブコーディング)のプロンプトがある
  • RAMそれ自体で32KBで、またはコンパイラが別のマシンでホストされている場合は8KBで動作します
  • マイクロコントローラーで実行する場合、8〜32 KBの最小値RAM合計(MMUなし))。

以下はこれまでの私のリストですが、何が欠けていますか?

  • PythonPyMite VM には64Kフラッシュ、8K RAMが必要です。 8K以上のLPC、SAM7、ATmegaをターゲットにします。ホステッド。
  • LuaeLua FAQは256Kフラッシュ、64K RAMを推奨します。
  • [〜#〜] forth [〜#〜]amforth は、8Kフラッシュ、150バイトRAM、30バイトEEPROMをオンにする必要がありますATmega。
  • スキーム脇の下のスキーム 32Kフラッシュ、4K SRAMを搭載したLPC2103が最小のターゲットです。
  • [〜#〜] c [〜#〜]Interactive C はフラッシュなしで32K SRAMを使用して68HC11で実行されます。ホステッド。
  • [〜#〜] c [〜#〜]picoc オープンソース、クロスコンパイル、インタラクティブなCシステム。 AVR用にコンパイルすると、63Kフラッシュ、8K RAMが必要になります。 RAMは、テーブルをフラッシュに保持するための努力で削減できます。
  • C++AngelScript オープンソースのバイトコードベースのC/C++のようなスクリプト言語で、ネイティブコールが簡単です。
  • TclTinyTCL DOS、60Kバイナリで実行されます。移植が簡単に見えます。
  • [〜#〜] basic [〜#〜]TinyBasic :64Kヒープで初期化します。調整可能かもしれません。
  • [〜#〜] lisp [〜#〜]
  • PostScript:(メモリ不足のFOSS実装がまだ見つかりません)
  • Shellbitlash :Arduino(ATmega)用の対話型コマンドシェル。 [〜#〜] avrsh [〜#〜] も参照してください。
72
dwhall

自作のForthランタイムは、ごくわずかなメモリに実装できます。 1970年代にコスマックで作った人を知っています。コアランタイムはちょうど30 bytes。でした。

CHIP-8、XPL0、PicoC、およびObjective Camlがグラフ計算機に移植されたと聞いています。ウィキペディアの「レゴマインドストーム」の記事には、レゴRCXまたはレゴNXTプラットフォームで実行されているとされる一連のプログラミング言語がリストされています。 「ライブコーディング」の基準を満たしているものはありますか?

Forth wikiで他のマイクロコントローラーForthsを調べてみてください。これは、Atmel AVRの少なくとも4つのForthをリストします:amforth(すでに述べました)、PFAVR、avrforth、およびByteForth。
(これらのインタープリターへのリンクとこのStackOverflowの質問は、「 Embedded Systems "ウィキブック)に含まれています。

7
David Cary

LUA(またはeLUA http://www.eluaproject.net/ )をお勧めします。しばらく前に、LUAをCortex-M3に「移植」しました。私の頭の上から、それは60〜100KBのフラッシュサイズを持ち、約20KBを必要としましたRAM実行するために必要なものです。私は必要最低限​​のものまで取り除きましたが、アプリケーションによっては、特にRAM=要件について)最適化の余地はまだありますが、8KBで快適に実行できるとは思えません。

5
Ron

Wren は基準に適合します-デフォルトでは、4kのRAMのみを使用するように設定されています。私が書いた人は結局、ターゲットシステム上で完全に実行しているインタープリターを必要としないと判断したため、実際の使用は確認されていません。

言語は、MLとForthの影響を最も強く受けています。

4
Darius Bacon
4
avra

AVR用の非常に強力なAvrCo Multitasking Pascalをご覧ください。 http://www.e-lab.de で試すことができます。 MEGA8/88版は無料です。すべての標準デバイス(LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、KEYBOARD、RC5、SERVO、STEPPER ...)のJTAGデバッガーとニースライブまたはシミュレートされた視覚化を備えた大量のドライバーとシミュレーターがあります。

2
avra

Tiny BasicCのポート を検討しましたか?または、おそらく CSD Pascal p-machineをZ-80からご使用のアーキテクチャに書き換えますか?

真剣に、しかし、JavaScriptは優れた埋め込みスクリプト言語になりますが、VM + GCの最小メモリ要件は何なのか、OSの依存関係を削除するのがどれほど難しいのか、私にはわかりません。私はプレイしました。 [〜#〜] njs [〜#〜] しばらくすると、ニーズに合う可能性があります。これは、コンパイラがJavaScript(セルフホスティング)で記述されているという点で興味深いものです。

2
James Hugard

Espruino 経由のJavaScriptもあります。

これは特にマイクロコントローラー向けに構築されており、システム全体をわずか8kBのRAMに収めるさまざまな異なるチップ(主にSTM32)向けのビルドがあります。

1
Gordon Williams

EmbedVM、ホームページ here 、svn repo here がありません。フロントページの両方の[ 12 ]ビデオをチェックすることを忘れないでください;)

ホームページから:

EmbedVMは、Cのような言語のフロントエンドを備えたマイクロコントローラー用の小さな組み込み可能な仮想マシンです。 GCCおよびAVRマイクロコントローラーでテストされています。ただし、仮想マシンはかなりシンプルなので、他のアーキテクチャに簡単に移植できます。

VMは、最大64kBのメモリにアクセスできる16ビットCPUをシミュレートします。これは、16ビット値と、16ビットおよび8ビット値の配列でのみ動作します。複雑なデータ構造(構造体、オブジェクトなど)はサポートされていません。関数は、最大32個のローカル変数と32個の引数を持つことができます。

VMのメモリに加えて、VM状態を保持する小さな構造と、EmbedVM関数がスタックに必要とする適切なメモリ量は、VMに追加のメモリ要件はありません。特にVMは、動的メモリ管理に依存しません。

EmbedVMは、実行速度ではなく、サイズとシンプルさのために最適化されています。 VM自体は、AVRマイクロコントローラーで約3kBのプログラムメモリを占有します。 16MHzで動作するAVR ATmega168では、VMはミリ秒あたり約75のVM命令を実行できます。

VMによるすべてのメモリアクセスは、ユーザーコールバック関数を使用して実行されます。そのため、外部メモリデバイス、フラッシュメモリなどのVMメモリの一部またはすべて、またはVMへの「メモリマップ」ハードウェア機能を持つことが可能です。

コンパイラは、*。evmファイルを読み込んでさまざまな形式(バイナリファイル、インテル16進数、C配列初期化子、特別なデバッグ出力形式)でバイトコードを生成するUNIX/Linuxコマンドラインツールです。また、ホストアプリケーションからVMメモリ内のデータにアクセスするために使用できるシンボルファイルを生成します。

Cのような言語は次のようになります。 http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm

1
Morten Jensen

私は MY-BASIC をお勧めします。最低8 KBのRAMで動作し、移植が簡単です。

1
paladin_t

プロローグ- http://www.gprolog.org/

グーグル検索「プロローグ小」によると、実行可能ファイルのサイズは、組み込み述語のリンクを回避することにより、かなり小さくすることができます。

0
Larry Watanabe

私はpythonを使用することをお勧めします。しかし今、唯一の問題はメモリのオーバーヘッドです。だから、後でこの問題に悩まされているかもしれない人たちに素晴らしいアイデアを持っています。

まず最初に、bfインタープリターを作成します(またはどこかからソースコードを取得します)。通訳は本当に小さいでしょう。また、bfはチューリング完全言語です。ここで、コードをpythonで記述し、bfpy( https://github.com/felko/bfpy/blob/master/README.mdを使用してbfにトランスパイラーします。 )。オーバーヘッドを最小限に抑えてソリューションを提供しました。bfインタープリターが10KB以下のRAM使用量に簡単に留まると確信しています。

0
Thomas

質問または回答のリストにある言語はどれも、非常に簡単なコンパイルと既存のマイクロコントローラープロジェクトへの統合の要件を満足できるものではありませんでした(開示:実際にすべての提案を試したわけではありません)。

私は代わりに見つけました tinyscript これは、プロジェクトの残りのソースファイルでコンパイルされた単一の_.c_ + _.h_ファイルで、void outchar(int c)スクリプトからの出力を必要としない場合は空にすることができます。

私の場合、主にいくつかのC関数を順番に呼び出すだけなので、実行速度は、ビルドや統合、Cとの相互運用の容易さほど重要ではありません。

0
Daniel Landau

単に/bin/shbusybox によって提供されますか?または 小さいスクリプト言語 の推奨ですか?

0
dmckee

私は以前の仕事でBlackFinのbusyboxを使用しています。

私たちはPerl + phpをコンパイルしましたが、s/fork/vfork/gを変更した後はかなりうまくいきました...多かれ少なかれ。 MMU=を持たないのは良い考えではありません。メモリの断片化はサーバーをかなり簡単に殺します。私がしたことはすべて:

for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done

私が上司に近づいていて、サーバーが本番で死ぬだろうと彼に言っている間にそれは死にました:)

0
elcuco