tinyscheme/Manual.txt 超訳

http://wataru.aoisakura.jp/tdiary/?date=20070905#p01

興味があったので僕も訳してみました。

以下気になったところを列挙してみます。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

> "Safe if used as prescribed"

  "マニュアル通りに使われる限り安全"

かな?

%%%%

> TinyScheme is a lightweight Scheme interpreter that implements as large
> a subset of R5RS as was possible without getting very large and
> complicated. It is meant to be used as an embedded scripting interpreter
> for other programs. As such, it does not offer IDEs or extensive toolkits
> although it does sport a small top-level loop, included conditionally.
> A lot of functionality in TinyScheme is included conditionally, to allow
> developers freedom in balancing features and footprint.

> TinySchemeは R5RS のサブセットとしてできるだけ手広く実装した軽量な
> Scheme インタプリタです。ただし、繁雑にならないようにはしています。軽量
> であることは、他のプログラムへの組込み用インタプリタとして使えることを
> 意味しています。(FIXME: As such, 〜 , included conditionally.までわから
> ない。) TinySchemeの中のたくさんの関数は機能の多さと処理速度のバランス
> を取りつつ、開発者の自由を守るために、制限をつけています。

  TinyScheme は軽量な Scheme インタプリタです。巨大で複雑になりすぎないよ
  うにしながら、R5RS のできるだけ大きなサブセットとして実装しています。軽
  量であることは、他のプログラムへの組込み用インタプリタとして使えること
  を意味しています。そのため、IDE や重量級のツールキットは提供されません
  が、小さなトップレベルループは条件的に含まれます。TinySCHEME の持つたく
  さんの機能は、条件的に含めることができます。これは開発者が機能の多さと
  フットプリントのバランスを自由に取れるようにするためです。

"included conditionally"というのは、例えばコンパイルオプションで有効/無効を
切り替えられるというようなことを言っているんじゃないかと思います。

あと"フットプリント"は必ずしも処理速度だけの意味じゃないんで(メモリ効率とか
実行ファイルのサイズとか色々)、フットプリントのままでいいかと。

%%%%

> 組込み用インタプリタのように、同じプログラムの動作中に共存できるよう、
> 複数のインタプリタの状態を許可するものもあります、それらは独立して動作
> します。プログラム的には、C言語の外部関数を追加することができますし、値
> をScheme環境内に定義することもできます。明らかに小さいプログラムであれ
> ば、把握し、掴み、使うことは容易です。

  組込み用インタプリタとして、同じプログラムの中で複数のインタプリタの状
  態を共存させることができ、それらはお互い独立して動作します。プログラム
  的には、C言語で書かれた外部関数を追加することができますし、 Scheme 環境
  内に値を定義することもできます。かなり小さいプログラムなので、容易に理
  解し、学習し、使用することができます。

"Being a quite small program"の部分の訳はちょっと怪しいかも。

%%%%

> 保健的マクロ(hygienic macros)

hygienic macrosの訳語としては"健全なマクロ"が一般的でしょうね。

通常のマクロと比べて変数捕捉が起こらないので健全と呼ばれています。

%%%%

> Returns a new interned symbol each time. Will probably move to the
> library when string->symbol is implemented.

  毎回 intern された新しいシンボルを返します。
  これはstring->symbolが実装されたらライブラリに移動されるでしょう。

%%%%

> 脱出コード(FIXME: 訳語確認)

"終了コード"かなあ?

%%%%

> Since rationals and complexes are absent, the respective functions are
> also missing.

  有理数と複素数が存在しないので、それぞれの関数もありません。

%%%%

> Number-theoretical quotient, remainder and modulo, gcd, lcm.

  整数論的な商、余り、モジュロ(法)、最大公約数、最小公倍数。

%%%%

>         引用符
> 普通に使えます。(...なんだかなぁ、こんなこと書くならこのサブセクション
> 自体要らなくね)

quote, quasi-quoteというのはクオート、準クオートのことで、Lispでは
重要な要素です。なのでこのサブセクションがあるんでしょうね。

特にquasi-quoteは必ずしもすべてのScheme処理系でサポートされているわけではないので、
「普通に使える」というのはそれなりに意味のある情報だと思います。

# quasi-quoteというのはこんな風に使うものです: `((+ 1 2) ,(+ 1 2)) -> ((+ 1 2) 3)

%%%%

> because there is no portable way in stdio to determine if a character
> is available.

> これは、キャラクタが利用可能な場合に、stdio内で移動可能にさせる方法があ
> るかどうか決めるために用います。

  これは、標準入出力に対してキャラクタが利用可能かどうか決定する移植可能
  な方法がないためです。

%%%%

> 'Forcing' a value that is not a promise produces the value.  There is
> no call-with-values, values, nor dynamic-wind. Dynamic-wind in the
> presence of continuations would require support from the abstract
> machine itself.

> 'Forcing'は返り値を生成することを前提としてはいません。( FIXME 動詞が無い)
> 値渡しの参照(call-with-value)、や値、また dynamic-wind もまた存在しませ
> ん(TODO: FIXME: 意味がわからない)
> 原罪の継続内の Dynamic-wind は自身の抽象器による補助を要求します(TODO:
> FIXME: 意味がわからない)。

  promise ではない値を 'force' するとその値を返します。
  call-with-values, values, dynamic-wind は存在しません。
  継続がある場合の dynamic-wind は、抽象マシン自身によるサポートを必要と
  します。(若干意味がわからない)

call-with-values, values, dynamic-wind は普通に関数の名前ですね。
最後の一文の意味はよく分かりません。なんとなく、継続とdynamic-windが同時に
使われたときの意味論的な and/or 実装上の困難さを言っているような気はしますが...。

%%%%

> Esoteric procedures (FIXME: 訳語不明)

"奥義的"だとあまりにも少年漫画チックなので"上級者向け"とか?
"達人的"でもいいかも。

%%%%

> 引数に示されたマクロ呼出しの拡張されたフォームを返します。(FIXME: よぅ
> わからんなぁ)

  引数に渡されたマクロ呼出しの展開された形式を返します。

%%%%

> (FIXME: imperative programsの適訳がわからない)

  命令型プログラム

%%%%

> The procedure "scheme_apply0" has been added with persistent scripts
> in mind. Persistent scripts are loaded once, and every time they are
> needed to produce HTTP output, appropriate data are passed through
> global definitions and function "main" is called to do the job. One
> could add easily "scheme_apply1" etc.

  "scheme_apply0" 関数は、永続的なスクリプトと共に用いられることを考慮して
  追加されました。永続的なスクリプトは1度だけロードされ、HTTP 出力を生成
  する必要があるときに毎回必要とされます。適切なデータはグローバル定義を
  通して渡され、"main" 関数が仕事をするために呼ばれます。"scheme_apply1"
  などを追加することは簡単でしょう。

%%%%

> This function should assign_foreign any foreign function contained in
> the DLL.

  この関数は DLL 内に含まれた外部関数を assign_foreign しないといけません。

こんな風に関数名を地の文で動詞として使うことはよくあります。

%%%%

> When encountering an unknown character after '#', the user-specified
> procedure *sharp-hook* (if any), is called to read the expression.
> This can be used to extend the reader to handle user-defined constants
> or whatever. It should be a procedure without arguments, reading from
> the current input port (which will be the load-port).

> '#'記号の後ろで未知の文字が現れた場合、ユーザが作成した*sharp-hock*プロ
> シージャがもしあれば、読み込み拡張の為に呼び出されます。ユーザによって
> 定義された特定のまたは全てのやり方で読み込み処理を拡張するものです。こ
> の手続きは引数はあってはいけませんし、処理が呼び出された時に入力された
> 内容から読み込まれます。

  '#'記号の後ろで未知の文字が現れた場合、ユーザが作成した*sharp-hock*プロ
  シージャがもしあれば、リーダー拡張の為に呼び出されます。これは、ユーザ
  定義の定数やその他なんでも扱えるようにリーダーを拡張するものです。この
  手続きは引数をとらず、現在の入力ポート(それは load-port になるでしょう)
  から読み込まなければなりません。

%%%%

> Qualifiers

"限定子"でしょうか。

%%%%

> Consequently, the qualifier must denote a Scheme environment, such as
> one returned by (interaction-environment).

> その結果、確定詞は、一つ一つに結果を返す(対話型環境) Scheme 環境を意味する。

  従って、限定子は何らかの Scheme 環境を表さなければなりません。例えば
  (interaction-environment) の戻り値などです。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;