@node Introduction, Concepts, Top, Top
@chapter Introduction
@c NODE はじめに

@c EN
This is a users' guide and reference manual of
the Gauche Scheme system.
Here I tried to describe the implementation precisely,
sometimes referring to background design choices.
@c JP
本書はGauche Scheme systemに関する、ユーザのためのガイドと
リファレンスです。なるべくGaucheの実装を正確に記述することを
目的として、時には背景となる設計上の選択も含めて説明しています。
@c COMMON

@c EN
The target readers are those who already know Scheme and
want to write useful programs in Gauche.
For those who are new to Scheme, it'll be easier to start
from some kind of tutorial.  I'm planning to write one.
@c JP
したがって、既にSchemeを知っていてGaucheの全機能を活用して
プログラムを書きたいという読者を対象にしています。
Schemeに触れるのが初めての読者は、何らかのチュートリアルを併用すると
良いでしょう。私もいずれチュートリアルめいたものを書くつもりです。
@c COMMON

@c EN
This manual only deals with Scheme side of things.  Gauche has
another face, a C interface.   Details of it will be discussed
in a separate document to be written.
Those who want to use Gauche as an embedded language, or want
to write an extension, need that volume.
@c JP
このマニュアルでは、GaucheのScheme言語としての面のみを扱います。
GaucheはC言語から呼べる汎用リスト処理ライブラリとしての側面も持っていますが、
それは別ドキュメントで解説する予定です。Gaucheを組み込み言語として使いたい、
もしくはGaucheをC言語で拡張したいという読者はそのドキュメントが必要となります。
@c COMMON

@c EN
For the Scheme side, I tried to make this manual self-contained
for the reader's convenience, i.e. as far as you want to look up
Gauche's features you don't need to refer to other documents.
For example, description of functions defined in the standard
documents are included in this manual, instead of saying
``see the standard document''.   However, this document is not a verbatim
copy of the standard documents; sometimes I omit detailed
discussions for brevity.
I put pointers to the original documents, so please consult them if you
need to refer to the standards.
@c JP
Scheme言語としての側面に関しては、なるべくこのマニュアル一冊でリファレンスとしての
用が足りるように記述しました。標準に定められている関数でも、こちらのマニュアルだけで
使うのに必要な事項を知ることができます。但し、このマニュアルは標準文書の替わりには
なりません。記述を短くするために理論的な背景などは省略してあります。
オリジナルのドキュメントへのポインタを参考文献の項に上げておきましたので、
必要に応じて参照して下さい。
@c COMMON

