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

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

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

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

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

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

いろいろと、アドバイスなりアイデアなりを頂けると嬉しいです。
0175デフォルトの名無しさんNGNG
>>174
コード対応表見れバカ
一対一対応で分らんとか抜かすやつは逝ってよし
0176名無し@沢村NGNG
>>175
コード対応表ってサイトで見れるのか?
どこで見れるよ?コード対応表は無料か?
0177デフォルトの名無しさんNGNG
>>176
チップメーカーのサイトなり、チップ本なり買え、死んでしまえ。ドアホ。
マニュアル見たことねえのがバレバレだぞ。
0178デフォルトの名無しさんNGNG
手軽に手に入るアセンブラってないの?
そんなに自前のバイナリ化ここだわらなくてもいいと思うけど。
0179名無し@沢村NGNG
>>177
チップメーカー?わからん?
コードはメーカーによって違うのか?
つまり自分が使ってるPCのメーカーのコードに変換するように設計した言語は他のメーカーのPCでは使えないことになるな…。
富士通のPCを使って開発した言語は富士通のPCでしか使えないわけだ。
MSがつくったコンパイラなんかはどうやって機種の互換性を出してるのよ?
0180デフォルトの名無しさんNGNG
>>179
コンピュータの基礎からやりなおしなさい。論外、もう終り。
0181デフォルトの名無しさんNGNG
>>179
>コードはメーカーによって違うのか?
当たり前、マックとWinに互換があるか?
>MSがつくったコンパイラなんかはどうやって機種の互換性を出してるのよ?
互換OSの仕事、コンパイラは関係ない。
0182名無し@沢村NGNG
>>178
バイナリ化ができるならアセンブラ化するよりもバイナリ化するにこしたことはないぞ。
というのもアセンブラがあってもソースコードをアセンブラ言語に変換する作業は不可欠だからな…。
その上でアセンブラを起動してバイナリ化しなくちゃプログラムは実行できんわけだ。
つまりソースを書き終えて「コンパイル」ツールバーを押した時点で、
ソースをアセンブラ言語に変換→アセンブラの起動という二つの作業を内部で実行するようにしなくちゃいかんということだ。
それってちょっとドン臭いよな。
やはりバイナリ一発変換のほうがスマートで知的らしいよ♪
0183名無し@沢村NGNG
>>181
はげ!!
マックとWinは互換性はねーよ、ハゲ!!
だが、MSがつくったコンパイラは同じWinであれば富士通のでもNECのでもHewletPackardのでも動くだろ!!
チップのコードが違うのにだよ…それが不思議なんだよな?
0184デフォルトの名無しさんNGNG
>>182
> やはりバイナリ一発変換のほうがスマートで知的らしいよ♪

そか?
Eiffelなんかだと、他言語へのトランスレーターになってたりするし。
0185デフォルトの名無しさんNGNG
名無し@沢村よ、あまりの無知ぶりが見ているこっちが恥ずかしいからやめれ、頼むわ。
0186デフォルトの名無しさんNGNG
>>183
そこで上げた環境で動くのは、同じIntelのCPU(もしくは、互換品)使ってるからだろ。
0187デフォルトの名無しさんNGNG
お前等釣られ杉。
0188デフォルトの名無しさんNGNG
>>187 沢村
0189デフォルトの名無しさんNGNG
読んで判り易くするには、やっぱり日本語化する事でしょ。
0190デフォルトの名無しさんNGNG
>>189
そんなことしたら、ソースコードが混沌として読みたくなくなっちゃう
0191デフォルトの名無しさんNGNG
>>190
ひまわりやTTSねおを根本から否定する発言だな!
0192デフォルトの名無しさんNGNG
ここで 帰値が倍精度実数の関数 サイン(度:倍精度) を定義します
 πは倍精度のローカル変数です

ここから実装部です
 π ::= PI ();
 帰値 := sin(度*π/256);
ここまで実装部でした
0193名無し@沢村NGNG
>>186
チップというのはCPUのことか?それならチップとまぎらわしい言葉使わずにCPUと言えや!
おれはまたいろんな部品のことかと思ったよ。
それで富士通とかNECとか言ったわけよ。
だが、Intelのサイト見ていろいろあるからわからんくなったよ。
どこにコードの対応表があるんだろうと思ってよ…?
Intelのサイトでもページの中にいろいろあって非常にわかりずらいよ!
http://www.intel.co.jp/
何かIntelアーキテクチャーソフトウエアデベロッパーのPDFマニュアルというのがそれっぽい気がするが…?

最適化リファレンス・マニュアル (日本語 PDF ファイル: 3,277KB)
デべロッパーズ・マニュアル、上巻:基本アーキテクチャ (日本語 PDF ファイル: 4,183KB)
デべロッパーズ・マニュアル、中巻:命令セット・リファレンス (日本語 PDF ファイル: 9,139KB)
デベロッパーズ・マニュアル、下巻:システム・プログラミング・ガイド (日本語 PDF ファイル: 7,838KB)
ハイパー・スレッディング・テクノロジのアーキテクチャとマイクロアーキテクチャ (日本語 PDF ファイル: 98KB)
ハイパー・スレッディング・テクノロジのプリシリコン検証 (日本語 PDF ファイル: 53KB)
スペキュレーティブ・プリコンピュテーション:マルチスレッディング・リソースの活用によるレイテンシの削減 (日本語 PDF ファイル: 118KB)
プロセッサの識別と CPUID 命令 (日本語 PDF ファイル: 688K
プロセッサにおけるスピン・ループの使用 (日本語 PDF ファイル: 103KB)

といろいろあってどれをダウンロードしていいかわからん…?
またCPUにもPentiumとXeonがあるみたいでこれには互換性があるのか?なども疑問だ…
おれはまたPentiumしかないと思っていたよ…
またそのPentiumも1〜4まであるし、まあ4のマニュアルをダウンロードしとけば下位互換性があるはずだから大丈夫だろうけどな…
拡張命令みたいなのはとりあえず知らなくても問題なさそうだな…
拡張命令って新しいから互換性ないからな…
それにしてもずいぶんサイズがでかくてイヤになりそうだが、外れなく一発でおれがコード対応表をダウンロードできるように教えてくれないかな?


0194デフォルトの名無しさんNGNG
alpha版のWinはもう無くなったんだっけ?
0195名無し@沢村NGNG
>>191
ひまわりやTTSの話はするな!
ちゃんと世界で話題になるような新しい言語をちゃんと設計してつくれ!!
子供のようなことを考えちゃダメだ。
0196デフォルトの名無しさんNGNG
ちゃんと世界的に話題になるような言語・・・
アラビア語プログラミング言語とか?
0197名無し@沢村NGNG
>>196
ちゃかすなハゲ!!
何がアラビア語だ!!
いいか世界で話題になるような言語とは世界の多くの人に使ってもらえるような言語ということだ。
チョンにも土人にもな。
0198デフォルトの名無しさんNGNG
>>197
スクリプトだぞ? 別に世界中で使ってもらう必要などない。

日本のみで、便利かつ判り易ければそれでいいんだ。
0199デフォルトの名無しさんNGNG
↑Ruby厨
0200200NGNG
「世界の多くの人に使ってもらう」のに wchar が 2 バイトとか言ってんのね。
0201名無し@沢村NGNG
>>198
>日本のみで、便利かつ判り易ければそれでいいんだ。

いいかげん島国根性はやめんか、バカ!!
視野を広く持てよキチガイ!!

>>200
いいか世界だよ。wcharが2バイトだよ。わかるか?
日本、韓国、中国を忘れるな!!漢字はwcharだよ2バイトだよ。
世界の人口の4分の1だぞ!!

0202187NGNG
アフォをスルーできないヴァカばっかりだな。
0203デフォルトの名無しさんNGNG
国際化なんておいといて、まずは使えるものを作るべきだろう
やはり用途を絞るべき
汎用的なのは Perl があれば足りてる
0204デフォルトの名無しさんNGNG
沢村のアフォがいるのか
道理で透明あぼーんが多いと思った
0205デフォルトの名無しさんNGNG
とりあえず過去ログから分かった事。

>おれならchar=1バイト,wchar=2バイト,int=4バイト,flort=4バイト,long=8バイトとするね。
>そしてそれぞれにsignedとunsignedがあるわけだ。

>おまいらよ言語の設計は、字句解析、構文解析、意味解析、コード生成、最適化などの各ステップからなるが、
>実はおれはな、コード生成つーのがさっぱりわからんのよ。

>K言語では配列型というのをつくるんだよ。
>例えば、array a[50];というふうに宣言するんだな。
>またarray型は型であって型ではないから、型のサイズというものを持たない。
>array型というのはintやlongやflortやcharやwcharなどの型を混ぜることができる配列なんだよ。

>おれはこうして少しずつK言語を設計していくからな。このスレでな。
>いままでのことでわからないことがあったら、何でも聞いてくれ!
0206デフォルトの名無しさんNGNG
× flort
○ float
0207デフォルトの名無しさんNGNG
× Soralis
○ Solaris
0208 ◆opMJSavJhM NGNG
>>98
なるほど、charの件ですがこんなことも(多少、行儀悪いですが)出来ますね。
言われてみれば、時々活用することもあるようです。(^^;

文字を文字列として表現することによって、sideeffectが全く無いと思ってい
たので指摘していただいて、良かったです。

とはいえ、>>98さんも同感だと思いますが、トータル的な取捨選択をかんがえ
れば、思い切って(という程でもありませんが。。。)

文字=長さ1の文字列

としても良いようですね。
0209 ◆opMJSavJhM NGNG

あと、変数に型を持たせずに、データに型を持たせるということはオブジェク
ト指向になりえますかね?

よくあるように、宣言をせずに整数・実数・文字列をそのまま変数に代入して
使うやつです。(例↓)

a=10
b=25.6
c="Hello World\n"

これはスクリプト系では、あまりにも当たり前の使い方なんでしょうが、大変
便利だな。。。といつも関心しいます。
0210デフォルトの名無しさんNGNG
>>209
その代償として変数名の間違いに気付くのが遅くなるが
0211デフォルトの名無しさんNGNG
>>209

Ruby!!
0212デフォルトの名無しさんNGNG
>>209
強型言語でもデータに型は持ってるでしょ。
データに型がなかったらキャストもいらなくなってしまう。
0213デフォルトの名無しさんNGNG
>>209,211
ウホ!いい文法!
0214デフォルトの名無しさんNGNG
>>212
>データに型がなかったらキャストもいらなくなってしまう。

それは違うかと。 キャストはコンパイラを騙すためにするもの。 静的な型を解決するもの。
0215デフォルトの名無しさんNGNG
>>212
動いてしまえば、すべてビット列
0216デフォルトの名無しさんNGNG
>>213
rubyマンセ〜の方?すれ違いかも?
0217デフォルトの名無しさんNGNG
>>213

ホイホイついて来ていいのか?
俺はリテラルからいきなりメソッド呼び出ししてしまうような言語だぜ

--------
「セックス」を「セクース」に変換

"セックス".sub(/(..)ッ(..)(..)/, '\1\2ー\3')
0218 ◆opMJSavJhM NGNG

必要なデータ型として

・空を表すNIL
・論理True/False
・文字列
・整数&実数

を仮定して、

typedef struct{
charname[14];
chartype;// Variable Type ('N'/'T'/'F'/'S'/'I'/'D')
char*str;
doubleval;
}varialbe;

のような構造を1つの変数としてもつのはいかがでしょう?

これなら、例えば
a=1.0
としたあとで、
a="Error!!"
としても、とりあえず対応出来るように思えます。
0219デフォルトの名無しさんNGNG
あらら、tabは反映されないのね。。。(^^;
0220デフォルトの名無しさんNGNG
>>218
そのレスでちょっとレベルが見えたけど、
ちゃんと基礎からやった方がいいよ。
このまま進めると、車輪を再発明し続ける事なる。
0221デフォルトの名無しさんNGNG
s/なる/になる/
0222デフォルトの名無しさんNGNG
>>218
なんで、struct なの union じゃダメなの ?
あと読み出す時はどうするの (どの型が入っているかわからんでしょ ?)
...
つーか、>>220 の言う通りだと思う。
0223デフォルトの名無しさんNGNG
>>222
> あと読み出す時はどうするの (どの型が入っているかわからんでしょ ?)
メンバ type で判断するんでしょ?

まあ >>220 の言う通りだと思うけど。
0224デフォルトの名無しさんNGNG
>>223
失礼、正直見落とし。
0225デフォルトの名無しさんNGNG
name[14]ってのは一体何だ?
0226デフォルトの名無しさんNGNG
>>220
いや、おはずかしい!

実は、既にお気づきかと思いますが、非常に単純化したレベルから概念整理
を兼ねてコーディングしてみようと思いましたので、実行スピードやメモリ
効率など全く考えておりません。

unionを使ってないのもcodingの単純化のためです。
name[]はあえて、変数名をその中にもたせたものです。

don't invent the wheels again...

よく聞かされる表現です。とはいえ、既に定着しつつあることについても、
あえていろいろとトライしてみることも(時には)よいことかもしれません。
0227デフォルトの名無しさんNGNG
例外にぬるぽは入れてね。
0228デフォルトの名無しさんNGNG
>>227
当然!
0229デフォルトの名無しさんNGNG
>>226
トリップが無いが226=218だな?
君は見当違いの解釈をした。
>>220はやんわりと「出直して来い」と言っているのだよ。
「あえて」なんて言い訳はクソにもならない。
0230デフォルトの名無しさんNGNG
>>226
そういう問題ではない、ヤバイ
0231デフォルトの名無しさんNGNG
トライするのは勝手だが、ここでやるなって事ね。
0232デフォルトの名無しさんNGNG
いっそのこと書式付き文字列型作ってよ。
ソースはRTFで書く。

誰か物好きが使うかもしれん。
0233動画直リンNGNG
http://homepage.mac.com/hitomi18/
0234デフォルトの名無しさんNGNG
文法チェックするやつ、ついでに作ったら?
http://www4.org1.com/~kitt/labo/pc/html/index.html
見たいなやつ。スクリプトだと詳しいエラーが出ないからよくわからず
部落ら化していたりして・・・
0235デフォルトの名無しさんNGNG
http://www4.org1.com/~kitt/labo/pc/html/favo.gif

すごい配色だな。
0236デフォルトの名無しさんNGNG
>>235
全然凄くない。俺なら簡単に出来るね。
0237デフォルトの名無しさんNGNG
趣味が悪いって意味じゃないの?
0238 ◆opMJSavJhM NGNG

いろいろと、ご助言ありがとうございます。

さて、素人ながらも先のデータ型をもちいて、算術演算やらif()else()やらを、
一反32ビットのダブルワードコードに変換してから実行するような、スクリプ
ト風の仕掛けを作ってみたのですが、。。。

これが案外、うまく動くものでちょっと驚いています。

正直いってメモリ効率は非常に悪いものがありますが、実行効率は非常に良いみ
たいです。(GCいれると途端に遅くなるのかもしれませんが。。。(^^;)

算出演算を繰り返すようなスクリプトソースを、perl・ruby・32ビットスクリ
プトで組んでみたものをそれぞれ実行させてみたのですが、

perl = (approx.) 2[sec]
ruby = (approx.) 5[sec]
32bit = (approx.) 1[sec]

程度でした。

シンプルだから早いのか、これからどんどん遅くなっていくのか分かりませんが、
案外素人の作った車輪でもそこそこ転がるのかもしれませんね。
0239デフォルトの名無しさんNGNG
>>238
詳細が分からんことには、実行速度などという実装に大きく依存することには
コメントしようがない。

ただ、一般に組み込み関数はperlのほうがrubyよりも速いと言われてる。
>>238もその手の延長のような気がする。
0240デフォルトの名無しさんNGNG
>>239
ネタにマジレスすんなよ。

>>218 みたいなこと書いてる奴が...

> さて、素人ながらも先のデータ型をもちいて、算術演算やらif()else()やらを、
> 一反32ビットのダブルワードコードに変換してから実行するような、スクリプ
> ト風の仕掛け

なんか作れるわけないと思うよ。
0241デフォルトの名無しさんNGNG
>>240
> >>218 みたいなこと書いてる奴が...
> なんか作れるわけないと思うよ。
ま、そりゃそうだ。
0242デフォルトの名無しさんNGNG
つうか実行時間がなんでsec単位なんだよ
0243デフォルトの名無しさんNGNG
単位よりも有効桁数の少なさが…
0244デフォルトの名無しさんNGNG
しかも、sec単位の精度というオチつきだったりするか?
0245デフォルトの名無しさんNGNG
実はストップウォッチ片手に計ったと見た。
0246デフォルトの名無しさんNGNG
ぬるぽの実装まだー?
0247デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/unix/1019926525/311-312
0248 ◆opMJSavJhM NGNG
おっと失礼!

確かに、あまりにもアバウトな表示ですね。(^^;
各スクリプトのソースと、実行時間の詳細をincludeします。

実行環境はLinux-2.4.20/RHL-8.0,CPU=i686,500MHz,Mem=256MB です。
まぁ、いずれにせよ相対値しか参考にはならないですが。。。

まずは、ソースから

==> test.32 <==
x=0.0
s=0.0
while(x<=1000000){
s=s+x
x=x+1
}
put x
put s
0249デフォルトの名無しさんNGNG
# すいません、行が多すぎるらしく分けました。

==> test.perl <==
$x=0.0;
$s=0.0;
while($x<=1000000){
$s=$s+$x;
$x=$x+1;
}
print "$x\n";
print "$s\n";


==> test.ruby <==
x=0.0
s=0.0
while(x<=1000000)do
s=s+x
x=x+1
end
p x
p s


と、まぁ、実にたわいもないプログラムです。(^^;
で、次は結果です。
0250デフォルトの名無しさんNGNG
これらはOSに付属するtime(1)による結果です。


==> 32 <==
1000001.000000
500000500000.000000

real0m1.161s
user0m1.160s
sys0m0.000s


==> perl <==
1000001
500000500000

real0m2.821s
user0m2.610s
sys0m0.010s


==> ruby <==
1000001.0
500000500000.0

real0m4.700s
user0m4.630s
sys0m0.020s
0251デフォルトの名無しさんNGNG

いまは、if()/else()/while()ぐらいしか組み込んでいませんが、私のように
言語系の素人であっても、案外楽しくいろんな制御構造が組み込めるので、
びっくりしました。

# 自分がいいと思うような、制御構文をいれてみれるっていいですね。

正直なところ、このような単純な言語では全く何の役にも立ちそうにありませ
んが、。。。(^^;

やる気さえあれば、言語処理系の専門家でなくとも、多少はスクリプト処理系
「らしいもの」を真似てみることができるのかもしれません...
0252デフォルトの名無しさんNGNG
その if とか while とかはネスト出来るの?
0253デフォルトの名無しさんNGNG
もちろん可能です。
あと、どこかのスレッドで誰か様が提案されていたようなflowを組み込んでみたい
と思っています。(こんな感じの奴です↓)

while(x<10){
if(x==5){
break;
}
}
normal_exit{
# x=10
}
break_exit{
# x=5
}

でも、なかなか時間がとれなくって。。。
ちょっと昼休みとかにいじったりしています。
0254デフォルトの名無しさんNGNG
かなりperlやrubyに不利なテストだな。
もっとそれぞれの言語にあった書き方と言うものがあるのに。

# perl
while($x<=1000000){$s+=$x++;}

# ruby
s = (0..100000).inject(0) {|s, x| s+x}

まあruby版はxが最後一回加算されないが。
0255デフォルトの名無しさんNGNG
>>254
たいして代わらんだろう?
0256デフォルトの名無しさんNGNG
ところで、perl以外の汎用スクリプトってunix系では無いよねぇ。。。
(除くruby)
0257デフォルトの名無しさんNGNG
>>254
なるほどrubyは5倍程早くなるようだなぁ。。。(w
0258デフォルトの名無しさんNGNG
>>257
つまり、2倍程遅くなると。。。(w
0259デフォルトの名無しさんNGNG
tclは?
0260デフォルトの名無しさんNGNG
>>259
何剃れ?
0261デフォルトの名無しさんNGNG
>>1
VBScriptがあるじゃないか。
0262デフォルトの名無しさんNGNG
オブジェクト指向ごときで抵抗があるのに言語がつくれるんだろうか?
0263デフォルトの名無しさんNGNG
Pythonは?
0264デフォルトの名無しさんNGNG
>>256はunix使っていないに一票(もしくはよほどのロートル)
0265デフォルトの名無しさんNGNG
ロートルというよりむしろトロール
0266デフォルトの名無しさんNGNG
>>256はムーミンということでよろしいか
0267256NGNG
もう20年近くUNIX系つかってますが、何か?
0268デフォルトの名無しさんNGNG
ロートルの方だったみたいね。
0269デフォルトの名無しさんNGNG
各言語の非汎用っぷりを教えてください
0270デフォルトの名無しさんNGNG
でも、オブジェクト指向でないものとすれば確かに汎用スクリプトなんてperl以外に無いぞ
0271デフォルトの名無しさんNGNG
>>270
awk は ?
0272デフォルトの名無しさんNGNG
>>
tcl, rexx, icon ....
腐るほどあるわけだが。
0273デフォルトの名無しさんNGNG
EMACS LISPは?
0274デフォルトの名無しさんNGNG
汎用ってなによ?
■ このスレッドは過去ログ倉庫に格納されています