("Five Questions about Language Design" http://www.paulgraham.com/langdes.html)
コンピュータ言語に関する話がわからないので、プログラミングに詳しい方に質問です。
[1] 「continuations」って何ですか? 次のような文脈で出てきます。
「それ以外でサーバ・ベースのソフトウェアで有用だとわかる可能性があるのは、驚くなかれ、continuationsだ」
「ウェブ・ベースのソフトではcontinuation-passing styleのようなものを使うことができる」
[2] [1]に関連しますが、正直、この一文はぜんぜんわかりません。お助けを。
In Web-based software you can use something like continuation-passing style to get the effect of subroutines in the inherently stateless world of a Web session.
[3] first class functionsとkeyword parameterってどう訳せばいいですか?
「どれくらい可能性があるのかわからないが、私が個人的にぜひしたいことの1つは、first class functions、再帰、keyword parameterといった、大きな特徴となる新しい抽象的な概念の発見だ」
回答はいずれか1つでOKです。よろしくお願いいたします。
[1] 「continuations」って何ですか? 次のような文脈で出てきます。
うーん、これはちょっと訳しても一般の人(C言語あたりのプログラム経験があるひとを含む)が理解できるかどうか微妙ですね。
continuationは「継続」とも訳されますがカタカナでコンティニュエーションまたは英語のままでcontinuationと使われることが多いように思います(古手のひとはまずそのまま使う。一般に普及していない概念なんでしょうね)。
http://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A
Wikipadiaにもありますけど、こう書かれると私もちんぷんかんぷん(笑)。サブルーチンだとあるプログラムの流れのごく一部しか保存しませんが、コンティニュエーションを使った場合は全部を保存するという違いがあります。コンティニュエーションを使う一番わかりやすい例はコルーチンです。
http://madeira.cc.hokudai.ac.jp/RD/yamamoto/Essay/11.html
実際によく使われる例は
http://d.hatena.ne.jp/kohtani/20061227/p1
複数のスレッドがあって片方を止めて(状態を保存したまま)他のスレッドの処理に移り、処理が終わったら元に戻るような場合です。
プログラミング言語でいうとCだとsetjmp()/longjmp()が(一応)continuationの例と言えますし、コンティニュエーションが明示的な売り物になっている言語としてはLispの一種(といっていいのかな)であるSchemeなどがあります。
なのでここはそういうことを踏まえて英語のままで書くことをお勧めします。
[2] [1]に関連しますが、正直、この一文はぜんぜんわかりません。お助けを。
In Web-based software you can use something like continuation-passing style to get the effect of subroutines in the inherently stateless world of a Web session.
「Webベースのソフトウェアではcontinuation-passingのような形式を使うことで本来的にステートレスな世界であるWebセッションにサブルーチンと同じ効果を得ることができる。」
Webセッションはクッキーや大域変数でも使わない限り1回1回アクセスするたびに前の状態が保存されないため、内部的な状態の変化を意識しないと書けないアプリケーションロジックを作るのが大変だったのですが、continuationを使うことで楽になるよ ということでしょう。
https://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/info/Abo...
みたいなコンティニュエーションが可能なフレームワークがいくつかあるようです。
[3] first class functionsとkeyword parameterってどう訳せばいいですか?
「どれくらい可能性があるのかわからないが、私が個人的にぜひしたいことの1つは、first class functions、再帰、keyword parameterといった、大きな特徴となる新しい抽象的な概念の発見だ」
first class functions
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/...
http://sky.zero.ad.jp/~zaa54437/programming/concepts/index3.htm
関数型言語などで扱われる用語で訳はそのままfirst class functionsでも第一級関数でもよさげ。
keyword parameter
http://math-sci.hp.infoseek.co.jp/DylanInfo/Functions/ParameterL...
これの真ん中あたりにありますが、普通プログラミング言語で関数に値を渡すときは順番が固定されますが、キーワードパラメータの場合は(Dylanの場合)キーワード:値 という形で渡すことが可能になります。Dylanの場合はキーワードを指定しない場合は関数宣言側でのデフォルト値が使われます。
訳はキーワードパラメータ、でしょうね。
そういえば「各言語が解決するもの」に出てきた言語名がいろいろ…そういえばあれにはHaskellがいなかったような…
[1]continuation-passing styleは「継続渡しスタイル」といって再帰の手法の一つです。
SALINGER様、ありがとうございます!!
[1] 「continuations」って何ですか? 次のような文脈で出てきます。
うーん、これはちょっと訳しても一般の人(C言語あたりのプログラム経験があるひとを含む)が理解できるかどうか微妙ですね。
continuationは「継続」とも訳されますがカタカナでコンティニュエーションまたは英語のままでcontinuationと使われることが多いように思います(古手のひとはまずそのまま使う。一般に普及していない概念なんでしょうね)。
http://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A
Wikipadiaにもありますけど、こう書かれると私もちんぷんかんぷん(笑)。サブルーチンだとあるプログラムの流れのごく一部しか保存しませんが、コンティニュエーションを使った場合は全部を保存するという違いがあります。コンティニュエーションを使う一番わかりやすい例はコルーチンです。
http://madeira.cc.hokudai.ac.jp/RD/yamamoto/Essay/11.html
実際によく使われる例は
http://d.hatena.ne.jp/kohtani/20061227/p1
複数のスレッドがあって片方を止めて(状態を保存したまま)他のスレッドの処理に移り、処理が終わったら元に戻るような場合です。
プログラミング言語でいうとCだとsetjmp()/longjmp()が(一応)continuationの例と言えますし、コンティニュエーションが明示的な売り物になっている言語としてはLispの一種(といっていいのかな)であるSchemeなどがあります。
なのでここはそういうことを踏まえて英語のままで書くことをお勧めします。
[2] [1]に関連しますが、正直、この一文はぜんぜんわかりません。お助けを。
In Web-based software you can use something like continuation-passing style to get the effect of subroutines in the inherently stateless world of a Web session.
「Webベースのソフトウェアではcontinuation-passingのような形式を使うことで本来的にステートレスな世界であるWebセッションにサブルーチンと同じ効果を得ることができる。」
Webセッションはクッキーや大域変数でも使わない限り1回1回アクセスするたびに前の状態が保存されないため、内部的な状態の変化を意識しないと書けないアプリケーションロジックを作るのが大変だったのですが、continuationを使うことで楽になるよ ということでしょう。
https://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/info/Abo...
みたいなコンティニュエーションが可能なフレームワークがいくつかあるようです。
[3] first class functionsとkeyword parameterってどう訳せばいいですか?
「どれくらい可能性があるのかわからないが、私が個人的にぜひしたいことの1つは、first class functions、再帰、keyword parameterといった、大きな特徴となる新しい抽象的な概念の発見だ」
first class functions
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/...
http://sky.zero.ad.jp/~zaa54437/programming/concepts/index3.htm
関数型言語などで扱われる用語で訳はそのままfirst class functionsでも第一級関数でもよさげ。
keyword parameter
http://math-sci.hp.infoseek.co.jp/DylanInfo/Functions/ParameterL...
これの真ん中あたりにありますが、普通プログラミング言語で関数に値を渡すときは順番が固定されますが、キーワードパラメータの場合は(Dylanの場合)キーワード:値 という形で渡すことが可能になります。Dylanの場合はキーワードを指定しない場合は関数宣言側でのデフォルト値が使われます。
訳はキーワードパラメータ、でしょうね。
そういえば「各言語が解決するもの」に出てきた言語名がいろいろ…そういえばあれにはHaskellがいなかったような…
Kumappus様、いつもありがとうございます。とても丁寧な解説にもかかわらず、いまだにcontinuationがわかりませんでした(泣)
やっぱポインタと構造体で挫折した人が翻訳しちゃいけませんよねえ?
さてさて、グレアムのページに "Learning from Founders"が載り、Yasushi Aokiさんによる翻訳がすでに出ているようです。
「創業者に学ぶ」by Yasushi Aoki
http://www.aoky.net/articles/paul_graham/foundersatwork.htm
また同じくYasushi Aokiさんの訳として、
"How to Start a Startup"
http://www.paulgraham.com/start.html
を翻訳した「スタートアップの始め方」
http://www.aoky.net/articles/paul_graham/start.htm
がありました。超うれしいです。
Kumappus様、いつもありがとうございます。とても丁寧な解説にもかかわらず、いまだにcontinuationがわかりませんでした(泣)
やっぱポインタと構造体で挫折した人が翻訳しちゃいけませんよねえ?
さてさて、グレアムのページに "Learning from Founders"が載り、Yasushi Aokiさんによる翻訳がすでに出ているようです。
「創業者に学ぶ」by Yasushi Aoki
http://www.aoky.net/articles/paul_graham/foundersatwork.htm
また同じくYasushi Aokiさんの訳として、
"How to Start a Startup"
http://www.paulgraham.com/start.html
を翻訳した「スタートアップの始め方」
http://www.aoky.net/articles/paul_graham/start.htm
がありました。超うれしいです。