@c EN
If you're reading this document off-line, you may find the most
recent version on the web:
@c JP
もしあなたがこのマニュアルをオフラインで読んでいるなら、
時々下記のURLをチェックしてみて下さい。更新があるかもしれません。
@c COMMON
@example
@uref{http://practical-scheme.net/gauche/}.
@end example

@c JP
なお、本マニュアルの日本語版製作には、
佐藤 誠 氏、山下 伸夫 氏の協力を頂きました。
@c COMMON

@menu
* Overview of Gauche::          
* Notations::                   
@end menu

@node Overview of Gauche, Notations, Introduction, Introduction
@section Overview of Gauche
@c NODE  Gaucheの概要

@c EN
Gauche is a Scheme script engine; it reads Scheme programs,
compiles it on-the-fly and executes it on a virtual machine.
Gauche conforms the language standard
"Revised^5 Report on the Algorithmic Language Scheme"
(@ref{r5rs,[R5RS],R5RS}),
and supports various common libraries defined in SRFIs
(@uref{http://srfi.schemers.org}).
@c JP
GaucheはScheme言語のスクリプトエンジンです。
Schemeプログラムを読み込み、直ちにコンパイルして仮想マシンで実行します。
Scheme言語の標準である、"Revised^5 Report on the Algorithmic Language Scheme"
(@ref{r5rs,[R5RS],R5RS})に準拠しています。また、SRFI
(@uref{http://srfi.schemers.org}) に規定されている数多くのライブラリを
サポートしています。
@c COMMON

@c EN
The goal of Gauche is to provide a handy tool for
programmers and system administrators to handle
daily works conveniently and efficiently in the production environment.
@c JP
Gaucheは、プログラマやシステム管理者がこなす日常の雑事を
効率よくSchemeで書けるようにすることを目的として設計されています。
@c COMMON

@c EN
There are lots of Scheme implementations available, and each
of them has its design emphasis and weaknesses.  Gauche is
designed with emphasis on the following criteria.
@c JP
世の中には多くのSchemeの実装がありますが、
それぞれの実装には長所と短所があります。
Gaucheが長所とするべく重点を置いているのは次のようなポイントです。
@c COMMON

@table @b
@c EN
@item Quick startup
@c JP
@item 立ち上りが速いこと
@c COMMON
@c EN
One of the situation Gauche is aiming at is in the production
environment, where you write ten-lines throw-away script that
may invoked very frequently.  This includes CGI scripts as well.
Gauche provides frequently used common features as a part of rich built-in 
functions or precompiled Scheme libraries that can be loaded very quickly.
@c JP
Gaucheが想定している用途のひとつは、プロダクション環境でちょろっと
10行スクリプトをでっちあげて、それが非常に頻繁に呼ばれるようなケースです。
CGIスクリプトなどもそうです。
Gaucheは頻繁に使われる共通の機能については、豊富な組み込み関数として、
あるいはプリコンパイルされ素早くロードできるSchemeライブラリとして提供しています。
@c COMMON

@c EN
@item Multibyte strings
@c JP
@item マルチバイト文字列
@c COMMON
@c EN
We can no longer live happily in ASCII-only or 1-byte-per-character world.
The practical language implementations are required to handle
multibyte (wide) characters.
Gauche supports multibyte strings natively, providing robust and
consistent support than @i{ad hoc} library-level implementation.
@xref{Multibyte Strings}, for details.
@c JP
文字列が1バイトキャラクタのみを扱っていれば良かった時代は過ぎ去りました。
現代のプログラミングシステムは、様々なエンコーディングによるマルチバイト文字／文字列を
自然に扱える必要があります。
Gaucheは内部的に文字列を全て、コンパイル時に選択したエンコーディングの
マルチバイト文字列として扱います。後から付け足したライブラリレベルでの
マルチバイト文字列のサポートよりも、一貫性がありロバストな文字列操作が可能になっています。
詳しくは@ref{Multibyte Strings}を参照してください。
@c COMMON

@c EN
@item Modular development
@c JP
@item モジュラー開発
@c COMMON
@c EN
Gauche has a simple module system to separate namespaces,
which allows the developers to work in parallel without
worrying name collision.  
@c JP
Gaucheは名前空間を分離する単純なモジュールシステムを備えており、
名前の衝突を心配せずに複数の開発者が並行して作業をすることができます。
@c COMMON

@c EN
@item Integrated object system
@c JP
@item 統合されたオブジェクトシステム
@c COMMON
@c EN
A powerful CLOS-like object system with MetaObject protocol
(mostly compatible with STklos and Guile) is provided.
@c JP
CLOSライクなメタオブジェクトプロトコルを備えた強力なオブジェクトシステム
が組み込んであります。STklosやGuileのオブジェクトシステムとかなり互換性があります。
@c COMMON

@c EN
@item System interface
@c JP
@item システムインタフェース
@c COMMON
@c EN
Although Scheme abstracts lots of details of the machine,
sometimes you have to bypass these high-level layers and
go down to the basement to make things work.
Gauche has built-in support of most of POSIX.1 system calls.
Other modules, such as networking module, usually provide
both high-level abstract interface and low-level interface
close to system calls.
@c JP
Schemeは計算機の詳細の多くを抽象化しますが、プログラムを書いていると、
それらの高レベル層をバイパスして地下室に降りて作業しなければならないような時が
あります。GaucheはPOSIX.1システムコールのほとんどを組み込みでサポートします。
また、ネットワーキングモジュールなど他のシステム関連モジュールは通常、
高レベルの抽象的なインタフェースと低レベルのシステムコールに近いインタフェースを
両方提供します。
@c COMMON

@c EN
@item Enhanced I/O
@c JP
@item 強化された入出力
@c COMMON
@c EN
No real application can be written without dealing with I/O.
Scheme neatly abstracts I/O as a port, but defines least operations on it.
Gauche uses a port object as a unified abstraction, providing
utility functions to operate on the underlying I/O system.
@xref{Input and output}, for the basic I/O support.
@c JP
本物のアプリケーションはI/O無しでは成り立ちません。
SchemeはI/Oをポートとして簡潔に抽象化していますが、
標準のSchemeには最低限の操作しか定義されていません。
Gaucheはポートオブジェクトを入出力のための統合された抽象化オブジェクトと考え、
それを通して下位のI/Oシステム層にアクセスするユーティリティ関数を提供しています。
@ref{Input and output}を参照して下さい。
@c COMMON
@end table

@c EN
On the other hand, Gauche is @emph{not} designed for 
applications such like high-performance number cruncher or
very large scale database handling. 

You can still use Gauche as a "glue" language for such applications,
however.  For example, you can write a performance-critical part 
in another language that compiles to native code, and use Gauche to set up.
@c JP
一方、Gaucheは所詮インタプリタですから、高速に大量の計算をこなしたり
巨大なデータセットを扱ったりするのは苦手です。

但し、そのような場合でも、Gaucheを各コンポーネントをつなぐ「糊」言語として
使うことは可能です。例えば性能の要求の厳しい部分はネイティブコードにコンパイルする言語で
書いておき、セットアップにGaucheを使うといった方法があります。
@c COMMON


@node Notations,  , Overview of Gauche, Introduction
@section Notations
@c NODE 表記について

@c EN
In this manual, each entry is represented like this:

@deftp {Category} foo arg1 arg2
[spec] Description of foo @dots{}
@end deftp
@c JP
このマニュアルでは、各項目は次のようなフォーマットで表記されています。

@deftp {カテゴリ} foo arg1 arg2
[spec] fooの説明
@end deftp
@c COMMON

@c EN
@var{Category} denotes the category of the entry @b{foo}.
The following categories will appear in this manual:
@c JP
@var{カテゴリ} は項目@b{foo}の種別を示します。
次のようなカテゴリがあります。
@c COMMON

@multitable @columnfractions .4 .6
@item Function
@c EN
@tab A Scheme function.
@c JP
@tab Scheme手続き
@c COMMON
@item Special Form
@c EN
@tab A special form (in the R5RS term, ``syntax'').
@c JP
@tab 特殊形式 (R5RSでは「構文」)
@c COMMON
@item Macro
@c EN
@tab A macro.
@c JP
@tab マクロ
@c COMMON
@item Module
@c EN
@tab A module
@c JP
@tab モジュール
@c COMMON
@item Class
@c EN
@tab A class.
@c JP
@tab クラス
@c COMMON
@item Generic Function
@c EN
@tab A generic function
@c JP
@tab ジェネリックファンクション
@c COMMON
@item Method
@c EN
@tab A method
@c JP
@tab メソッド
@c COMMON
@item Reader Syntax
@c EN
@tab A lexical syntax that is interpreted by the reader.
@c JP
@tab リーダによって解釈される構文要素
@c COMMON
@end multitable

@c EN
For functions, special forms and macros, the entry may be followed
by one or more arguments.  In the argument list, the following notations
may appear:
@c JP
手続き、特殊形式、マクロに関しては、エントリの後に引数の仕様が示されます。
引数リストの中には次のような表記が現れることがあります。
@c COMMON

@table @var
@item arg @dots{}
@c EN
Indicates zero or more arguments.
@c JP
ゼロ個以上の可変個の引数。
@c COMMON
@item :optional x y z
@itemx :optional (x x-default) (y y-default) z
@c EN
Indicates it may take up to three optional arguments.
The second form specifies default values to @var{x} and @var{y}.
This is Gauche's enhancement to Scheme; see @ref{Making Procedures}
for the definition of complete argument list syntax.
@c JP
省略可能な引数の表記。この例では3つまでの省略可能な引数が取られることを示します。
2番目の形式では@var{x}と@var{y}について省略された場合の既定値も示しています。
この形式の引数表記は、Schemeに対するGaucheの独自拡張です。
完全な仕様については@ref{Making Procedures}を参照してください。
@c COMMON
@item :key x y z
@itemx :key (x x-default) (y y-default) z
@c EN
Indicates it may take keyword arguments @var{x}, @var{y} and @var{z.}
The second form shows the default values for @var{x} and @var{y}.
This is also Gauche's enhancement to Scheme; see @ref{Making Procedures}
for the definition of complete argument list syntax.
@c JP
キーワード引数の表記。この例では@var{x}、@var{y}、@var{z}の3つのキーワード引数を
取ることが示されます。2番目の形式では@var{x}と@var{y}について省略された場合の
既定値も示しています。
この形式の引数表記も、Schemeに対するGaucheの独自拡張です。
完全な仕様については@ref{Making Procedures}を参照してください。
@c COMMON
@item :rest args
@c EN
Indicates it may take rest arguments.
This is also Gauche's enhancement to Scheme; see @ref{Making Procedures}
for the definition of complete argument list syntax.
@c JP
残りの引数全てがリストになって@var{args}に束縛されることを示します。
この形式の引数表記も、Schemeに対するGaucheの独自拡張です。
完全な仕様については@ref{Making Procedures}を参照してください。
@c COMMON
@end table

@c EN
The description of the entry follows the entry line.
If the specification of the entry comes from some standard or
implementation, its origin is noted in the bracket at the beginning
of the description.  The following origins are noted:
@c JP
説明が項目の行に続きます。もし項目が特定の標準に準拠している場合は、
もととなった標準が次のような形式で示されます。
@c COMMON

@table @asis
@item [R5RS]
@itemx [R5RS+]
@c EN
The entry works as specified in ``Revised^5 Report of Algorithmic Language
Scheme.''.  If it is marked as "[R5RS+]", the entry has additional
functionality.
@c JP
この項目はR5RSに定義されるように動作します。"[R5RS+]"とマークされている場合は
R5RSの仕様に上位互換な形で追加の機能が実装されていることを示します。
@c COMMON
@item [SRFI-@var{n}]
@itemx [SRFI-@var{n}+]
@c EN
The entry works as specified in SRFI-@var{n}.  If it is marked as
"[SRFI-@var{n}+]", the entry has additional functionality.
@c JP
この項目はSRFI-@var{n}に定義されるように動作します。"[SRFI-@var{n}+]"とマークされている場合は
SRFI-@var{n}の仕様に上位互換な形で追加の機能が実装されていることを示します。
@c COMMON
@item [POSIX]
@c EN
The API of the entry reflects the API specified in POSIX.
@c JP
この項目はPOSIXのAPIを反映していることを示します。
@c COMMON
@end table

@c @node Structure of this document,  , Notations, Introduction
@c @section Structure of this document
@c @c NODE 本書の構成

@c @c EN
@c @c JP
@c @c COMMON

@c Local variables:
@c mode: texinfo
@c coding: utf-8
@c end:
