Forth
1987年、Ron Rivest は RC4 暗号システムを RSA Data Security, Inc. のために開発した。このコードは非常に単純で、説明を読めば大抵のプログラマは書くことができる。
それぞれすべて値の異なった 256 バイトの配列がある(訳注:これが暗号ストリームの状態であり、鍵で適当に初期化する)。
この配列が使われるときはいつも、2つのバイトが交換されることによって変更される。
この交換はカウンタ i および j によって制御され、どちらも最初は 0 である。
新しい i を取得するには 1 を加算する。
新しい j を取得するには、新しい i の位置にある配列のバイトを加算する。
i と j の位置にある配列の値を交換する。
このコード(訳注:後のXORに使う値)は i と j の位置にある配列のバイトの和の位置にある配列のバイトである。
平文を暗号化したり暗号文を復号するためには、このバイトを XOR される。
配列は最初の設定によって 0 から 255 にかけて初期化される(訳注:手順の途中に書いてあるが、これは最初に行う)。
それから i と j を使う、i の位置にある配列のバイトを j に加算による新しい j とキーのバイトの取得、i と j のバイトの交換と手順は進んでいく。
最後に、i と j は 0 にセットされる。
すべての加算は 256 を法とするモジュラ演算である。
さらなる情報は、http://ciphersaber.gurus.com を参照すること。
以下の標準の Forth バージョンはコアのワードのみを使っている。
これはこのコードを検証する多くのテストのひとつである。
Forth で書かれたワードは実行可能な形式にコンパイルされる。古典的実装は、順に実行されるワードのアドレスのリストをコンパイルする。多くの現代的なシステムは実際のマシンコードを生成する(いくつかの外部ワードの呼び出しと、適当な場所に展開された他者のためのコードを含む)。最適化コンパイラをもつシステムもある。一般的な場合、Forth プログラムは実行可能形式としてロードされたとき実行されるコマンド (e.g., RUN) を含めた、Forthプログラムのコンパイル済みコードのメモリイメージとして保存されている。
開発中、プログラマは小さなコード片を開発したときに実行およびテストするためにインタプリタを使う。そのため、ほとんどの Forth プログラマは緩やかなトップダウン設計と、単体テストと統合の繰り返しによるボトムアップ開発を支持している。
トップダウン設計では、普通まずプログラムを「語彙」へのプログラムを分割し、それらを最終的に必要なプログラムを書くための、高レベルなツールセットとして利用する。よく設計された Forth プログラムは自然言語のように読むことができ、単一の目的を達成するために用いられるだけでなく、関連する問題を解くプログラムを書くのに利用することができる。
それから、Forth システムのコードはコンパイルされるが、このバージョンはバッファに格納される。このメモリ内のバッファはディスクに書きこまれ、これをテストのために一時的にメモリにロードする方法が提供される。新たなバージョンがきちんと機能するようなら、これは以前のバージョンに上書きされる。
異なる環境のためのバリエーションが多数存在する。組み込みシステム向けには、代わりに他のコンピュータのためにコードが書かれることになるが、このテクニックはクロスコンピレーションとして知られ、シリアルポートや単独の TTL ビット越しでさえ、その上オリジナルのコンパイルするコンピュータのワード名やディクショナリの他の実行されない部分も維持する。このようなForthコンパイラのための最小の定義は バイト単位のフェッチやストアをするワードと、実行される Forth ワード を命令するワードである。しばしばもっとも多くの時間のかかるリモートのポートへの書き込みの部分は、フェッチやストア、実行を実装するための初期化プログラムの構築であるが、多くの現代的なマイクロプロセッサ(Motorola CPU32など)は、このタスクを排除する統合されたデバッグ機能を持っている。