インタプリタ言語に求められる事とは
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/06/05(日) 03:13:24いいとこ取り、穴なしのインタプリタ言語の設計を目指すスレです。
0002デフォルトの名無しさん
2005/06/05(日) 03:15:24「コンパイラ・スクリプトエンジン」相談室6
http://pc8.2ch.net/test/read.cgi/tech/1115335709/
0003デフォルトの名無しさん
2005/06/05(日) 04:20:35言語仕様とは関係ないだろ
Cをインタプリタで実行したりPerlをコンパイルして実行したりだってアリだろ
0004デフォルトの名無しさん
2005/06/05(日) 09:19:410005デフォルトの名無しさん
2005/06/05(日) 09:39:410006デフォルトの名無しさん
2005/06/05(日) 09:45:03COBOLがインタプリタに向かない理由を述べたり、
考察いけばよいわけですね。
0007デフォルトの名無しさん
2005/06/05(日) 09:50:30COBOLがインタプリタに向かない理由を述べたり、
考察いけばよいわけですね。
そう言えば大学に小堀というCG担当の先生が居てな、
0008デフォルトの名無しさん
2005/06/06(月) 12:22:04実行時にプログラムを書き換えることができるとか。
0009デフォルトの名無しさん
2005/06/06(月) 16:01:56値打ちが下がってしまいますね。
0011デフォルトの名無しさん
2005/06/06(月) 22:03:15特徴があるのであって、コンパイルして、プログラムを
プログラミングの「対象」にできなくなると、面白みが
損なわれるの意味。
0012デフォルトの名無しさん
2005/06/07(火) 02:11:14コンパイルしてもソースコードは残るし、Smalltalk 程ではないけど inspect 出来るじゃん。
0013デフォルトの名無しさん
2005/06/07(火) 05:13:42得られるもの=たとえばPrologのlisting(_述語)だけが
ソースコードなんじゃないか。
さすがにここまでいうとネタっぽいね。
0014デフォルトの名無しさん
2005/06/07(火) 06:25:31下着を見て風呂を見ないようなもんだな。
0015デフォルトの名無しさん
2005/06/07(火) 08:02:49「LISP1.5が他の言語処理系と異なる最も大きな特徴は、
基本的にインタプリタで動く系であるということである。」
と述べた。この部分は書評で批判を浴びることになる。とはいえ
この言語の比較的初期段階では、識者がどうとらえていたか
知ることができるという点で興味深い。
0016デフォルトの名無しさん
2005/06/07(火) 08:11:32http://pc8.2ch.net/test/read.cgi/tech/1102664221/132
http://pc8.2ch.net/test/read.cgi/tech/1102664221/154
あたりかな。
0017デフォルトの名無しさん
2005/06/07(火) 10:10:23第一義的には解釈実行系であること。
第二に必須ではないが永続した会話系であること。
永続システムの場合には、内部環境の変化を
静的な部分に、ここではソースコードですが、
反映することに課題が出てきます。
LISPやPROLOGを挙げられたのはこの2つの言語ともに
永続会話系のシステムだからだと思います。
0018デフォルトの名無しさん
2005/06/07(火) 13:27:54で、いいのかな
0019デフォルトの名無しさん
2005/06/07(火) 15:53:390020デフォルトの名無しさん
2005/06/07(火) 17:11:200021デフォルトの名無しさん
2005/06/07(火) 17:53:410022デフォルトの名無しさん
2005/06/07(火) 18:02:07batch的な香りが強いか弱いかくらい。ただ、この差は
言語の構造からきているのでこのスレのテーマとしては
面白いと思います。
0023デフォルトの名無しさん
2005/06/07(火) 20:01:48http://www.sampou.org/scheme/sicp/mailingList/msg01467.html
定義をボカしているってだけで、発展的話題になるかどうかは知らんけど。
0024デフォルトの名無しさん
2005/06/08(水) 00:20:560025デフォルトの名無しさん
2005/06/08(水) 06:38:54プログラムの部分文字列をParseする関数があること。
0026デフォルトの名無しさん
2005/06/08(水) 07:19:040027デフォルトの名無しさん
2005/06/08(水) 07:29:11解り易いのはデバッガを書くケース。コンパイルされていたら
stepperとしては働かない。デバッガでなくてもこういう
記述は随所に現われるから、コンパイルされたコードは
使う気がしない。
0028デフォルトの名無しさん
2005/06/08(水) 23:09:230029デフォルトの名無しさん
2005/06/08(水) 23:51:22よく判らんスレだ。と感じた。
0030デフォルトの名無しさん
2005/06/09(木) 07:15:22ある副目標が現われると一旦停止する'立ち止まり'/2が19箇所。
副目標ごとに停止しながら実行する'歩み'/2が6箇所。
デバッガで使用されている部分は勘定から除いてあります。
現在使われていないものや、事実上の重複はあると思いますが。
0031デフォルトの名無しさん
2005/06/09(木) 07:42:30それこそどこにでも現われます。
デバッガ的な2述語はWebサービスで回答をした時に同時に
使われた述語と副目標を表示できるハイパーリンクがあり、その中の
オプションとして、デバッグ的な確認ができるようにしてあります。
その場合、Webですので対話形式というわけにも行かず、クライアントの
ブラウザのサポートアプリケーションとして動作します。ということは、
全環境をコピーせねばならず(16MB)、データベースの所在の問題もあり、
難題山積ということになります。
さらに、副作用(ファイルの入出力など)の伴う質問の再確認の実行は
同じ結果が得られないですし、データを破壊することがあります。
結局のところ、このオプションの付加が許されている部分はごく限られて
います。
0032デフォルトの名無しさん
2005/06/10(金) 08:59:48観点からはインタプリタ向きであることはわかった。
新しい、インタプリタ言語を設計する参考にする
ことにしよう。それはそれとして、>>1は
使い手にとって望ましいインタプリタ向きの命令とは
どんなものなのか論じたかったのだろう。
この観点に話題を切り替えよう。
0033デフォルトの名無しさん
2005/06/10(金) 19:27:51003431
2005/06/11(土) 08:02:51Prologがインタプリタ言語として特に優れている点を挙げておこう。
・ 質問と解答で実行が進む設計になっている。
・ 単一化(unification)という強力なパターンマッチング機構が利用できる。
・ 以下のようなメタ述語(命令)が充実している。
parse_atom 文字列から(実行可能な)項を切り出す。
read_term ストリームから逐次(実行可能な)項を切り出す。
functor 項を関数部分と引数に分解する。
arg 項から引数部分を取り出す。
=.. 項を関数を第一要素、引数を第二要素以下とするリストに変換する。リストから項への変換も可能。
assert 項(節)を述語として追加定義する。
retract 述語から節定義を一つ削除する。
clause 定義された述語の節を一つ取り出して、頭部と条件に分解する。
abolish 述語定義を削除する。
listing 述語の定義を出力する。
call または exception_handler 項を実行する(Lispのeval)。
0035デフォルトの名無しさん
2005/06/11(土) 08:31:50我々がインタプリタとしてすぐピンとくるのはRubyとかPerl。
ここら辺のところをもっと洗練するにはどうすればよいかを
話そうよ。
0036デフォルトの名無しさん
2005/06/11(土) 08:48:550037デフォルトの名無しさん
2005/06/11(土) 08:49:470038デフォルトの名無しさん
2005/06/11(土) 08:50:290039デフォルトの名無しさん
2005/06/11(土) 08:52:270040デフォルトの名無しさん
2005/06/11(土) 08:52:59>少々重過ぎる話題がつづいたようで。
「難しくて全然分かりませんでした」って正直に言えよwwww
0041デフォルトの名無しさん
2005/06/11(土) 09:01:30お主は正直でヨロしい
0042デフォルトの名無しさん
2005/06/11(土) 09:03:520043デフォルトの名無しさん
2005/06/11(土) 09:09:07>我々がインタプリタとしてすぐピンとくるのはRubyとかPerl。
「我々」は一人称ではないな。
0044デフォルトの名無しさん
2005/06/11(土) 09:09:430045デフォルトの名無しさん
2005/06/11(土) 09:17:430046デフォルトの名無しさん
2005/06/11(土) 09:23:25004729
2005/06/11(土) 10:02:01やっぱProlog厨のレスか(>>30-34)。
> 私の場合、文字列から項を解析、生成するparse_atom/5が923箇所。
> ある副目標が現われると一旦停止する'立ち止まり'/2が19箇所。
> 副目標ごとに停止しながら実行する'歩み'/2が6箇所。
> parse_atom/5は埋め込みタグの解析のようなところで使う
> 全環境をコピーせねばならず(16MB)、データベースの所在の問題もあり、
意味不明なスペックが散りばめられてるな。
Web上でSession管理も無しに Prologインタプリタ動かしてるの?
もしかして ThoughtWorksの向こうをはって PrologでWebアプリ作ってたりしてw
> S式のLISPや全ては項というPrologが構造的な
> 観点からはインタプリタ向きであることはわかった。
あの〜、普通その特性は「メタプログラミングがし易い」と理解する事が多いんだが。
0048デフォルトの名無しさん
2005/06/11(土) 10:34:43別にソースまで無くなってしまうわけじゃないし、
S式として必要な箇所があるならまた読み込めばいい。
どのみちeval通すと別のものになるんだから
コンパイルしない理由なんてない。
0049デフォルトの名無しさん
2005/06/11(土) 10:34:51Parse_atomの箇所が妙に多いのは、例えばPSコードを生成するなどへの
文字列処理中にPrologの負節が現われたら、一旦実行してから、コード生成を
続けるといった記述箇所が多いから。
サーバーの方はたしかにPrologWebServerだが、Prologが有利だと思うのは
ソースコードで述語定義が
集信数(_給油所名,_日付) :- .... /* 2引数とも入力 出力は標準出力 */
の時、
<H2>集信数</H2>
給油所名 <input type="text" name="給油所名">
日付 <input type="text" name="日付">
を自動生成できる。これは変数に漢字が使えないとどうにもならない。
インタプリタとは関係ないですが。
メタプログラミングについては仰るとおり。
話の行きがかり上、ああいうことを主張せざるを得なくなった。
0050デフォルトの名無しさん
2005/06/11(土) 10:45:13なかなか面白そうなテーマですね。
Prolog WebServerというのは、一般的なものなの?
それとも独自開発ですか?
0051デフォルトの名無しさん
2005/06/11(土) 11:24:23?- select * into X from 売上 where 給油所名=志村 and 日付='20050611'.
くらいの記述はできますから、後は、
atom_concat([select,*,from,売上,where,給油所名,and,日付,=,20050611],' ',S),
で生成したSをデータベースに渡せばよい。
実際には"'"の処理等そう簡単ではありません。
0052デフォルトの名無しさん
2005/06/11(土) 11:27:36=,志村が抜けてしまいましたね。
0053デフォルトの名無しさん
2005/06/11(土) 11:57:56も抜けてる
0054デフォルトの名無しさん
2005/06/11(土) 12:17:46ごめんなさい。atom_concatではなくてconcat_atomでした。
select _射影項 into _解 from _表 where _条件
:-
射影項を文字列かする(_射影項,_射影項文字列),
表を文字列する(_表,_表文字列),
条件を文字列する(_条件,_条件文字列),
concat_atom([select,_射影文字列,from,_表文字列,where,_条件文字列],
' ',_SQL文字列),
call_database(_SQL文字列,_解).
のようなプログラムになります。「条件を文字列する/2」あたりの
述語定義は相当に複雑になります。
私は現在はこのような外部データベースシステムとの交渉を
極力さけ、Prologの内部データベースのみで同様の処理を
可能とするよう整備中です。
005554
2005/06/11(土) 12:22:27文字列する -> 文字列化する
文字列かする -> 文字列化する
に訂正。
0056デフォルトの名無しさん
2005/06/13(月) 09:52:43その利用者向けの新しい言語を開発するということです。
その中で、ネイティブな言語(ここではインタプリタ言語)が
直接どのくらい利用できるかという点は結構重要なんでは
なかろうか。
0057デフォルトの名無しさん
2005/06/13(月) 15:44:000058デフォルトの名無しさん
2005/06/13(月) 21:23:120059デフォルトの名無しさん
2005/06/13(月) 23:59:25>>58 そこまで深い意味ではありません。
「帳表」や「入力画面」を見てもその情報の配置などにより言語的な
意味づけしています。窓からinputされた情報は何らかの解析がなされ
メソッドが呼ばれます。この「解析がなされ」という部分を「言語」として
見ている、ということです。したがって
>>56 はinputされた情報に於いてプログラミング言語の生の
表現をどのくらい利用できるかということをいっています。
0060デフォルトの名無しさん
2005/06/14(火) 01:03:08やっていました。このころは経営ゲーム的な色彩がつよかったのですが。
自分が信長になって、番が回ってきて「治水をする」とその後他国の戦闘を
延々と眺めていなくてはなりません。8086の時代だから、結構待たされます。
待たされているうちに、あれをやりたい、これもやりたいということになる。
予約したくなるわけです。条件付けもしたくなる。
アプリを制作するときにはまず第一に言語設計が重要と痛感したのはこの
時が最初ですね。
0061デフォルトの名無しさん
2005/06/14(火) 21:51:560062デフォルトの名無しさん
2005/06/14(火) 22:51:220063デフォルトの名無しさん
2005/06/15(水) 02:49:22いまだに私のユーザーインターフェイスはEmacs風です。LISPでは
なくてPrologですが。でもEmacs上で入力した字面を使ったりしながら
プログラムを動かすには関数型の方がいいですね。
以下に述べるようなセルレベルのインターフェイスとしても当然こういうものが
採用されるべきです。
>>62 カルクモノと馬鹿にしていたのが間違いで奥が深いですね。
ただ、私のいってることは最終的にすべてのセル入力に対して必ず最初に
juman(形態素解析プログラム)がかかるように設計すべきだというような
ことになるので少々Excelでは荷が重いのではないかと思います。
0064デフォルトの名無しさん
2005/06/15(水) 06:19:55すべてのアプリケーション上での入力はそのアプリケーションで
設定された言語クラス上のインタプリタによってなされるべきだ、という
のが私の主張です。それに対して、excel使っとけ。という切り返しは
鋭いと思います。
0065デフォルトの名無しさん
2005/06/15(水) 06:34:42どう思われますか。
0066デフォルトの名無しさん
2005/06/18(土) 17:33:35何をお答えすべきなのかさっぱりです。
Excelとオントロジー・プログラミングっつうと高輪台の某社を思い出しますが、
あなたはあそこの関係者ですか?
0067デフォルトの名無しさん
2005/06/18(土) 17:34:581970年代というと、数式処理
0068デフォルトの名無しさん
2005/06/18(土) 17:39:181970年代というと、国内では「数式処理システムReduce」のバッチ利用での高速化が重視されていて、
対話的プログラミング環境としてのLisp (例: MacLispやInterLisp)がまだまだ軽視されていた、と伺います。
例えば先に無くなられた 後藤先生のHLISPや、国内のLispマシンなどが、国内のその当時の主流だと。
すると、中西先生の言われる「インタプリタで動く言語」という言葉は、
対話的に試行錯誤的にプログラミングをする、というMIT AI Lab Hackerにとって当たり前の概念を
改めて強調したんじゃないか、と思うのですが。
0069デフォルトの名無しさん
2005/06/18(土) 22:08:56この章は今日読み返してみてもなかなか面白い。こんな部分もあります。
「LISPシステムは、S表現で書かれたプログラムを読んで二進木リストにすると
これらの機能を呼び出して解釈し、実行するようにつくられている。したがって、
プログラムが実行されていることは解釈機能が動いていることを意味するが、
その最中にプログラムからSUBR関数としてevalやevlisを呼び出すこともできる。
すなわち、プログラムを動かすためのメカニズムを、動いているそのプログラム
自身から呼び出すことができるということである。」
これらの機能とは、evalquote,apply,eval,evlisです。
0070デフォルトの名無しさん
2005/06/20(月) 10:16:17掲げておく意味はあると思います。
0071デフォルトの名無しさん
2005/06/22(水) 18:47:19インタラクティブモードを持ってる言語ってことかね。
裏でコンパイルしてようが対話機能があればインタプリタなわけだ。
■ このスレッドは過去ログ倉庫に格納されています