トップページ⇒tech
518コメント145KB

新しいスクリプト言語を設計する!

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆opMJSavJhM NGNG
これからは、スクリプト言語の時代だそうですが、案外使い勝手の良い平凡な
言語が少ないような気がします。例えば。。。

PERL - 大変メジャーで、実績も十分!
しかし、記号&暗号のようなスクリプト言語と感じるのは私だけでは無いはず
です。昔やった、sendmailの設定ファイルを何故か思い出します。

RUBY - 最近(?)人気急上昇のメジャー言語!ネーミングも良い!
しかし、(善し悪しは別として)オブジェクト指向言語であるが故に、私の様
にいまだに抵抗を感じる方もきっと多いはず。

そこで、オブジェクト指向でない分かりやすいスクリプト言語を設計してみた
いと思うようになりました。

いろいろと、アドバイスなりアイデアなりを頂けると嬉しいです。
0412デフォルトの名無しさんNGNG
>>411
それならWSHと言う良いスクリプト言語環境がある。
0413デフォルトの名無しさんNGNG
>>411
はぁ ?
VB6 は、DWORD, PDWORD, PINT32, PCHAR, 関数ポインタ なんて型無いけど、WindowsAPI 呼べますが。
まあ、使いにくいというのは確かだが。
0414デフォルトの名無しさんNGNG
まあ
DWORD は INT32でもいいと言えばいいか
参照渡しが出来れば多少広い範囲が呼べるね
構造体型で渡す場合に多少不便程度だけど、そういうのは大抵COMサポートのもっと便利なの用意されてるしね。
0415デフォルトの名無しさんNGNG
C言語でpushとかCALLとかってできますでしょうか?
0416デフォルトの名無しさんNGNG
アホだなあ・・
0417デフォルトの名無しさんNGNG
もちろんできます。
0418デフォルトの名無しさんNGNG
>>413
ものすごい分厚さのオブラート(ラップ)を通じてな。
0419デフォルトの名無しさんNGNG
>>417
どうやって???
0420デフォルトの名無しさんNGNG
>>419
_asm{}
0421デフォルトの名無しさんNGNG
スレ違いです
0422デフォルトの名無しさんNGNG
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0  
         
0423デフォルトの名無しさんNGNG
今作ろうとしているスクリプト言語。
画像処理ソフトの組み込み用だけど、このソフトを作る目的自体が
画像処理ソフトというより簡易スクリプトの実験だったりして。

とりあえず、第一段階として

型はバッファ、整数、bool程度
構文はfor-next/do-while/if/(組み込み)関数呼び出し
変数や関数の評価・代入のみで加減乗除などの演算はなし(というか、
演算関数の評価で代用)

といった簡単な処理系から作ってみるつもり。

変数の管理や関数呼び出しはやったことがあるから、この段階で
難しそうなのは制御構文か。
0424名無し@沢村NGNG
おまいらよ、おれがいま研究している2方向量子ウォーク1カウンタオートマトンのアルゴリズムはだな、
出発点 (0,0,…,0), 吸収点 (1,1,…,1) の
n次元超立方体上の対称量子ウォークの
吸収時間は Tr Xn - 1 で与えられるんだよ。
ここで Xnは方程式の解となるんだよ。わかるか?
おれはいまそういう簡単な研究に取り組んでいるんだよ!!!
0425デフォルトの名無しさんNGNG
>>423
関数呼出しって、どうやって実現しましたか?
例えば、sin()/log()/exp()/... ってあったとして、

if(script=="sin"){ ...}
if(script=="log"){ ... }
if(script=="exp"){ ... }

見たいな感じに1文づつ処理していったのでしょうか?

OS組み込みor標準関数なら、なんかうまくやって
一発で書き表すことができんでしょうかね?
0426デフォルトの名無しさんNGNG
>>425
{ "sin" , func_sin , 1},
{ "cos" , func_cos , 1},
{ "abs" , func_abs , 1},
{ "sqrt", func_sqrt, 1},
{ "log" , func_log , 2},

こういうふうにして

static int func_abs( void )
{
  float f;

  if( pop( &f ) != 0 ) return -1;
  push( fabs(f) );

  return 0;
}
こんな関数作ってた
俺の式入れるとグラフだしてくれるソフト
0427デフォルトの名無しさんNGNG
ちゃんとしたスタック作れば引数も返値も思いのままだな。
ちょっぴり勉強になった。
0428名無し@沢村NGNG
おまいらよ、量子PCというのはな、量子重ね合わせの状態を使って並列計算を行うことができるPCのことよ。わかるか?。
おまいらよ、量子重ね合わせの状態とは何かわかるか?
まあくだいていえば、一台の車が右向きに走っている状態と左向きに走っている状態が同時に成立しているということよ。
だが、おれらが実際見ると、車は右向きか左向きかに固定して走ってるだろ?それは観測することによって、重ね合わせの状態のうちのひとつが固定するからよ。
おまいらよ、重ね合わせの状態のうちのひとつがどれに固定するかは、重ね合わせの係数によって決まるのよ。おまいらよ、重ね合わせの係数は複素数よ。複素数の勉強をしてみろ?
おまいらよ、量子PCでいう演算とは、この量子重ね合わせの状態を担う物理系に対して、パルス電波を与えることよ。
いままでのPCでは4bitで表現できる16の状態のうち一つについて1回づつ演算を行い、合計16回計算して16通りの結果を出力してたが、量子PCでは4bitで表現できる16の状態を同時に実現している重ねあわされた量子状態に対して1回の演算を行い、結果を出力するんだよ。
当然処理bit数が増えるほど、量子PCの威力は大きくなるわな。だから並列処理よ。
だが、おまいらよ、その演算結果を見ようとすると、重なり合った状態のうちの一つしか見れないだろ?
この問題を解決するものとしてShorのアルゴリズムというのがあるよ。
Shorのアルゴリズムは量子PCの教科書には必ず出てくる有名なアルゴリズムだから、見てみろ?
おまいらよ、このようにこれからのプログラムは量子の時代よ。
おまいらもひとつ量子言語をつくってみたらどうだ?量子でないプログラミングなんてザコよ!
0429423NGNG
>>425
私が以前作ったプログラムは、変数・関数を数値として評価し、代入文
で変数にその結果入れていくようなスクリプトを処理するもので、

a=3
b=inc(inc(a))

とするとinc(引数の数値を1増やす)によって値が増えbに5が入る、と
いう感じのもの。処理手順としては、まず=や括弧で文の構成要素ごと
に分離して検査・評価し、代入文なら右辺の評価結果を左辺(左辺は
変数または未定義変数候補文字列のみ有効)に代入する、という流れ。

関数は、引数に一つの「数値(即値か有効な定義済み変数、関数)」
をとるようにしたから、まず()で分け

文字列1(文字列2)

という形の部分があったら、文字列2を評価し、有効な数値(即値
か変数、または評価しうる関数呼び出し)であれば、その値を取得。
続いて文字列1を検査し、関数名なら文字列2を評価した引数の
数値に対して関数の機能(+1など)を適用し、その値を関数全体の
評価とする、という処理をしてみた。
0430名無し@沢村NGNG
>>429
おまえのそのやり方は古典よ。サルがやっと2足歩行を覚えた段階だな。
少しは頭を使ってみろ?
0431_NGNG
http://homepage.mac.com/hiroyuki43/hankaku05.html
0432423NGNG
>>430

私の場合は、そもそも「外」を歩いてみたこともない段階だからね。
2足歩行より先に4本足で動き回る練習からしないといけない。
0433デフォルトの名無しさんNGNG
>>429
やっぱり括弧付四則演算が書けないと読み辛いよ。
再帰下降で処理すれば括弧付四則演算も容易だから挑戦してみたら?
0434名無し@沢村NGNG
>>433
再帰下降法?原始的なやり方だな。
離散フーリエ変換で処理したほうがスマートだよ。
0435デフォルトの名無しさんNGNG
沢村って何?口だけ達者な人?
0436デフォルトの名無しさんNGNG
ツッコミを待ってるんだろうけど、ちょっと方向性が悪いね。
単なるバカが無理してるとしか見えない芸風だ。 改善を求む
0437デフォルトの名無しさんNGNG
>>433
だな。
俺も昔は式の解析でいろいろ苦労した記憶があるんだが
最近書き直したらやたら簡単に書けてびびった。
0438山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0439デフォルトの名無しさんNGNG
沈みすぎ・・
山崎渉のしわざかー
0440デフォルトの名無しさんNGNG
LL(1)程度ならccなんて不用
0441デフォルトの名無しさんNGNG
>>440
釣りか ?
0442デフォルトの名無しさんNGNG
>>426
それはどのように動く?
局ののところ、(例えOS標準の数学関数であったとしても)
1関数づつ記述しているのと、大差ないとおもわれ
0443>>429NGNG
なるほど、確実なやり方ですね。
で、OSのライブラリ呼ぶときはどうしてましたか?

1つ1つライブラリを呼ぶコードを書いてましたか?
0444デフォルトの名無しさんNGNG
null指向
0445デフォルトの名無しさんNGNG
レベル低すぎ。
平均はおまえらが下げてる。
0446デフォルトの名無しさんNGNG
>>445
おまえには分からんだろう?(w
0447_NGNG
http://homepage.mac.com/hiroyuki43/hankaku01.html
0448デフォルトの名無しさんNGNG
スクリプト言語 Sapphire 出せ
0449デフォルトの名無しさんNGNG
シンプルな中間言語作って公開して、中間言語のインタプリタとネイテブコンパイラ と
自作スクリプト言語からその中間言語に変換するコンパイラの3つのプロジェクトを作ったらいいんじゃないか?

中間言語は、
・スタックマシン
・32bit整数+32bitFloat の2つの型のみ。
・文字列は中間言語メモリイメージ中に埋め込んでそのアドレスを渡すのみ
・文字列は読み込みのみ変更不可

程度でどうでしょ? あんまり機能豊富にするならJavaVM使えって言われそうだし
0450デフォルトの名無しさんNGNG
なんでそんなに中間言語にこだわる?

大事なはスクリプト言語。まずはその仕様を
決めないと先にすすめない。

実装手段として中間言語が出てくるかもしれないが
順番が逆。
0451デフォルトの名無しさんNGNG
LISPでいいよ
0452デフォルトの名無しさんNGNG
>>450
中間言語の仕様と違ってスクリプト言語の仕様は、これはもう簡単には決まらないぞ。
特に実用的なって事になるとな

ギコbasicの時は、面白いというだけで作ったけどなあ
0453デフォルトの名無しさんNGNG
これまで2chで言語仕様から決めようとしたプロジェクトは
ことごとく潰れている‥‥‥。
まず作者がある程度動作するプロトタイプを好き勝手につくり、
それを叩き台にして議論して改良したほうが実は現実的かと。
0454デフォルトの名無しさんNGNG
1バイト命令:
 dup pop
 push(pop + , - , not , Int2Float,Float2Int, そのアドレスの値 )
 push(pop pop + - * / and or xor > == >= <= <> )

1+4バイト命令:
 push( 即値、グローバル変数、ローカル変数)
 push( pop グローバル変数配列、ローカル変数配列)
 if (pop) then 分岐
 分岐,CALL

命令空間が余ったら inc dec とか即値用短形式に割り振る
0455デフォルトの名無しさんNGNG
バイトコードインタプリタだけ作って満足しそうな奴ばっかりだな。
0456デフォルトの名無しさんNGNG
バイトコードインタプリタの例:
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/Script.txt
0457デフォルトの名無しさんNGNG
>>455-456

要は自分の功績を自慢したいと。
0458デフォルトの名無しさんNGNG
>>453
ハゲ堂!
0459デフォルトの名無しさんNGNG
とはいえ、オブジェクト指向かどうかは重要だと思うよ。
最近はオブジェクト指向一色って感じもするけど、そのあたりはどう?
0460デフォルトの名無しさんNGNG
用途によるんじゃないの?
 なんでもかんでも出来る高機能スクリプトなら欲しいかもしれないし
 ちょっと自分のプログラム中に組み込んで、カスタマイズ性を大きくしたりの用途なら不要だろうし
0461デフォルトの名無しさんNGNG
少なくとも、rubyみたいに思い付きとも取れるよな標準メソッドテンコモリ
オブジェクト指向はいらん罠〜(w
0462デフォルトの名無しさんNGNG
>>1
新しいクリトリス言語って何?
0463423NGNG
ちょっとした事情(^^;でADVのスクリプト処理系を作成中。
といってもほとんど中間コード実行システムになっているな・・・。
簡易コンパイラも作らないと。

私も以前バイトコード(というか4バイトコード)インタプリンタを
作ってみたけど、スクリプト言語を作る前に実験のつもりでバイナリ
コードを実行する仮想マシンを作っておくと良いかも。コードの判別
やパラメータの解釈、メモリの管理などを文字列ベースのコードより
単純な形で練習できる。
テストのためにアセンブラが欲しくなるから、自然にアセンブリ言語
処理系(超簡易スクリプト)も作りたくなるだろうし(^^;。
0464名無し@沢村NGNG
おまいらよ、コンパイラやスクリプトエンジンをつくるのはいいが、未踏ソフトウエア創造事業に応募してはどうだ?
採用されれば、何千万円もの開発資金を援助してもらえるよ。
もちろん定期的に進行具合をPM(プロジェクトマネージャー)に見せなければならないなどの、面倒くさい点は山ほどあるがね…
だが、それだけあれば、会社なんかやめて、毎日寝てくらせるぞ!!
PMにはアラン・ケイや伊地知をはじめ、いろんな大学教授や企業の研究者などがいる。
またPMは好きなやつを選んで応募できるから、気の合いそうなやつを選ぶといいよ。
これからは、個人でソフトを開発するなら、未踏ソフトウエア創造事業の時代だと思うが、どうよ?
0465山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0466山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0467デフォルトの名無しさんNGNG
新しいスクリプト言語作りたいなぁ揚げ
0468山崎 渉NGNG
(^^)
0469デフォルトの名無しさんNGNG
ほとんどCなスクリプト言語 ICIttp://www.zeta.org.au/~atrn/ici/
0470山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0471デフォルトの名無しさんNGNG
プッ
0472デフォルトの名無しさんNGNG
>>21
Luaスレ dat落ちしてまったの!?
プログラミング言語 Lua
http://pc2.2ch.net/test/read.cgi/tech/1034182349/
0473デフォルトの名無しさんNGNG
ぷろくしてすと
0474デフォルトの名無しさんNGNG
八ヶ月ぶりのカキコ
0475デフォルトの名無しさんNGNG
お手軽 GUI 作成用のスクリプトが欲しいな。Tcl/Tk に変わる様なやつ。
0476デフォルトの名無しさんNGNG
 
0477デフォルトの名無しさんNGNG
>>476
やたら古いスレあげてますね。
ところで、あなたに明日はあるんでしょうかねえ?
0478デフォルトの名無しさんNGNG
>>12 マダー
0479デフォルトの名無しさんNGNG
もうできてるよ
残業なくなったのは助かったけど、
職も失った
0480デフォルトの名無しさんNGNG
Perl/Tkはどう?
0481KMNGNG
誰かエミュレータに詳しい人が居たら、
http://bbs.infoseek.co.jp/Board02?user=qlbkncgtxapyiで教えてください・・・
また、このような質問はどこでするべきなのか教えてください、時間が無いもので。
0482selfNGNG
3ヶ月以上レスが無かったので、このスレ再利用しても良いですか?
お題目は Parrot です。

o メインサイト
http://www.parrotcode.org/

o メーリングリスト
http://www.nntp.perl.org/group/perl.perl6.internals

o Parrot のソース
http://cvs.perl.org/snapshots/parrot/

o Parrot の CVS ツリー
http://dev.perl.org/cvs/

o Parrot 入門
http://www.namikilab.tuat.ac.jp/~sasada/prog/parrot-intro.html

o 洗練されたPerl: Perl 6文法と正規表現
http://www-6.ibm.com/jp/developerworks/linux/041203/j_l-cpregex.html
0483selfNGNG
Parrot について使い方や最新情報を調べて、ここにメモしていきます。
要するにチラシの裏です。基本的には sage 進行で行きます。

まず現状ですが、2004/10/9 に 0.1.1 がリリースされています。
コード名は Poicephalus でムラクモインコの事です。

必要な機能は大分揃ってきているみたいです。
http://www.parrotcode.org/
> Objects, threads, garbage collection, a JIT compiler, namespaces,
> subroutines, a range of basic types (e.g., arrays, hashes, BigInt), NCI
> (for calling into native libraries) and multi-method dispatch for vtable
> methods are all available.

また、i386/ppc linux と Mac OS X ではちゃんと動くようです。
http://cvs.perl.org/viewcvs/cvs-public/parrot/PLATFORMS?rev=1.30
0484selfNGNG
今の所、気になっている点

o Thread を使うには PMC を定義しなくては行けないの?
(PASM/IMC オンリーでスレッドサポートを書けないのか?)

o コンパイラを書くとしたら、Perl が良いのか、C が良いのか
(Perl のモジュールを呼び出せる様にする作法とか)

o Perl 5 と同居させるにはどうしたら良いか
(まだコンパイルしていないです)

o ブートストラップはやはり面倒くさい
(各 OS に入るまで時間掛かりそう)

o FreeBSD と Solaris での開発状況
(サポートプラットフォームには入ってる)

取り敢えず、使い方や内部構造を調べていきたいです。
0485selfNGNG
気になっている点 その2

o tarball がでかい
(実行ファイルがどのくらいの大きさになるかの方が大事だけど)

o ソースツリーがちょっと分かりにくい
(ast, classes, dynclasses, dynoplibs とかは root に無い方が
分かり易い気がする)

o Build システムが Perl 依存、それもかなり
(Perl でプリプロセスした C のソースとか見たくないし)

o 実行速度と必要メモリサイズはどのくらいか
0486デフォルトの名無しさん05/01/19 22:38:23
ここはお前の日記帳だ!
0487デフォルトの名無しさん05/01/24 14:58:08
そのとうり。どんどん書き込め。
漏れらはケツの穴がガバガバだからな!
0488デフォルトの名無しさん05/02/09 15:20:39
では遠慮なくageさせて貰う(´・ω・)
0489デフォルトの名無しさん05/02/10 00:47:07
ガンがれ
Parrotは面白そうだけど、使えるようになるのはいつかなぁ
0490デフォルトの名無しさん05/02/16 03:11:00
parrotって糞仕様の気がするんだが
0491デフォルトの名無しさん05/02/17 23:46:25
どこが糞か説明してみろ。

出来なければお前の頭が糞ね。
0492デフォルトの名無しさん05/02/18 01:38:20
/* --- チラシの裏 ここから --- */

parrot-0.1.1をWinXP+VC.NETでインスコ。
README.win32 の指示に従ってicu-2.8-Win32_msvc7.zipを入手。
Configure.pl に対するオプションも指示通り。パスだけ自環境に合わせて変更。
何の問題もなくnmake完了。parrot.exe は 2,172KB。

ttp://www.namikilab.tuat.ac.jp/~sasada/prog/parrot-intro.html なんかでは
アセンブラとJakoが紹介されていたので、とりあえず、Jakoを弄る。

わかったことは、
・上記ページのJakoに関するコードは古くて駄目っぽい。
・現状のJakoではPerlArrayが使えないっぽい。

配列が使えないのはキビシイのでJakoは窓から投げ捨てた。

/* --- チラシの裏 ここまで --- */
0493デフォルトの名無しさん05/02/18 02:00:36
/* --- チラシの裏 2枚目 ここから --- */

Jakoを窓から投げ捨てたので、Perl6を弄る。

parrot-0.1.1\languages\perl6 にて
>perl perl6 HelloWorld.p6 するも、だいぶ経ってから Hello, World! 。

perlコード → imcに変換 → pbmに変換 → parrot実行 という流れか?
毎回imcファイルもpbmファイルも消し去ってくれるので毎度時間がかかる。

-B オプション(stop after creating .pbc file)で解決。
と思いきやさっぱりpbcファイルが残らない。
しかたないので -I オプションで imcファイルを残し、残りはparrot.exeで。

>perl perl6 -I hoge.p6
>parrot -o hoge.pbc hoge.imc
>parrot hoge.pbc
HelloWorld.

面倒すぎるので、俺は何か間違ってるはずだ。

perl6を一寸だけ弄ってわかったこと。
・現状forループが使えないっぽい。10回のループを3回で抜ける。そもそもカウンタ変数が++されない。
・メタくそ遅い。ほぼ同内容のスクリプトでperl5.8の4倍かかる。-Oオプションがいる?

/* --- チラシの裏 2枚目 ここまで --- */
0494デフォルトの名無しさん05/02/19 12:51:42
/* --- チラシの裏 3枚目 ここから --- */

>>493
> perlコード → imcに変換 → pbmに変換 → parrot実行 という流れか?
> 毎回imcファイルもpbmファイルも消し去ってくれるので毎度時間がかかる。
これ、勘違いだった模様。
そもそもpbcファイルは吐いておらず、imcファイルをparrotで実行っぽい。

/* --- チラシの裏 3枚目 ここまで --- */
0495デフォルトの名無しさん05/02/27 14:46:21
チラシの裏は白地じゃないのが多いから、レシートの裏に汁。
0496デフォルトの名無しさん05/03/13 13:48:08
>>495
ちょっと狭すぎる。
0497デフォルトの名無しさん05/03/14 00:56:24
ティッシュとかトイレットペーパーなら
いざとなったらトイレに流せるから安全。
0498デフォルトの名無しさん2005/04/06(水) 13:48:23
いざって、ナニ?FBIとか踏み込んできたとき?
0499デフォルトの名無しさん2005/04/30(土) 15:57:00
Xファイル?
0500デフォルトの名無しさん2005/04/30(土) 16:00:39
それより、道で配ってるティッシュをトイレに流すと詰まる可能性があるそうですが、
本当ですか?
怖くて確かめられません。
0501デフォルトの名無しさん2005/04/30(土) 16:25:03
流せるティッシュっつーのもあるらしいが
0502デフォルトの名無しさん2005/04/30(土) 16:34:27
大抵のポケットティッシュは流しちゃいけないらしいけど。
0503デフォルトの名無しさん2005/05/01(日) 09:19:03
僕は絵を書くとプログラムになるものを探していますがありませんかね?
0504デフォルトの名無しさん2005/05/01(日) 17:20:48
>>503
Squeakが近いかな
0505あげ2005/06/29(水) 09:19:50
エンドユーザ向けのスクリプト言語:チャミー
ttp://staff.aist.go.jp/y-ichisugi/chummy/
ってどーよ?
0506デフォルトの名無しさん2005/06/29(水) 20:41:14
手をつなぎたくなる
0507デフォルトの名無しさん2005/07/02(土) 13:57:37
言語仕様はJavaScript風で、pythonのバイトコードにコンパイルするコンパイラ作って。
0508デフォルトの名無しさん2005/07/04(月) 20:29:46
pythonのバイトコードの解説をお願いします
0509デフォルトの名無しさん2005/07/04(月) 22:03:09
parrotじゃだめ?
0510デフォルトの名無しさん2005/08/17(水) 22:34:58
DBC(Design By Contract)ができるスクリプト言語を探してます。
適当なスレが見つからないので、ここで。

ようは、COBOLやC++やEiffelのような、妙に面倒な型宣言と、
Perlもびっくりの安直な本文コーディングが混在した
奇妙な言語です。
Cでいえば、.c ファイルは Perl なみ。が、しかし、.h ファイルはCOBOLなみ、
みたいな風ですね。
0511デフォルトの名無しさん2005/08/17(水) 22:53:42
>>509
じゃあ、parrotでおながいします。
■ このスレッドは過去ログ倉庫に格納されています