1 :
デフォルトの名無しさん :
04/06/27 10:16
2. - JavaScriptについて -
JavaScriptは動的Webページ作成専用言語ではありません。
このスレでは、★言語★としてのECMAScript(JavaScript、JScript等)の話題を扱います。
ブラウザ環境でのJavaScriptはWeb製作板へ。ASP、CGIなどはWebProg板へ。
●スレ違い●なレスの例
+ JavaScriptによるWebページの挙動実現に関する疑問/質問、は、
■スレ違い■です。→Web製作板へどうぞ
+ Webブラウザの動作挙動に関するの疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
+ そのほか、Webページ作成に限定した内容の疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
■参考■[Web製作板] + JavaScript の質問用スレッド vol.29 +
http://pc5.2ch.net/test/read.cgi/hp/1087889503/l50 ※JavaScriptが板違いと言いたい人へ
運営サイドから次のような見解が出ています。
|459 飛べない削除屋 ★ sage :04/05/30 15:38 ID:???
|>>458
|ローカルルールにはひどく単純化されて書かれていますが、
|Javascript という言語そのものが板違いなのではありません。
|用途によって板違いかどうかを判断してください。
よく分からんがWeb特化以外のJavaScriptってWSHなJScript位か? 後はFlashのActionScriptか。
6 :
デフォルトの名無しさん :04/06/27 11:16
JavaScriptスレがあるだろと書き込もうと思ったら、そのスレの次スレなのかよ・・・・
Ver1.0のころのEclipseにはRhinoが内蔵されていたんだよな。 最近だとPDFに埋め込みってのがはやりかも。
8 :
デフォルトの名無しさん :04/06/27 11:50
WSHをJavaScriptで書いてるんだけど、このスレでいいんだよね? Web関係ないし。
9 :
デフォルトの名無しさん :04/06/27 11:56
jsでもvbsでもいいけどアイコン張れないかねぇ あとはTcl/Tkばりのフォーム生成機能があれば完璧
10 :
デフォルトの名無しさん :04/06/27 11:57
>>12 「全部読む」を押しましょう。
て言うか専用ブラウザ使えや。
14 :
デフォルトの名無しさん :04/06/27 21:37
目下 SVG でのみお世話になってます。 多用するのは美しくありませんが。
>>13 俺に言ってどうする。このスレをこれから目にする
不特定多数の人間に対して問題だっつーの。
>>15 アニメに使うの?FlashしらんけどASみたいなもん?
多用しちゃあかんかったら代替手段あんの?
VMLなら使ってるけど。
何か埋まってた。 梅乙
だがしかし、
JavaScript
ECMAScriptデシタ
マクロ代わりになる拡張スクリプトにコレって使えます?
agaちゃった
24 :
デフォルトの名無しさん :04/06/30 15:56
>986 デフォルトの名無しさん :04/06/29 16:28 >現在のウィンドウの座標値ってどうやったら取得することが出来るんですか? //こんな感じかな import System; import System.Drawing; import System.Windows.Forms; Application.Run(new MyForm()); public class MyForm extends Form { private var textbox1 : TextBox; public function MyForm() { textbox1 = new TextBox(); textbox1.Location = new Point(10, 10); this.Controls.Add(textbox1); } protected override function OnMove(e : EventArgs) { this.textbox1.Text = String.Format("X = {0}, Y = {1}", this.Location.X, this.Location.Y); } }
25 :
デフォルトの名無しさん :04/06/30 15:59
これってなに?JScript.NETとかそういうやつ?
27 :
デフォルトの名無しさん :04/06/30 21:25
JScript .NET デス
>>22 マクロ代わりになる拡張スクリプトって具体的になんだかわからない
けど使おうと思えば使えるかな。
さすがに人気ないね
30 :
デフォルトの名無しさん :04/07/03 14:15
JavaScriptは別に禁句でないよ。
これが正しい姿だな。
デス。
ActionScriptってどうよ。
ワラタ ちゃんと保守しとけよ。
ActionScriptはだめですか?
>>36 ECMAScript/JavaScriptの仲間ならいいよ。
>>36 ベタにFlash固有のネタは基本的に禁止だろ。つかFla板あるしな。
ECMAScript実装としてのネタなら問題あるまい。
>>38 JavaScript:DOMネタ禁止
WSH:Windows系クラスネタ禁止
ActionScript:FLASHオブジェクトネタ禁止
しゃべることが無くなるぞ。
とはいえそれらは、より適切な答えの返ってくる可能性の高い専用スレが他にあるわけで。
>>40 では問うがなぜ存在しているの?このスレは。
それら実装系にかかわらないネタに適したスレがほかにないから 隔離スレとして存在しているわけだよ。ただその話題すら、高度な ものになると、プロトタイプベースオブジェクト指向言語スレと かぶるわけであるが。
なんでDOMネタ禁止なん?
>>43 Web系禁止の間違いじゃないのかな。
DOMネタ禁止っていう話あったっけか。別にWeb系じゃないけど
DOMやってるし。
>>43 >>39 はActionScriptを禁止にするようなら
DOMネタやWindowsクラスネタも禁止になるべきだ
ってことを言ってるのでは?
最大公約数を取るならDOMを実装してないのもあるからダメだろうな。 それこそ各種ライブラリ禁止のCスレのような悲しい状況になる。
Web系だけ禁止でいいと思う。 DOMやActionScriptなどは,高度だったり このスレの消費が大きくなりそうなら他に誘導 すればいい。
DOM&Flash質問スレになりますた。
>>49 深い意味ないから余り深く考えなくていいよ。
ぶっちゃけRhinoとかDMDScriptとか需要ないのかなぁ・・・
Perlスレみたいな感じが良い俺は
>>52 Rhinoはなあ...
JVM上で動くスクリプト言語だと、Groovyがきそうな感じ。
かつてRhinoを搭載していたEclipseもR2.0で決別して、
最近だとeScriptに走りそうな感じでRhinoには戻ってこないだろうな。
eScriptなんて今始めて聞きましたが・・・。
>>56 最近eclipseで動くようになったスクリプト。まだ公式APIになってないけど
すでにパッケージ名がorg.eclipse.escriptになってるから、Rhinoの実装系
だった凍結中のorg.eclipse.scriptingと置き換わるんじゃないかと思う。
>>55 MocaScriptはもともとエディタのPeggy用マクロのため
文字列操作の関数が揃っていて便利ですね。
文字コードはPeggyがUnicode対応になるまではSJISです。
59 :
デフォルトの名無しさん :04/07/15 15:29
MocaScriptいいですね。
末端のユーザーが使うスクリプトって例えばAcrobatやMacromediaなんかを見てて JavaScriptが中心になるかと昔は思ってたけど、どうも最近の流れではPythonに 代わってきてるっぽい圧力を感じる。
SpiderMonkeyをlib化する方法をご教授ください 環境はWin XPです
自己解決。 VC4.2のプロジェクトファイルが旧式だったので存在に気づきませんでした。 コンバートして開きなおせばあっさり。
UNO って .Net も使えるんじゃなかったっけ?
66 :
デフォルトの名無しさん :04/08/24 03:07
ECMAScriptでは、なぜprototypeを触れないのですか? 仕様が肝の部分でデグレこいてるのではありませんか?
>>66 prototypeってクラスみたいなのが定義できる奴?
はじめて見たときは正直ちびった。
JavaScriptは
ブラウザいっちょでプログラミングはじめられるところがとても素晴らしい。
69 :
デフォルトの名無しさん :04/09/20 10:59:47
このスレ本当に必要なのか
Rubyがあればいらない
JavaScript を Ruby から使いたいのですが、 Ruby/JS が採用している NJS がいまいちしょぼい気がするので、 SpiderMonkey の Ruby binding が欲しいのですが、 もしかして既に実装されてたりするでしょうか? もしあれば教えて下さい。
72 :
デフォルトの名無しさん :04/10/01 13:03:15
糞スレデス
SpiderMonkeyをWindowsでビルド(やっつけ)
・MSVCで
src/ディレクトリに古いVC用のjs.mdpがあるので、それを開き(&コンバート)コンパイルするだけ。
VC6で何の問題もなくビルドできた。
・Mingwで(gcc3.2.3)
src/fdlibmディレクトリに
http://wxjs.sourceforge.net/mingw/fdlibm.mak をコピー
fdlibm.makのSRCDIRをてきとーに修正(SRC=../fdlibm)
make -f fdlibm.mak
次、src/ディレクトリに
http://wxjs.sourceforge.net/mingw/jsmingw.mak をコピー
jsmingw.makのSRCDIRをてきとーに修正(SRC=../src)
さっきのfdlibm.libをリンクできるよう、5X行に-L../src/fdlibmとか付け加えるか、もしくはfdlibm.libをsrc/にコピーしておく。
CFLAGSの-DXP_PCを-DXP_WINに修正。
src/jsosdep.hに
#ifdef _MINGW
#undef JS_HAVE_LONG_LONG
#else
#define JS_HAVE_LONG_LONG
#endif
を追加。
make -f jsmingw.mak
js.dllとlibjs.aが出来ていることを確認する。
//いいかげんなテスト #include <string> #include <iostream> #include "jsapi.h" JSClass globalClass = { "Global", 0, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub }; int main(int argc, char *argv[]) { if (argc != 2) return 1; //usage ./testjs javascript-code JSRuntime *rt = JS_NewRuntime(1000000L); JSContext *cx = JS_NewContext(rt, 8192); JSObject *global = JS_NewObject(cx, &globalClass, 0, 0); JS_InitStandardClasses(cx, global); std::string script(argv[1]); jsval retval; JSBool ok = JS_EvaluateScript(cx, global, script.c_str(), script.length(), "script", 0, &retval); if (ok != JS_TRUE) return 1; JSString *str = JS_ValueToString(cx, retval); std::cout << "retval = " << JS_GetStringBytes(str) << std::endl; JS_DestroyContext(cx); JS_DestroyRuntime(rt); return 0; } -------------------------------------------------------------------------------- $ g++ -Wall -Werror -g -DXP_WIN -D_MINGW -DWIN32 -L. -o testjs testjs.cpp -ljs $ ./testjs "var today = new Date(); date.toString();" retval = Sat Oct 09 2004 13:13:12 GMT+0900
誤爆スマソ
誤爆、なのか?
77 :
デフォルトの名無しさん :04/10/15 04:54:43
誤爆デス
unicodeとかUTF8の読み書きが普通に使えるのないですか?
79 :
デフォルトの名無しさん :04/11/07 23:20:51
>>79 SDKかぁ、そんな大仰なことしないからなぁ。
でもVS2005 Express Editionなんてのあったのを思い出せた。
JScriptないじゃん…
82 :
デフォルトの名無しさん :05/02/04 09:31:12
ecmascriptにウインドウオブジェクトや描画クラスがサブセットでいいから規定されないかな。 そうすりゃ相当汎用性上がるとおもうんだけど。 ライン引けるだけでも大分違うと思う。
あ、上げてしまった。
ActionScriptのノリで言ってる?
actionscriptは使ったことないです。 使ったことあるのは、IEのJavascriptだけです。 actionscriptってそういう方向なのかな? >ライン引けるとか云々。
_root.createEmptyMovieClip( "triangle", 1 ); with (_root.triangle){ beginFill (0x0000FF, 50); lineStyle (5, 0xFF00FF, 100); moveTo( 200, 200 ); lineTo (300, 300); lineTo (100, 300); lineTo (200, 200); endFill(); } ActionScriptだとこれで三角形になる
>86 ちょっと文が長いですね。 それでも一応グラフィック関係があるのは良いナー。
88 :
デフォルトの名無しさん :05/02/22 17:13:13
真・スレッドストッパー
89 :
デフォルトの名無しさん :05/02/22 17:52:25
?
90 :
デフォルトの名無しさん :05/03/21 00:35:52
DMDScriptに自作オブジェクトを追加・取得ってどうすればいいの? これでエディタのマクロ作りたいんですよね
91 :
デフォルトの名無しさん :2005/03/23(水) 10:47:09
で、 JavaScript とはどう違うの?
msのJscriptとネットスケープのJavascriptをすり合わせて作られたのがECMAScript。
93 :
デフォルトの名無しさん :2005/03/25(金) 10:08:47
>>92 で、いまの著名なブラウザは ECMAScript に完全準拠?
95 :
92 :2005/03/26(土) 14:55:33
僕も知らない。
あhrっっば
97 :
デフォルトの名無しさん :2005/03/26(土) 15:12:38
SpiderMonkey、またはDMDScriptに関する日本語版APIリファレンスってありませんか?
最近調べたが無い。
そっか。残念。
Ajaxの話題はここでよい?
XMLHttpRequestってECMA規格になったっけ?
102 :
デフォルトの名無しさん :2005/03/28(月) 00:27:07
AjaxについてはWebProg板にスレが立ってる
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } ↑を見る限りECMAScriptではないね。規格外技術。
>>4 > Web上におけるクライアントサイドスクリプティングに特化した実装(通称Javascript)については
> WebPrograming板などの専門スレをご利用ください。
> [WebProg板] JavaScript質問コーナー ((サーバーサイド方面))
このテンプレ変じゃね?
> JavaScript はクライアントサイドなので ん・・・なんか変だ。
>>107 そりゃもっと変だ。
WebProg板への誘導があるのはサーバーサイドJavaScriptが存在するからで、
修正すべきなのは
> Web上におけるクライアントサイドスクリプティングに特化した実装(通称Javascript)については
> WebPrograming板などの専門スレをご利用ください。
という文言のほう
ん、サーバーサイドJavaScript?? エディタマクロの elisp スレがオッケーなら、ブラウザ組込み言語としての JavaScript スレもオッケーな気がするが、そうなっていないのは話題の レベルが低すぎるからなんだろうね。それとも、エディタマクロ板がないから elisp はオッケーなのかな。 JavaScript は良い言語だと思うが、不遇すぎるな。
つーかWebProg板のリンク先見ればいいじゃん…と思ったら見事なまでに サーバーサイドJavaScriptの話題なんかないな。orz
サーバサイドECMAScriptは、ASPのJScriptとFCSのActionScriptがある。 ASPはVBSが主流だし、FCSはそもそも使われない。 テキストエディタとかのマクロを全部JavaScriptにすれば皆幸せになれるのにな。
116 :
デフォルトの名無しさん :2005/04/07(木) 22:48:08
引数をとって初期化処理を行うようなオブジェクトからプロトタイプ継承する時、 継承元のダミーオブジェクトをnewするのって面倒くさくないですか。 function Parent(foo, bar) { foo.init_for(this); bar.init_for(this); } : : function Child(foo, bar) {} : : Child.prototype = new Parent( /* ここをどうするか */); Parentのコンストラクタの中でfooやbarにメッセージを送ってるから fooやbarもダミーで入れとかないといけなくなっちゃう。 みなさんどうしてます?
117 :
デフォルトの名無しさん :2005/04/10(日) 00:36:05
オブジェクトを作るのにapplyみたいな方法はありませんか? 要するに次のようなことがしたいのですが。 obj = new F; // ここではコンストラクタを呼び出さない F.apply(obj, arguments); // 任意の引数でコンストラクト
118 :
デフォルトの名無しさん :2005/04/20(水) 08:01:18
Adobe が Macromedia を買収したね。 PDF, SVG, SWF とスクリプティングは ECMAScript な訳だけど、 何か面白い事起きないかな。
アクメスクリプト誕生の予感
122 :
デフォルトの名無しさん :2005/05/02(月) 04:55:18
IE上で、任意の文字列のHTMLを表示させたいんだけど、 それって可能? BODYだけではなくて、HTML、HEAD、SCRIPTも書き換えたい。 (BODYだけならINNERHTMLの上書きで可能なのはわかってる。) 感覚としては、「???.INNERHTML="<HTML>.....</HTML>"」みたいにできればいいんだけど。
document.all(0).outerHTML
125 :
デフォルトの名無しさん :2005/05/02(月) 15:44:26
objIEDoc.all(0).outerHTML = "<HTML></HTML>" 「outerHTMLプロパティを設定できませんでした。この操作に対して無効なターゲット要索です」
>>122-125 ブラウザ上のJavaScriptについてはWeb製作板のJavaScriptスレで。
なんでまたECMAScriptスレでこんな質問してるの?
ブラウザ上のスクリプトではなく、ECMAScriptからIEの操作を話しているじゃん
「IEのオブジェクトをnewして・・・」って話から始まるのか?
>128 >125の続きでいいんでない?
ん。簡単にできそうだと思ってたけど、意外と難しいかも。
131 :
デフォルトの名無しさん :2005/05/05(木) 03:29:46
できないよ
遅レスだけど。
>>117 obj = F;
new obj(arg1, arg2, ...);
ではどう?
136 :
117 :2005/05/14(土) 22:49:30
>>135 えーと、よく分かりません。
次の(1),(2)に何か違いがあるのですか?
function F() { ... }
f = F;
F(arg1,arg2, ...); // (1)
f(arg1,arg2, ...); // (2)
それと、求めているものは
obj = new F(arg1,arg2,arg3, ...) の代わりに、
obj = new F( [all_arguments] ) することなのですが。
こんなかんじで。
obj = new Object;
obj.__proto__ = F.prototype
o = F.apply(obj, args)
if (o instanceof Object)
obj = o;
でもこれはECMA準拠じゃないし。
137 :
デフォルトの名無しさん :2005/05/14(土) 22:52:15
あ、それともう一つ別の質問が。 継承元の親を動的に切り替えたいのですが。 function A() {} A.prototype.x = 1; function B() {} B.prototype.x = 2; function C() {} C.prototype = new A; C.prototype.constructor = C; o = new C; alert(o) // 1 o.__proto__ = new B o.__proto__.constructor = C; alert(o) // 2 これをECMAScriptではどのように書けばよいですか? こっちが実現できればなお良いのですが。 // A,B については同上 function C() {} C.prototype = new A; C.prototype.constructor = C; o = new C; alert(o) // 1 C.prototype = new B C.prototype.constructor = C; alert(o) // 2 これはCの全インスタンスのコレクションを管理する 以外に方法がなさそうな気がします。 しかしそうすると明示的に削除メソッドを呼ばないと Cのインスタンスが永久に消えない罠。
× alert(o) ○ alert(o.x); つーか、そこかしこで行末の ; が抜けてたり…… 思いつきで書いてテストしてないから悲惨 orz
>>136 あんたさあ、ECMA-262をちゃんと読んでいるの?
f.apply(thisとして扱うオブジェクト, 引数配列)
というそのものズバリがあるんだけど。
そしてprototypeの動的書き換えはECMA-262として標準化
されたときにわざと落されたんで、存在していない。
>>136 すまそ、applyではnewとは動作が違うよね。申し訳ない。
newの代わりは…eval()しかないかな…
>>136 たびたびで申し訳ない。再度ECMA-262のnewの所を読んでみると、
「new f.apply(null, 引数配列)」でいいような気がしてきたがどうよ?
142 :
136 :2005/05/15(日) 11:20:50
>> 141 すばらしい。 まさに求めていたとおりのものです。 ECMA-262 3版 邦訳のnew演算子のところは見たのですが、自分には 少々難解で、そのような動作が可能だとは、全く読み取れませんでした。 それと、prototypeの動的書き換えは無理ですか。 折角のプロトタイプベースな言語なんだから、それくらいやらせて欲しい ものですが、わざわざ禁止したからには何か理由があるのでしょうか。 Stateパターンの実装にもってこいだと思ったのですが、残念ですね。 どうもありがとうございました。
>>141 >new f.apply(null, 引数配列)
すみません、やっぱりうまくいかないみたいなんですけど。
朝方やったときは寝惚けて変な勘違いしたようです。
>>117 でいいと思うよ
f.apply(new f, 引数)
プロトタイプの動的書き換えを禁止したのは最適化とか 可能にするためじゃなかったかな。
>>144 それだとコンストラクタが2回呼ばれるので、場合によっては不具合が。
例えばコンストラクタからグローバル変数やクラス変数を変更しているときとか。
やっぱり eval() っきゃないですかね。
>>145-146 なるほど。参考になります。
148 :
デフォルトの名無しさん :2005/07/16(土) 22:17:57
ECMAScriptの一般流通状況はどうなってますか? SpiderMonkeyの日本語マニュアルが無くて以前は挫折したんだよなぁ
遅レスだが、
>>116 Function.prototype.inherit = function(superClass){
function Temp(){};
Temp.prototype = superClass.prototype;
this.prototype = new Temp;
this.prototype.constructor = this;
}
Child.inherit(Parent);
152 :
デフォルトの名無しさん :2005/10/01(土) 21:17:34
SpiderMonkeyをエディタに組み込もうかと思ってるんだけど ステップ実行とか中断とかある? 評価開始したら終わるまで戻ってこないとかだとちょっと困る
んじゃmozzilaって一度JSの実行始めたらとまんないの? そんなこたないよねえ どうやってんだろ
グローバルオブジェクトを更新してるんだろ
どういういみ?
window.title="hoge"ってグローバルオブジェクトがあったら スクリプトでwindow.title="boke"って更新したら 次実行するときもwindow.title="boke"を保持できるようにすればいい それの繰り返し
いやそういう話でなくて、 アプリからspidermonkey制御するとき、 無限ループを中断する機能がなかったら ブラクラになるでしょ? ていう話 jsdbgapi使うのかなあ
kodersで発見 JS_SetBranchCallback を使うらしい
ステップ数カウントして中断処理が入ってないか調べるとか
spidermonkeyって、単体のバイナリ配布ないのん?Windowsで。
163 :
デフォルトの名無しさん :2005/11/21(月) 02:22:12
164 :
デフォルトの名無しさん :2005/11/21(月) 03:22:07
おまえら、JSをWeb以外で何に使ってるの? 普通のスクリプト言語に比べて標準ライブラリがなさすぎでアプリ書くには向かんだろ。 言語としても特に便利な機能が揃ってるわけでもないし。 メリットって、仕様がシンプルでいろんなアプリに マクロ言語として組み込みやすい程度じゃね? それって、使う側のメリットじゃないよな。
>>164 俺はJScriptでIrvineの操作を自動化しているが、これは使う側のメリット足り得ないのかい
Windowsドメイン用の初期スクリプトとしても使えるしな。
171 :
デフォルトの名無しさん :2005/11/21(月) 12:49:21
>>164 だからまともなスクリプト言語として使うには問題なんだろ。
>>169 ,170
だから、それはWindowsなりに簡単に組み込めたっていう提供側のメリットだろ。
使う側には、JScriptじゃなくて例えば代わりにPythonが組み込まれてたとしても問題ない。
マクロが書けるという使う側のメリットは、JScriptだからじゃなくて、
マクロ機能を提供されてること自体によるもので、
選ばれた言語自体によるメリットではない。
172 :
171訂正 :2005/11/21(月) 12:50:54
RhinoでE4Xやってみた。おもろい。 xmlbeansは2系はダメみたい。1系を使う。 あと、js.jarはMANIFEST.MFに、 Main-Class: org.mozilla.javascript.tools.shell.Main Class-Path: xbean.jar となってるから、-jarするときはjs.jarと同じ所にxmlbean.jarがないとダメみたい。 C:\jar\rhino1_6R2>java -cp C:\jar\rhino1_6R2\js.jar;C:\jar\xmlbeans-1.0.4\lib\xbean.jar org.mozilla.javascript.tools.shell.Main Rhino 1.6 release 2 2005 09 19 js> x = <hoge><p>puge</p></hoge> <hoge> <p>puge</p> </hoge> js> x.p puge js> C:\jar\rhino1_6R2>java -cp C:\jar\rhino1_6R2\js.jar;C:\jar\xmlbeans-2.1.0\lib\xbean.jar org.mozilla.javascript.tools.shell.Main Rhino 1.6 release 2 2005 09 19 js> x = <hoge><p>puge</p></hoge> js: "<stdin>", line 3: uncaught JavaScript runtime exception: ReferenceError: "XML" is not defined. js> C:\jar\rhino1_6R2>java -cp C:\jar\rhino1_6R2\js.jar;C:\jar\xmlbeans-1.0.4\lib\xbean.jar -jar C:\jar\rhino1_6R2\js.jar Rhino 1.6 release 2 2005 09 19 js> x = <hoge><p>puge</p></hoge> js: "<stdin>", line 2: uncaught JavaScript runtime exception: ReferenceError: "XML" is not defined. js>
>>173 xhtml を操作しようとすると 'class' が予約語で使えなくってはまる。
TokenStream.java の Id_class が出てくる行をコメントアウト&コンパイルしなおして
無理やり使えるようにしたけど、何とかならんもんか。
トーカナイザをいじれるならもっとやりようはあると思うが、 とりあえず逃げるなら別の属性にしておいて後で変換かな?
ECMAScript 4.0のclassってお前さんがたどう思う? Java風class取り入れてJavaもどきにする位なら言語非標準の機能使わないと ちゃんとしたプロトタイプチェーンがつなげないのを何とかしろって思うんだが。
Java もどきにする予定があったからわざわざプロトタイプチェーンを手作業で繋ぐような仕様にしなかった っつー考えなんでないかい?Java もどきよりは真性プロトタイプに走って欲しいと俺は思うがな。
まあ、JavascriptとJavaの予約語がかぶってたり、LiveConnectがあったりと 何となくJavaとの連携を視野に入れてるのかもなぁと思ったりもしたが、 だからといってJavaもどき化という路線もどうかなぁと思うんだよな。 JavaソースのインタプリタならBeanShellがあるわけだし、Java風の文法が使えるようになったって スクリプト言語的にあまり旨くないと思うし。 でもまぁしょうがないのかねぇ。JavascriptはJavaとはまったく違う言語です、ってのが覆されることになるんだろうか。
Mustangって、Rhino自体が乗るんだろ。E4X入ってるじゃん。 すくなくとも、XMLBeansがあれば動くんじゃね?SUNのJAXBとぶつかっちゃう?
184 :
デフォルトの名無しさん :2005/11/22(火) 18:27:07
効率のためじゃなくて、Javaの立場がなくなるからだベ。プ
よく解ってないし、そんな英語読む根気もないんだけど、 そのClassって単にコンストラクタのprototypeの構文糖だったりしないの? Class導入のメリットとデメリットおせーて
>>186 構文糖レベルではなく、むしろ型をクラスベースで構築し直して
プロトタイプは見切りを付けて捨てるつもりか、二極化してそのようにも書くことはできる、
というレベルになる気がする。
クラスの導入のメリットは型の存在そのものだろう。
動的な型のオブジェクトが介入すると、そこは必ず遅くなる原因になる。
全てのプロトタイプ型の言語はこの問題を解決できない。
静的な型を導入することで、パフォーマンスの重要な部分について
最適化の可能性を与える。
さらに型の制約により実行前にエラーを検出できる。→メリット
言語の学習期間が長くなる。→デメリット
そこまで実行効率を重視するような言語なのかね。
アメとムチだよ。 初心者にはこれまで通りprototypeで書かせて 上級者やライブラリ作成者はより緻密にclassで書かせる。 これでユーザーのハートをがっちりキャッチ。
>動的な型のオブジェクトが介入すると、そこは必ず遅くなる原因になる。 言語の常識なのかも知れないけど、インタプリタで静的型があると何で速くなるの? >さらに型の制約により実行前にエラーを検出できる。→メリット コンパイルするってこと?半端な静的型でも意味あるの? >言語の学習期間が長くなる。→デメリット それだけ?だったら、クラスベースの方が修得者も情報も圧倒的に多いんだから、 むしろ学習期間は短くなるんじゃね? 俺自身、コンストラクタのprototype?とか、とまどったし? とすると、デメリット無し?
JScript.NETで静的型付けをして使ってると、これならC#でいいやってなるよ。 中括弧のスコープが無いのにちょっと戸惑うし。 ECMAScriptは、動的言語だから面白かったんだよ。 C#に動的言語風の機能を静的流に翻案して、無理矢理付けるくらいなら、 こちらを改善していけば良かったのに。
動的言語マンセー 動的言語って何?
IDispatch::Invokeメソッドしかない言語のことだよ
動的に文法が変わる言語のことだよ。
>>197 Lispで動的に文法が変わる例をきぼんぬ。コンパイラな処理系でね。
>>175 予約語がタグ名に使えない仕様って事はないと思うから、
現在の実装の制限に過ぎないだろう。
HD DVDはインタラクティブの仕様がJavascript + XMLだったのに、 Blu-rayに負けそうだね。
それ動的に生成するわけじゃないと思うよ。コンパイラと指定してあるわけだし。
コンパイラで動的に文法が変わるってどういう意味よ マシン語の文法が変わるのか?
>>199 タグ名じゃなくて
var doc = new XML(readFile("./event001.xhtml"))
var target = doc.body..div.(@class = "date")
とかすると駄目なのよ。'class' が JS の識別子とみなされる。
Firefox 1.5RC の SpiderMonkey だといけるんで、
上層にバイパスする仕掛けをつくりゃいいんだろうけどさ。
>>204 間違えた
× @class = "date"
○ @class == "date"
var target = doc.body..div.(@{"class"} = "date") こんな感じ?
クラスより、インクルードができるようにして欲しいな。
>>198 lexicalなところはreaderをいじれば即変わるし、
制御構造はdefmacroで即変わるだろ。もちろんコンパイル
する処理系でも。何が問題なの?
反論がないようですね。LISP最強ってことでFA?
>>206 var target = doc.body..div.(@["class"] == 'date')
これでいけたよ。ありがとう!
'@' は E4X 特有の演算子かと思ってたらオブジェクト名なのね...
>>207 JS2 ならあるな。
設計からして import の方が大事なんだろうが。
>>209 あるサイトによるとJavascriptはCの皮を被ったLISPだそうだ。
S式を取っ払い、C風の構文に変えたLISPのサブセットと見ることもできなくはない。
スクリプトエンジンスレの荒らしが来てるのか まあホントにLisp最強ならそのうち再興することもあるだろうし 変に押し付けず時流に乗ったもの使ってりゃいいよ
Newton、5年火を入れてないな…。
>>209 schemeのdefine-syntaxの方がアレかも
4th Edition ベースの実装はなかなか普及しませんな。
ところで、JavaScriptの良いところは プロトタイプオブジェクト指向は有効だっていうのを 一般プログラマにも理解させたことなんだと思うんだけど プロトタイプオブジェクト指向って、JavaScript以前にはどういうのが存在したのかな? オブジェクト指向関連って、歴史とかがゼンゼン本になっていない気がする…
ECMAの仕様書の最後の方に >Free printed copies can be ordered from: ってあるけど、コレって翻訳して配布しても文句言われないのかな? 一応参考として…。
221 :
219 :2005/11/30(水) 16:55:14
うぉー。すっげー。 今までの疑問が氷解した(厨 結構本や図書館を探し回ったりしたんだけど海外文献か… 時々思ったこともあったけど、もしかして日本って恵まれていない?
何を今更。。
>>223 日本人なら全員英語が読めるのだから、日本語の文献が追加で読めるぶんだけ
恵まれているのだよ。
技術書がローカライズ(翻訳)されるのって、世界中でも日本くらい、と聞いたことがある。
うちには83年だかのOOPSLAの日本語版があるが…
良くも悪くも日本は翻訳文化。
翻訳というかJapanize
ECMAScripter
javascriptでサーバーってつくれるのかな
Flash Communication Saverだっけ?
>>218 使う奴のほとんどはプロトタイプベースだと思ってない。
残念だったね。
>>218 >JavaScriptの良いところは
>プロトタイプオブジェクト指向は有効だっていうのを
>一般プログラマにも理解させたこと
「プロトタイプオブジェクト指向は、有効」なのか、
「プロトタイプオブジェクト指向でも有効」なのか。
前者だというなら、どこが、何に有効?
>>218 Prototype.jsとかの有名どころのライブラリが、軒並み
「擬似的にクラスを定義する仕組み」を実装している
実態をどう見ますか。
Server、な。ただサーバってのは既存の仕様を詰め込んだようなもんだから どんな言語使ってもガチガチで大して差は出ないような気もするが。
238 :
デフォルトの名無しさん :2005/12/06(火) 18:32:33
>>236 元の作者がプロトタイプベースでなくクラスベースの言語に長けていると言う事以外に何も表してないと思うよ。
スマン、sage忘れた。
(ノ∀`) アチャー
241 :
218 :2005/12/08(木) 22:44:48
>「プロトタイプオブジェクト指向は、有効」なのか、 >「プロトタイプオブジェクト指向でも有効」なのか。 個人的な感想として、メソッドにprivateもprotectedもいらない、メソッドにあるのは 「書き換えてはいけないメソッド」ではなくて 「書き換えない方が良いメソッド」だと思ってる なら、必要な時に柔軟に書き換え可能にメソッドは出来ていないといけない 変数もそれと同じ 書式は全然関係ないよ。可読性の許すままに書けば良いと思う
>>238 だとしたら一般的なプログラマとやらは、プロトタイプベースの有効性ってやつを
どんなコードを読んで理解したと言えるのだろう。
__parent__って何で__proto__とかと同じくらいの場所にいるのか 分かる人いますか
プロトタイプベースであることが有効だったかというと疑問だなあ
>>236 にもあるけど、規模がある程度を超えると
結局クラスっぽくし、モジュール化したくなる。
流行ったのは、(1)型を意識させない(2)宣言不要の2点に尽きると思う。
VBがシロウトに受け入れられやすかったのと同じ。
ただ、この2点は製品強度のソフトウェアを作るには障害でしかないんだよね。
独りでオナニーしたり、ソッコーでRADするには便利だけど、
そこまででしかない。
今の流行を「プロトタイプベースが受け入れられた」
とするのは妄想に近いと思うよ。
>>244 妄想っつーと語弊があるよ、どっちかって言うと誤解じゃないかな。
この手の柔らかい言語系っていうのはプロトタイプとかRADとかパッと片づける必要のあるものには
とても向いているのは確かな事だし、自分が一番不思議でならないのはRADやプロトタイプを生成して
プレゼンをしたあとで、その構成を分析、再構築する橋渡しをもったIDEなりなんなりが何故存在しないのかって事なのだけど
スレ違いは承知で聞きたいよ。(ECMAに限らないんだよね、あらゆるスクリプト処理系付きプログラムにいえる事だと思うんよ)
246 :
241 :2006/01/02(月) 17:20:27
>>245 >この手の柔らかい言語系っていうのはプロトタイプとかRADとかパッと片づける必要のあるものにはとても向いているのは確かな事だし
個人的には、JavaScriptではここを理解できたのを結構評価して居るんだけどね
「まずはRubyでプロトタイプ、製品はJavaで開発(泣」
みたいに同じ物の作り直しをするのって格好悪いことをやめさせるためには
プロトタイプを拡張して、そのまま製品に持って行ける言語がいるとおもうんだよね
スクリプト系の使い捨て言語が、あとでプロジェクトを巨大化させるのに向かないのって
1.名前の衝突などの、部品強度の問題
2.スクリプト言語故の、実行速度等のパフォーマンスの問題
自分はここらへんは、IDEで解決される部分よりも、言語使用で解決される部分の方が大きいと思う
そういう言語は過去に Common Lisp, Smalltalk, Dylan, OCaml 等ありましたが、 いまいち時流に乗れずじまい。Perl の Parrot に期待するも、何時リリースされる事か。
プロトタイプベース言語とは関係なくなってきたな笑
>>246 >プロトタイプを拡張して、
>そのまま製品に持って行ける言語がいるとおもうんだよね
似たようなことをやろうとして沈没したプロジェクトを3つほど見た。
原因は言語云々ではなく、仕様書・設計書を誰も作らずズルズル続けたから。
まあ論外っぽいが。
ところが、仕様書や設計書がしっかりしていたら、
プロトタイプを使い続ける必然性は薄いんだよね。
どう作ればいいかわかってるから。
となると、枯れた実装があり、周辺ライブラリが多く、
人員を動員しやすいというほうがファクタとして強くなる。
今はおそらくJava。
プロトタイプピングは問題空間を探索して視野を広げることだから、 その成果物であるプロトタイプが十分良い解には必ずしもならないよね。 プロトタイプを必ず捨てるよりは捨てなくてもいいかもしれない方がよい だろうが、それがどれくらい嬉しいかっつーと最初の探索でその後拡張しても 問題にならない解が得られる可能性が、 使い捨て言語の使い勝手と捨てると割り切ってプロトタイピングすることによる 探索速度を諦めることにどれくらいひきあうかという問題になるんじゃね? 賢くて探索初期に十分良い解が得られる可能性がかなり高い (それってプロトタイピングする意味が半分なくなりそうな気も)人か、 アホで使い捨て言語使ってもろくにプロトタイピングが進まない人か、 なんじゃないかなあ、嬉しいのは。
> 最初の探索でその後拡張しても > 問題にならない解が得られる可能性 その可能性がある程度分かってるのにプロトやるってのは > 探索初期に十分良い解が得られる可能性がかなり高い > (それってプロトタイピングする意味が半分なくなりそうな気も) これと同じくおかしな話 > アホで使い捨て言語使ってもろくにプロトタイピングが進まない アホだったら何やっても同じだから(笑)
>>246 Common Lisp Scheme スレの 82 に良い事書いてあったんで引用。
ちなみに Common Lisp は名前空間もそこそこの実行速度も備えているよ。
>本当に複雑な問題っていうのは、まず (hoge ムッチャ複雑な処理)
>の中身をどうすべきか、っていうのが事前にわからない。
>問題の本質自体が見えていない。そこが出発点。
>
>とりあえず手元には生のデータがある。その生のデータをいじくりながら、
>まず問題を記述するための単語にあたるパターンを見つけ出す。もちろん
>最初はそれが正しいかどうかはわからないが、仮説を立てて、生データを
>単語にまとめるルーチンを書いてみる。それがmogeやjojo。
>
>その単語を色々組み立てて、問題を記述できる句が構成できないどうかを
>調べてみる。句できたらそれを色々組み合わせて文ができないか調べてみる。
>その途中で、最初のパターン化が間違ってたことがわかり、下に戻る
>こともある。ときには、多少間違っていてもそれを使って無理矢理全体を
>組んで様子を見てみると、どこがおかしいかわかる場合もある。そうやって
>粘土をこねたりLegoを組み立てるみたいに作っていくと、最後に
>
>「(hoge ムッチャ複雑な処理の中に
>(poge まぁ複雑な処理の中に(moge 単純な処理))
>(jo まぁ複雑な処理の中に(jojo 単純な処理)))」
>
>と書けば問題がきちんと記述できることがわかる。これがわかれば後は簡単だ。
>君の言うように、どんな言語にだって落とせる。もっともこれが分かった時点で
>Lispの場合は既に動くプログラムが手元にあるわけだが。
>まあ、大抵はこのあとリファクタリングして整理してゆくがね。
>
>君は、答えが分かった後どうするかって話をしている。難しいのはその前だ。
Lispは > 枯れた実装があり、周辺ライブラリが多く、 > 人員を動員しやすい を満たしませんね。
>>252 別に Lisp の宣伝をしに来た訳ではなくて、別の言語でも良いんだけど、
プロトタイピングから納品出来る所まで一気通貫でいける世界もあるんじゃ
ないかと。ちなみに一行目は ACL とか LispWorks とか商用の環境がある。
で、プロトタイプベース言語云々はどうなったのかな
OpenLaszlo はどうなん?
>>243 SpiderMonkey か?
__parent__ は 変更不可で読み出し専用の [[ProtoType]]
評価順は __proto__ が先だったと思う。自信ないけど
>>257 レス感謝。
あれから調べてみたけどobsoleteみたいっすね・・・
とりあえず使わない方向でやってみます
>>257 __proto__はプロトタイプチェーン、
__parent__はスコープチェーンと理解していたけど違うのかな?
obj.propertyとしたときpropertyはプロトタイプチェーンをさかのぼって調べられる、
a = variableとしたときvariableはスコープチェーンをさかのぼって調べられるといった具合に。
要は[[Scope]]じゃないの?
くだ質ですみませんが、以下の違いについて説明してもらえると助かります。 あるオブジェクト階層の中にいる状態で [this.parent.xyz]と[parent.xyz] や [this.x]と[x] は何か違いがあるのですか? ちなみに [var x = 10;]と[x = 10;] の違いはわかっているつもりです。 (前者が局所変数で後者が大域変数ですよね?) 個人的に明示的なthisの指定には何か抵抗があるのですが。。。 ちなみに自分はC/C++/Javaプログラマです。 お手数ですがよろしくお願いします。
明示もクソもjavascriptではオブジェクトのメンバにアクセスするときにthisを使います。 使わないやつは全部タダの変数です。
262 :
260 :2006/01/06(金) 14:47:10
>>261 ありがとうございます。それでは約束として覚えることにします。
xが通常の変数なら this.xはクラス変数 と言う風に理解すれば、実用上問題ないと思うんだ、…俺は。
クラス変数? インスタンス変数じゃねーの?
ECMAScriptではクラスという概念を持ち出さないほうがいい気がするが…
もしかしてthisがキーワードじゃないってこと?
>>266 この会話の流れでどうしたらその発想が出てくるのか不思議だ
ECMAScriptはSchemeの流れからくるものだからね。 やっぱりLispが原点だね。
269 :
デフォルトの名無しさん :2006/01/08(日) 15:44:24
お前が1人でやれ
経験少ないからどこまでやれるか分からんけどちょと参加してみたい
272 :
デフォルトの名無しさん :2006/01/09(月) 00:35:49
>>271 書ける所からダラダラかいていけばいいんじゃないかな?
内容のおかしい所があったら、誰か直してくれるよ
>>269 Javascriptが独立した言語でないとか書いてあるんだけど。
HTMLとの連携はDOMでやるんでなかったかな。
初心者を囲い込むためにわざとかいてるのかな・・・。
・JavaScript:入門 プログラムの流れ 書いてみたがスタブにする方法がわからない・・・。
275 :
デフォルトの名無しさん :2006/01/09(月) 15:32:01
>>236 http://kengai.my.land.to/h/?%28ClickableTooltip%29prototype.js%B4%D8%CF%A2%A5%E1%A5%E2 しかし、その実態は、 クロージャーや高階関数を持った本格的な関数型言語であり、 「プロトタイプ指向」という
最新のパラダイムの上に設計された、 かなりとんがったプログラミング言語です。
ですから、JavaScriptを、言語仕様が本来持つ可能性全開で使用したら、 普通のプログラマには、
ついていけなくなります。 特に、「プロトタイプ指向」という考え方は、パターンも決まってなくて、 これを
ダイレクトに使用したら、 その柔軟性が裏目に出て、理解しにくいコードが書けてしまいます。
prototype.jsは、そういう自由度が高いけど使いこなすのが難しいJavaScriptという言語を使い、大半のプログラマ(特に
Javaプログラマかな)が慣れ親しんだ、 クラスベースのオブジェクト指向でコードを書くためのフレームワークです。
Wikipediaは何かを一生懸命書いても しばらくたつと張り切ったアフォによってわけのわからん編集をされて そのうち跡形も無くなるよ。 Wikipediaに間違った記事や低質な記事が多いのは、 正しいことを書く奴がいないからじゃなくてアフォの破壊活動のせい。 ググった方がが明らかにましな情報が早く手に入るという現実。 アフォとの無駄な論争を続けないと記事が維持できなくなるし、 その結果浅い内容の記事ばっかりになる(実際そうでしょ?) 本業の哲学者が哲学のエントリに説明文を書いたけれど、 しばらくするとアフォが正義感で編集してデムパ化したり 構成が分けわかんなくなったりして跡形もなくなっていたという話とかね。
>>276 質うんぬん以前に、情報量が少なすぎるページの方が多い罠。
>>277 276にも書いたように、情報量の多い力作を書き込んでも、
そのあとアフォに破壊されて長生きしないことが多いようです。
なので、砂で作った城みたいに作っては崩されの繰り返しで、
情報量が少なすぎるページが多いと。
プロトタイプベースの言語が受け入れられつつある。 なんて書いたらもうタイヘン(笑)
>276 >278 問題が出るならwikiじゃなくてもいいわけで
>>280 というかwiki使ってありがたいところは
ライセンスがGFDLってところなんだよね。
根本的に、後々の再掲載とか改変とかが自由なライセンスだから
後々ダメになっても、誰かがとっていたバックアップで、自分なりに仕切り直せる
Webを徘徊した人間なら「え”−、あのサイト消えちゃったのぉ!」
と一度は思うモノだから、後に残るフォーマットであるというのは大きい
>>281 Wikipediaな、"というかwikiつかって・・・"だとwiki全般になっちゃうよ
わざわざwikipediaを使わなくても、他に自前でwikiを立ち上げればいいじゃない。 俺はやらないけど。
ECMAScript独特のプログラミングパラダイムを学ぶ良い参考文献/参考URLはありませんか? 和文英文問いません
プロトタイプベースでググってみ
>>286 上の書籍程度は理解しています。
JavaScriptで従来のObject Orientedなプログラムを組むのは、
間違いだと思っていて、無名関数などを使ったECMAScriptならではの
組み方があるのではないかな、と
というわけで、
>>285 さんありがとうございました
今のECMAScriptは普通にクラスあるけど?
289 :
285 :2006/01/21(土) 00:52:58
ラムダとかの高階関数なら関数型言語かな 俺はHaskell覚えてるとこだけど 手続き型はお腹いっぱい
> JavaScriptで従来のObject Orientedなプログラムを組むのは、 > 間違いだと思っていて 勉強しなおしたほうがいいんじゃないか
> 間違いだと思っていて
「奥が深い症候群」に陥りそうな奴だな
奥が深い症候群!出た!奥が深い症候群出た!得意技!奥が深い症候群出た! 奥が深い症候群!これ!奥が深い症候群出たよ〜〜!
× 従来のObject Orientedなプログラムを組むのは、間違いだと思っていて、 ○ 従来のクラスベースOOなプログラムを組むのは、間違いだと思っていて、 では?
WebProgのAjaxスレでJSONの話題が出てるけど おもしろいねコレ
ActionScript3.0まじすげえぞ。 ECMAScript最先端。
ActionScriptのエンジンを他のアプリで使ったりできないの?
アクションスクリプトコンパイラがフリーであるから それ使ってなんとかしろ
もしアクションスクリプトインタプリタっていうのが存在するなら
アプリからエンジンとして使えるような気がするけど。
>>303 アクションスクリプトコンパイラって、もしかして.swfじゃなくて
.exeを生成するの?
ActionScriptの仕様って糞だな
308 :
304 :2006/02/01(水) 23:42:52
dx
309 :
デフォルトの名無しさん :2006/02/02(木) 05:14:47
mtascで開発可能なのはActionScript2.0までだぞ? ActionScript3.0はえらいことになっとる。
mtascで開発可能なのはActionScript2.0までだぞ? ActionScript3.0はえらいことになっとる。
だからなんだ低能が
ネタにマジレスかっこ悪い
ネタにマジレスかっこ悪いレスかっこ悪い
ネタにマジレスかっこ悪いレスかっこ悪いラモスが悪い
321 :
デフォルトの名無しさん :2006/03/02(木) 09:56:12
その場だけじゃなくいろいろ使われるようなオブジェクトって作る? フレームワーク的なモノを作ろうとかいう意図があれば別だけど 普段は、ビルトインのオブジェクトを使うばっかりで、 連想配列以上の使い方をするオブジェクトを作ることがほとんどないんだけど、どう?
322 :
デフォルトの名無しさん :2006/03/02(木) 09:58:16
あと、継承(プロトタイプの設定)とか全然しない。普段する?
>>321 フレームワークと言うか、ライブラリみたいなもの作るかどうかじゃないか?
隠蔽、名前空間がないからアレだけど
>>299 先参照
使い捨てスクリプトみたいに書くなら汎用オブジェクトは当然いらんわな
324 :
デフォルトの名無しさん :2006/03/02(木) 18:24:39
というか、コンストラクタ自体全然書かない。
罵詈針書くね。息を吸うように。
罵詈針書くね。息を吐くように。
327 :
デフォルトの名無しさん :2006/03/04(土) 00:13:04
>>321 俺もそうだな。
大規模な物作るとWebページ重くなると思って。
prototype.jsとかも、dom.jsとか切り分けられたのを必要に応じて読み込んでる。
(だって、HTMLの内容が6kなのに、ページノスクリプトで40kとか読ませられないだろ)
他の環境だと、ライブラリの読み込みっていうのが機能として備わっていないから
(WSHは有る程度出来るか)
育てるのもなんかなって気がするしねぇ。
328 :
デフォルトの名無しさん :2006/03/04(土) 02:34:19
Rhinoで、JavaのStringのインスタンスを、 JavaScriptの普通の文字列オブジェクトにするにはどうすればよいでしょうか。 附属の ScriptingJava.html の最後に違うから気をつけてと書いてあるし、 Javaから取得したらみんなJavaのStringオブジェクトなので、実際ハマりまくりなのですが、 どうやって普通の文字列オブジェクトにすればよいでしょうか。
javaString = new java.lang.String("test"); jsString = String(javaString); javaString.length() jsString.length じゃダメなの?
330 :
328 :2006/03/04(土) 13:14:45
ありがとうございます。 なんか、くだ質以下でしたね…。 でも、その仕様ってどっかに書いてあります?当然すぎて書かれる必要なし?
331 :
329 :2006/03/04(土) 16:40:53
ECMAScriptの仕様とrhino付属のドキュメント、 "Scripting Java"から自明ではないでしょうか。
それは自明とは言わない。
俺こないだスレで答えてる時に思わず「じめぇ」なんて喘いじゃったんだよ。 そしたら「それは自明とは言わない」とか言われてさ。 「もう一回言ってごらん。じゃないとオチンチンいじめてあげないよ?」って。 もうね、じめぇ連呼したよ。 「馬鹿じゃないの?馬鹿じゃないの?」って罵られながらヤられた。 Mならわかると思うけど、正直最高だった。 で、それ以来じめぇプレイがスタンダードになったんだけど、 おかげで彼女のS度が上昇しちゃったみたいでさ、 つい先日「ほら、こういう事されるの大好きでしょ?じめぇ?」なんてナメた口調で言いながら (省略されました…全てを読むにはじめぇ連呼してください)
334 :
329 :2006/03/04(土) 17:52:25
このあんパン、まじウメェ
ぱんすきやねん!
ぱんおいしいねん! だアホ知らんならしゃべんな。口臭い
337 :
デフォルトの名無しさん :2006/03/11(土) 21:44:40
ちょっとスレタイからズレているかもしれないけど質問です Mozillaで使えるJavascriptのメソッド、プロパティの一覧って、何処かで分かりませんかね 昔Netscape社のサイトで英語で見かけた気がするんだけど、消えたのかな?
ツール→DOM Inspectorで逐一見るってのはだめ?
340 :
デフォルトの名無しさん :2006/03/12(日) 04:34:29
>>339 心遣いありがとう…
でも、今探しているのは
window.location
とかのブラウザ独自のプロパティなんだ…
「ないはずはないだろー」
と思いながら探しているんだけど、わからないまま炸裂に迷っていて…
for でプロパティ・メソッド列挙できるのって IE だけなんだっけ?
>>340 > でも、今探しているのは
> window.location
> とかのブラウザ独自のプロパティなんだ…
英語読めない人?
>>339 にあるじゃん…
344 :
340 :2006/03/12(日) 05:36:21
>342 orz …はい、英語苦手な人です。 なんというか、すいませんでした。
> 炸裂に迷っていて… 理解しない
>>341 プロパティが DontEnum 属性を持ってなければどの処理系でも列挙されるはず。
347 :
デフォルトの名無しさん :2006/03/17(金) 09:21:28
基本的なこと聞いていいすか ecmascript って、Array のメソッド少ないし、 まして Hash は Object で擬似的に再現ていう パターンが多いわけですが、なんかめっちゃ 不便じゃないですか? もっと便利なメソッドがほしいんですが、みんな そういうのは自分で書いてるの? 例えば Hash の中に特定の値があるかどうか っつーのを一発で確認したい(Ruby の has_value? みたいなやつ)とか、そういうことない? それとも公開されてるライブラリを探すのが普通?
>>347 API が少ない=不便 という思考なら、不便です。
その考え方だと C なんて物凄く不便ですね。
例えば Hashtable くらいなら大抵のプログラマは自分で簡単に書けるわけですが、
もちろん元からあればそれに越したことはないし、確かに不便かもね。
例えば JavaScript なら、prototype.js という悪名高いライブラリがありますし、
そういうのを利用するのもありだとは思いますが、
ECMAScript に限った公開ライブラリって聞いたことが無い気がします。
>>348 スクリプト言語と C を比較しても意味ないと思いますが…
まぁ少なくともいま求めている機能がないという意味では
不便ですね。
実際には JScript で管理用のツールを書くというのが目的
なので JScript で動くライブラリであればいいんですが、
まぁもうちょっと調べてみます。一から書くという選択肢は、
あくまで管理用のツールですからできればパスしたいです。
> 例えば JavaScript なら、prototype.js という悪名高いライブラリがありますし、 どういう所が悪名高いのか具体的に教えてください
>>347 > 例えば Hash の中に特定の値があるかどうかっつーのを
> 一発で確認したい(Ruby の has_value?みたいなやつ)とか、
typeof(a[key]) != 'undefined'
>>350 最近JavaScriptスレで的確な突込みがありました。スレ違いなのでそちらでどうぞ
スレ違いだからってリンクくらい示してくださってもよろしくてよ。
>>351 それは key であって value じゃないように見えるんだが
>>347 (=
>>354 ?)
つうか、foreachとかhasとかくらい、
数行で書いてArray.prorotypeに追加すりゃいいじゃん。
ってそれがいやなのか?
64bitに対応したトリップ検索プログラムありますか? TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
// ↑のようなのがスレが落ちる原因になるんだよね
Prototype.jsなんてものがあったのか
>>361 あー、中身ひどいから特に気にしなくていいよそれ。
prototype.jsを見て変数名等に$が使えるのを初めて知った。
document.getElementByIdの置き換えメソッドだっけか 目新しさのほかに、意味論的ネーミングセンスに脱帽したよ nameやtagNameはそのままなんかな?
いや Ruby ですから
366 :
デフォルトの名無しさん :2006/03/19(日) 22:47:11
Perl風に変数名の前に$付けたり BASIC風に文字列変数の後に$付けたりの ようにできるわけだな。
>>366 $は識別子の先頭にしかつけられない
Identifier ::
ReservedWord でない IdentifierName
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$ ← ココ
_
\ UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
\ UnicodeEscapeSequence
>>367 「嘘!?」と思ったら嘘じゃないか。
IndentifierPartにもIndentifierStartが含まれとるだろ。
ネーミングセンスが悪すぎると思う。> IdentifierStart
IdentifierStartは、識別子の開始文字に使える文字ってことで、 開始にしか来てはいけないと言うことじゃないよね。
>367の介錯だと_も先頭にしか付けられないぞ
>>367 IdentifierStart ::
...
\ UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
...
\ UnicodeEscapeSequence
ぱっと見て「ヘタだなぁ」と思う定義
374 :
372 :2006/03/21(火) 19:25:00
すいません。 ちょっとしたミスを、鬼の首を取ったかのように騒いでしまった こんなバカな自分では、良い例を示すことが出来ませんでした。 本当に申し訳ありませんでした。
375 :
デフォルトの名無しさん :2006/03/22(水) 00:11:09
ECMAScriptの実装をオープンソースでやってるのってどんなのがありますか?
RhinoはJava6で標準入りしたから大出世だな これにより名実ともにJavaScriptになった
378 :
375 :2006/03/22(水) 03:00:27
379 :
375 :2006/03/22(水) 21:26:27
380 :
デフォルトの名無しさん :2006/03/24(金) 09:01:53
ECMAScriptの仕様だと function () { 〜 }(); とか (function () { 〜 })(); ってパースエラー出るべき?
>>376 できるだけ幅広いプラットフォームで動いて
かつ継続してメンテされてるものっていうと
結局 SpiderMonkey と Rhino くらいしかないなぁ
haXe
http://haxe.org/ は面白いと思うけど、実行環境はちょっと限られるな
flash player か Apache module になるみたい
Windows バイナリもあるからヒトバシラーの出現期待
(function () { 〜 })(); の方はエラーにならない
関数の内外でスコープが違うからそれを利用できることかな
なるほど。変数名のバッティングを避けたりとか、そんな感じですか。
つか関数名考えるのメンドいじゃん
JavaScriptは単純ブロックがないから cとかだと { int i; ほげほげ } でいいんだけどね
暗黙のグローバル宣言回避にも使えるな
>>389 なるほど
D:\>type foo.js
(function() { a = 123; print(a); })();
D:\>jsc /nologo foo.js
foo.js(1,15) : error JS1135: 変数 'a' が宣言されていません。
D:\>
変数を宣言しないで使えるように /fast- 付けるべきだったか D:\>jsc /nologo /fast- foo.js foo.js(1,15) : warning JS1135: 変数 'a' が宣言されていません。
>>391 そのjscってのが何かしらんが、
ECMAScriptはオプションで言語仕様が変わるのか?VBじゃあるまいし。
.NET Frameworkがインストールされていれば(SDKがインストールされてなくても) 通常↓にjscがある。 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\jsc.exe 旧バージョンは C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\jsc.exe C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\jsc.exe
>>392 はぁ?そのVBってのはあまり知らんが、
VBはオプションで言語仕様が変わるのか?jscじゃあるまいし。
>>393 MSの製品かい
それってECMAScriptの仕様に準拠してる保証ってあったりする?
深く考えないと幸せになれる壷みたいな製品です。
再帰とかのために、関数自身を表すselfみたいなキーワード欲しいな。 でないと無名関数で再帰ができない。 (function (n) { return n <= 1 ? 1 : n * self(n - 1); })(5); // 即席で5の階乗を計算
無名関数を再帰するテクニックはどこかで見かけた気がする
arguments.callee か
ECMAScriptだと初期の規格ではあったのに クラス化を導入してから無かったことにされたな<再起コール プログラムを組む上でよろしくない副作用があるのかも
>>398-400 ECMAScriptは無名関数に名前を付けられるよ
(function func(n) { return n<=1 ? 1 : n*func(n-1) } )(5);
スコープは関数の中だけだったはず
名前が付いてたら無名ではないような
>>404 いやその通りだが、仮の名前という意味合いなんだろうか…
一般的に名前付き無名関数と呼ばれている奴ってこれだよね
406 :
デフォルトの名無しさん :2006/03/25(土) 16:59:12
題名のない音楽会のようなものか
寒いよ
>>403 名前つけるならこういうふうに書きたいです。
function func(n) { return n<=1 ? 1 : n*func(n-1) }
fact(5);
うん
無名関数という物を、分かってないな。
>>405 一般的に「名前付き無名関数」と呼ばれるものなんてない。(あったらネタでしょ・・・)
ただ関数「式」に名前をつけるのは、たしかに再帰に使うのが目的らしいね(ECMA-2.6.2 13のNoteのとこ)。
function func(n) { 〜 } // 関数「宣言」
・・・ 「func」は外のスコープに影響あり
(function func(n) { 〜 }) // 関数「式」
・・・ 「func」は外のスコープに影響なし
>>403 の
> スコープは関数の中だけだったはず
ってのが、funcという識別子が関数内のスコープになるって意味ならおk。
ただ話の流れは「宣言」か「式」かを問題にしてるわけではなくて、無名関数(名前のない関数)でどう再帰を扱うかってとこだったわけで、名前をつけた時点で意味ないじゃんって話。
話はでてるけど誰もレスしてないからスルーされてるのかとおもた
415 :
デフォルトの名無しさん :2006/03/26(日) 09:31:41
function Y(func) { return (function (self) { return func(function () { return self(self).apply(this, arguments); }); })(function (self) { return func(function () { return self(self).apply(this, arguments); }); }); } Y(function (self) { return function (n) { return n <= 1 ? 1 : n * self(n - 1); } })(5); ECMAScript的には禿しく実用性低そうです。 再帰のためのキーワードやプロパティがあったほうがまし。
関数式に名前つければいいじゃない
まあね。 ただ、中で再帰する関数オブジェクトをさっと作ってreturnしたり引数として渡したり等をするときに、名前つけずにすんだら楽なのにと思うことはある。 別に、死んでも名前をつけたくないとか言ってるわけじゃない。
再帰は言語仕様で実現可能なことだから、正直どうでもいいな
>>415 のY関数が解読できません orz
self(self).apply のあたりの意味を教えてもらえませんか?
arguments.callee で FA じゃないのか?
>>420 なんか
>>401 に無かったことにされたって書いてあるから、最新バージョンのECMAScriptでどっちが正しいのかわからん。
誰かソースおねがい
JScript .NETにあるにはあっても /fast- だし。
そもそも arguments が /fast- だべさ
名前つき無名関数は日本語として意味的におかしいが、一般的な言い方。 lambdaを無名関数と略す人にとっては、named lambdaは名前つき無名関数となる。
>>425 lambda → ラムダ ≒ 関数式
anonymous function → 無名関数
では?
Lispの世界だとlabelって言うよ。 ラムダ式で再帰書くために使う名前。
>>419 無理やり名前つけて冗長に書くとこんな感じか
function Y(_wrapper) {
function self(_self) {
function myself() {
var _myfunc = _self(_self);
return _myfunc.apply(this, arguments)
}
return _wrapper(myself);
}
return self(self);
}
function wrapper(_myself) {
function myfunc(n) {
return n <= 1 ? 1 : n * _myself(n - 1);
}
return myfunc;
}
var _myfunc = Y(wrapper);
_myfunc(5);
Y(wrapper)はself(self)を返し、self(self)はwrapper(myself)を返し、wrapper(myself)はmyfuncを返す。
結果的にY(wrapper)はmyfuncを返す。
で、再帰するときmyself()のなかでmyfunc.apply(this, arguments)してるから、間接的に再帰が実現する。
まーこのコードが使用されることはありえないと思うけどねー
今更だが嫌がらせのようなスレタイのつけ方だな。
>>430 前スレを見れば理由が解る。
JavaScriptをスレタイに入れたらどうなるか。
ECMAScript(ECMA262-3rd)のJavaCC用文法ファイルを作ってみたが、 初めて文法を書いたので正しいのかどうか自信がもてない。
2つのCFGの等価性を完全に決定するアルゴリズムは存在しないことが証明されてるからね。 いろんな入力で試行錯誤するしか道はないかも。 つーかECMAの仕様に書かれてるBNFってすでにLALR(1)だからそのまま書けば何の心配もないんじゃないの? ってそんな単純な話じゃないのか・・・
LALRなんですか。 JavaCCはLL(k)だから、そのまま書いたら色々な場所でコンフリクトが起きてしまって。
436 :
434 :2006/03/31(金) 22:32:29
>>435 あぁ、JavaCCってLLだったのか。
てっきりLALRあたりかと思ってた。スマソ。
ここはJFlex+cupで。
Rhinoで、-opt -1 か -opt -2 で末尾再帰が最適化されるちゅうからやってみた。 が、全然効かない。 と思ったら、再帰の呼び出し文がreturn文でないとダメらしい。 return文にしたら無限に再帰できた。
あ、情報元の方ね。コード貰ってもしゃーない
>>438 そもそも「再帰の呼び出し文がreturn文」じゃないと末尾再帰と言わないのでは?
>>440 末尾呼び出しの除去(⊃再帰最適化)については「継続 rhino」で具具ってくれ
"return "が要るってのは俺実験。
>>441 そうなん?返り値なし関数だったんで、ただ"return "の7文字追加しただけの違いなんだけど。
あたりまえ
なぜ当たり前なの?
関数末尾に return 文がない場合、関数は値 undefined を返しますよね。 つまり再帰呼び出しから帰ってきて、undefined を返す必要がありますよね。 それが再帰呼び出しの継続になっています、って説明でよろしいですか?
アホで済まんけど、 それってreturnがあっても同じじゃないの?
おれは説明できるほど極めてないけど... function f() { if (hoge) { return } f() } は、次のものと等価 function f() { if (hoge) { return } unused_return_value = f() return undefined } 関数の返り値を受け取り、評価しないといけないので、 関数呼び出しのスタックを省略できない。だと思う。
まあ、処理系がそこまでやってくれないというだけでしょ? Schemeみたいに仕様で末尾ジャンプが決まっているわけでもないし。
言語仕様の制限じゃないのか。 戻り値がないことになっている関数でundefined以外の戻り値をとれたらまずいだろう。 C等のように呼び側のコンパイル時に静的にチェックできるなら 関数側はセマンティクスを破っても構わんだろうが、動的にチェックするしかない 言語ではそうはいかんのじゃないか。
450 :
デフォルトの名無しさん :2006/04/20(木) 21:43:30
単に一行づつ解釈してるから末尾かどうか、その行終って次読むまで分からないんじゃ?
BASICじゃあるまいし……
>>449 末尾再帰だけなら、
> 戻り値がないことになっている関数でundefined以外の戻り値をとれたらまずいだろう。
は起きないんじゃない? 末尾ジャンプがあると、
function f() {
g() // returnがないので、undefinedを返す
}
int g () {
return 1;
}
を末尾ジャンプしちゃうと、1が返っちゃう。
何が言いたいのか不明
>>452 んーいや、f の中の g() は末尾呼び出しじゃないです。
関数は必ず値を返し、
関数から抜けるところで return が記述されていない場合については
return undefined; が省略されている、
という風に考えた方がすっきりすると思います。
そう考えればこの場合について末尾呼び出しにならないのが判るかと思います。
>>454 >>452 は同じ事を言ってる気がするが。
要するに、呼び出しから帰ってきたあと、
スタックに誰かが勝手に返値を置いちゃってるかも知れないから、
それをundefinedで上書きしてやらなくちゃいけない、って事では?
456 :
452 :2006/04/22(土) 09:00:22
一言で言うと、帰り値の型が違うし、末尾でもない。
458 :
デフォルトの名無しさん :2006/05/23(火) 23:19:26
誰かjsdocの普及のためにドキュメントの邦訳とかやってくれないかな 俺がやると中学生レベルにしかならない…
なんでPerlなんだよ。 JSでやれよJSで…ってファイル読む事すらできねえw
461 :
デフォルトの名無しさん :2006/05/24(水) 02:47:39
>460 気持ちはわかる 自分はちょっと触って分かったらすぐにほおってしまったんだけど 人のソース読んでいるとちょくちょく見かけるんだよ それじゃあ、解説書いておおいに広めるのもありかな…と
Perlはイヤだし(俺が解んないだけだが)、バリバリのクラス指向だし、ちょっとな…。 Ecmaはなんで、最低限の標準ライブラリを作らないんだろ。 必須の標準じゃなくてもオプションでもいいのに。
せめてincludeみたいな仕組みが欲しい
>>462 ECMAは持ち込まれた規格を承認するだけの小さな組織です。
Netscape社が崩壊して、W3Cがweb専門なのが、
ライブラリがいつまでも増えない理由かと。
そんなわけで自分はGroovyに浮気始めてしまった...
RhinoならFile IOできるでないの
JScriptでもできるべ。
>>464 > ECMAは持ち込まれた規格を承認するだけの小さな組織です。
よし。持ち込め。頼んだ。
includeだってできるが特定実装固有じゃなくて、標準で、って話だろ。 標準がないから、Web以外のツールが出てこないんじゃないか?
4th Edition はもう標準化されたんじゃないの?
たとえば、 var f = new File("data.txt","r"); var str; while ((str = f.readLine()) != null){ //ごにょごにょ } とかできたらいいなぁって話?
JScriptでできる
jcp.orgのJSRには、groovyもbeanshellもあるよね。 javascriptは1.6からJREに含まれるから、 JVMは結構たくさんのscript言語のplatformになるねえ。
473 :
デフォルトの名無しさん :2006/05/31(水) 16:05:34
そんな独自の勝手言語なんていらね IronPythonが羨ましい
>>472 こいつらはクラスライブラリが共通だけど、
言語が違うってちょっと面白いアプローチだね。
475 :
デフォルトの名無しさん :2006/06/01(木) 19:55:19
Web製作板のスレッドにも書いたんだが、連想配列欲しいのって俺だけ?
はい?普通にサポートされてるじゃん。 this["hoge"] = mogera;
てかスクリプト専用のセキュリティマネージャを設定できなきゃ怖くてマクロに使えないよ 専用セキュリティマネージャが組み込まれるなら、ゲームライブラリに実装したい
>>476 キーが"constructor"とか"__proto__"とかだったらおかしなことになる。
それに、キーに文字列しかとれない。
なんだこのヘタな煽りは。
>>479 スクリプト書く時に決まってたらいいんだが、そうもいかない。
他からデータを取ってきて連想配列に入れておく、ということをするときに困る
>>478 ,481
>キーに文字列しかとれない。
配列のキーは実数、関数、真偽値、オブジェクト、なんでも使えないか?
>他からデータを取ってきて連想配列に入れておく、ということをするときに困る
キーが文字列の時は適当なaffixをつければ済む話じゃないのか?
>>482 マジで?
ar = [];
a = new Object();
b = new Object();
ar[a] = 'AAA';
ar[b] = 'BBB';
alert(ar[a]); // => BBB
alert(ar[b]); // => BBB
ってなったんだが(Firefox)
>適当なaffix
別にいいんだが、それっていわゆるバッドノウハウじゃね?
>>483 文字列型や文字列オブジェクト以外がキーになった場合文字列化されて比較されるからそうなる.
var hash = new Object()
var objKey = new Object()
hash[objKey] = 'aaa'
alert(hash[objKey]) // => 'aaa'
hash["[object Object]"] = 'bbb'
alert(hash["[object Object]"]) // => 'bbb'
alert(hash[objKey]) // => 'bbb'
そういうわけでオブジェクトのプロパティは厳密な連想配列の代りにはならない.
>>484 >文字列型や文字列オブジェクト以外がキーになった場合文字列化されて比較される
はい、そういう意味で「キーに文字列しかとれない」と書いたんです。
486 :
484 :2006/06/02(金) 11:13:52
他にもユーザが Object.prototype にメソッド追加した場合に必ずEmumerableなプロパティ になるので for(key in hash){ alert(hash[key])} みたいに回した場合にメソッドも表示される とかの問題もある… オブジェクトは簡易的な連想配列としてしか使えない.そんなわけでブラウザ用 の JavaScript ライブラリとかだとわざわざ Hash オブジェクトが用意されていたりする.
>>484 ,486
うげ、そうだったのか、しらんかったよ。
>>483 すまん、自分で試したときは問題なく使えると思ったのだが、
単にオブジェクトといっても"[object]"と"[object Object]"で
キーが違っていたのでたまたまうまくいっただけだった。
元の
>>475 に戻ると
Hashオブジェクトにもoperator[]が使いたいって事なのかな?
Javaみたいにcollection objectにfor文使えるようになったり。
>>488 Hashオブジェクトってprototype.jsの?
いや、Arrayみたいに気軽に使えたらなって([]使えたらさらにいいけど)。
文字列ハッシュで探索するのと自前二分木探索とではどっちが早くなりますか? 主にWebブラウザの実装系あたりで試された方いらしたら教えてください。
>>491 単にビルトインオブジェクトにあったらいいなという話です。
494 :
デフォルトの名無しさん :2006/06/04(日) 02:02:01
>>493 設定してないのに(変な)値が返ってくる
>>495 なんでそんなこと言うんですか><
>>496 hash = new Object(); //ハッシュのつもり
key = '__proto__';
foo = hash[key];
普通のHashなら、fooはnullとかundefinedになるはずなのに…
>498 foo = hash.__proto__ と同義になるんだよな確か
javascriptでは、 object.属性名とobject['属性名']が同じだからね。 JavaのELも。
js> hash = new Object(); [object Object] js> key = '__proto__'; __proto__ js> foo = hash[key]; js> typeof(foo); undefined
>>501 __proto__ってECMA-262の規格にはないのね。
Firefoxでしか動かしてないから知らんかったw
constructorとかtoStringならどうよ
Object.getOwnProperty = function (obj, key) { if (obj.hasOwnProperty(key)) return obj[key]; }
js> hash = new Object(); [object Object] js> var keys = ['_proto_', 'toString', 'constructor']; js> for (i in keys) { key = keys[i]; print ('hash["' + key + '"] is ' + typeof(hash[key])); } hash["_proto_"] is undefined hash["toString"] is function hash["constructor"] is function
そういやXMLの構文埋め込みってこっちが先立ったけど Java7のが早く普及しそうな気がしないでもないw
this って動的スコープなのね。
>>506 まあ、SEやEE版JVMはjavascript込みだから、
処理系の数は常に同じくらい。(携帯やJavaCardを抜くと)
後はweb以外で使って貰えるかどうか。
509 :
デフォルトの名無しさん :2006/06/18(日) 03:58:36
prototype.jsで function foo( request ){ } new Ajax.Request( "ファイル名",{ method:'get',onComplete:foo }); と書いたんだけど、IE、Mozillaだと動いて、Operaだと動かないんだけど だれか対処法って知っている…かな?
510 :
509 :2006/06/18(日) 04:01:58
ああ、書き足りないかもしれないけど Opera(8.0)だと、foo関数が呼ばれて、実行されてくれないんです 代りに new Ajax.Request( "ファイル名",{ method:'get',onComplete:foo() }); と書くと呼ばれてくれるんだけど、今度は、引数:request に何も代入されない…
511 :
509 :2006/06/18(日) 10:03:44
…ゴメン Operaバージョンアップしたら無事動いた んー、なんか怖いけど一応解決したと言うことで(汗
Operaなんかムシムシw
>>512 糞はWeb板でも逝け。キリ番のくせに。
>>513 糞とか言ってるお前、生産効率悪そう...
生産効率が幾ら良くたって使われなかったら何の意味も無い
516 :
デフォルトの名無しさん :2006/07/05(水) 01:38:06
Java6からRhino外されちゃうの?
他スレで見た。
520 :
269 :2006/07/13(木) 12:41:27
>>520 サンクス。俺のような文句はたれるが自分からは行動しない人間にとってあんたは仏だ。
で一通り読んでみたんだがブラウザ上のJavaScriptに偏りすぎてるな。
ブラウザ上で実行する場合に焦点を当てるのはかまわんが
「JavaScriptというひとつの完結したプログラミング言語ではなく、
HTMLと組み合わさって初めて有効となるプログラミング言語です。」
というのは明らかに言いすぎだと思うぞ。
WSHとかRhinoとかの立つ瀬がなくなるじゃないか。
「オペレータと表現」という題が意味不明。
「演算子」で統一しないのかという以前に内容とあってない。
> i = i+1;
> i += 1;
> i++;
厳密に言えばiが数値のときi = i+1と同じ意味なのは++iのほうだがな。
なんか個人的にはdocument.writeで結果を出力する方法を教えたら
後はCore JavaScript 1.5 Guideを訳して与えたほうが
いいような気もするんだがまあがんばってくれ。
ttp://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide
>>522 > 厳密に言えばiが数値のときi = i+1と同じ意味なのは++iのほうだがな。
式じゃなくて文だからいいんじゃないの?
まあ演算子の章に書いてあるんだけど…
ECMAScriptの仕様書を訳すのもいいと思う。 いくらwikiという道具があっても仕様書をちゃんと読んでない、個人の変な思い込みを いちいち修正してくれる暇人はそういないぞ。 少なくとも俺はこんなのを直したくはない(他にも盛りだくさんだがとりあえず基本スタイルより抜粋) > * ソースコードは他のプログラムと同様に上から下の方向へと実行される。 > * 必ず一行ごとの終わりに「;」(セミコロン)をつけなければならない。 > * 変数宣言に型は必要ない。var 変数名;で行う。しかし、これは型変換が自由なのであって、数値や文字、配列の区別が無いわけではない。 > * イベントに処理(主に関数)を指定することによって、イベント発生時にその処理が行われる。 > * ソースコードはHTMLファイル内に書き込むか、外部ファイル(*.js)をロードすることができる。 はっきり言って駄目な点を挙げたらきりがないので、心機一転翻訳で頑張ってほしい。 行動力だけは認めるので。
526 :
520 :2006/07/14(金) 02:28:33
とりあえすはまず… 「多様なご意見、ありがとうございます(ぺこり」 >WSHとかRhinoとかの立つ瀬がなくなるじゃないか。 今のところHelloWorld〜関数あたりまでが自分の書いたところで、他は以前から書き残してあった所なんだけど …やっぱ、勝手に書き換えるのは悪いよなぁ と控えていたのですが、一応オリジナルも手元に保存しておいて、書いた人から文句が出れば元に戻す事で勘弁してもらおうかなぁ ここからは良いわけじみているかな > 厳密に言えばiが数値のときi = i+1と同じ意味なのは++iのほうだがな。 間違いは書けないですよね、是非直させていただきます。 > Array はオブジェクト型だろう… うん吊ってくる、書いてるとき気にしていませんでしたorz。
旧い版を復元する必要が出たら、履歴からできるでしょ?
function () { print("a"); }(); こういう風に名前を付けないで実行したいんだけどできないかな。
(function () { print("a"); })();
530 :
デフォルトの名無しさん :2006/07/14(金) 14:21:59
(function () { print("a"); }()); これが動くのはどうしてなんだろう
("a")
("p")
535 :
デフォルトの名無しさん :2006/07/14(金) 18:58:02
('A')
537 :
520 :2006/07/15(土) 22:35:47
JavaScript講座なんだけど、関数あたりまで書いたとして、その次あたりで ・三項演算子等の文法面を補足する ・オブジェクト指向の「さわり」を教える …どっちが良いだろ まぁ、ハッシュと関数オブジェクトをごちゃまぜにしたトリッキーなコードを最後に持っていくのが目標…
>>537 スタンスとかターゲットによる。
チュートリアル的要素を持った入門書寄りにするなら、そこで三項演算子なんて
教えてどうするっていう話。
逆にリファレンス的にじっくり語るつもりなら、章立てをしっかりして
類似項目を近づけた方がいいだろうから、オブジェクトは後回しになるかな。
とりあえず迷うなら、下書き程度にでも両方書いてみれば?
直接干渉する内容じゃないし、並べてみれば自ずと順序が見えてくると思う。
539 :
デフォルトの名無しさん :2006/07/31(月) 10:55:12
NJS使ってるんだが $ js -e "print(eval('{foo:1}'))" undefined $ js -e "print(eval('({foo:1})'))" [object Object] この挙動はどういうことなの?
>>539 そりゃおかしいな。
上の例は"1"が表示されるべきだ。
下の例はあってるよ。
>>540 上は1が正しいのか。
よく分からないから詳しくお願いします。
542 :
540 :2006/07/31(月) 13:43:02
>>539 ttp://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/を読め 。
{foo:1}
という文字列はevalによってProgramとして解析される。
そしてその文脈ではこの文字列はExpressionStatement "1;"
(セミコロンは自動挿入による)を含むLabelledStatementを含むBlockとして評価される。
この場合、evalの返り値はProgramの評価結果であり、
Programの評価結果はBlockの評価結果であり、
Blockの評価結果はLabelledStatementの評価結果であり、
LabelledStatementの評価結果はExpressionStatementの評価結果であり、
ExpressionStatementの評価結果は1(正確にはCompletion型(normal, 1, empty))なので
"1"が表示されるべきである。
……と思ったんだがLabelledStatementに対する
アルゴリズムがステップリストとしては載ってないな。
「L を Identifier と等しいとして Statement 評価の結果が (break, V, L)」
の場合以外はStatementの評価結果がそのまま
LabelledStatementの評価結果になるということでいいんだよな?
オブジェクトリテラルじゃなくブロックになるのか。 丁寧に説明してくれて感謝です。
rhino で試したところそれぞれ 1 と [object Object] になるね
セミコロンの自動挿入で思い出したんだが
以前Web政策板のJavaScriptスレで
function f() {} // FunctionBodyが空
は許されないんじゃないかという話があってさ。
ttp://user.ftth100.com/mirrorhenkan/javascript/read.php/1120728555/n610-618 そこでは結局セミコロンの自動挿入によって空文になるから
OKじゃないかってことで話が終わったんだが、
改めて仕様書読み直してみると
セミコロンの挿入によって空文ができる場合は
セミコロンは挿入されないってあるんだよね。
ということはやっぱりFunctionBodyが空なのはエラーじゃないの?
これは仕様書のミスなのかそれとも仕様としては空なのは
いけないけど実装が気を利かせてエラーにしてないだけなのか。
仕様書だと確かに空はダメっぽいね でもECMA-262 が出る前から function() {} って書き方は使われてたからなぁ
548 :
デフォルトの名無しさん :2006/08/09(水) 23:41:02
ECMA-262 第3版に8進数のリテラルって無いのか
SpiderMonkey1.5で日本語処理やってみたいんですけど、 普通にビルドして普通に使うだけだと print("あ".length); //=> 3 となります(ソースはUTF8)。 バイト単位でなく、文字単位で処理することはできるでしょうか? ソースの関数名を見るとutf8は扱えそうなんですが。 レベルの低い質問で恐縮です。 LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 js -f test.js とはやってみましたが、変わらずです。
たまーに、このすれで連想配列について話題が出るけど、 JScript なら、new ActiveXObject("Scripting.Dictionary"); で連想配列使えるよね。
わざわざ ActiveXObject 使う意味ってあるのか?
JScript でファイルの読み書きをしようと思ったら、ActiveX を使わざるを得ないし。 なら、ActiveX 使ってどんどん便利にしていけばいいべ。 Dictionary で連想配列や、DynaCall/DynaCallWrapper で WinAPI にアクセスするとか。
ActiveXObject("Scripting.Dictionary")を使うまでもないのでは
までもない。
Itemsメソッドを使いたいならScripting.Dictionaryを使うかも。
連想配列で Items 使う利点……?
557 :
デフォルトの名無しさん :2006/08/25(金) 12:22:20
JSON っていうか、ECMAScript の仕様上↓の文は有効ですか? var json = { "multiline" : " 改行付き テキストデータ " };
var json = { "multiline" : " \n\ 改行付き\n\ テキストデータ\n\ " }; なら有効。ただし行末の\の直後で改行すること。
>>558 嘘はよくない。ECMAScriptの仕様上その文は無効だぞ。
まあJavaScriptでもJScriptでも有効だけど。
>>549 今更だが、SpiderMonkey 付属の js shell だと
Unicode 対応 API を使ってないのでダメ。
JS_CompileUCScript, JS_EvaluateUCScript を使うように直せばいいが、
対応してるのは UTF-16(LE) なので
UTF-8 への変換関数も自前で用意する必要がある。
>>561 ありがとうございます。
ちょっと自分の技量を超えますね。
Zaurus向けにコンパイルしたのですが、
試作、学習用途のみで実用はしないので、あきらめることにします。
Blogに転載させてくださいね。
563 :
デフォルトの名無しさん :2006/09/16(土) 19:09:42
if (obj.foo) obj.foo(); else obj.bar(); ってしたいときに、 (obj.foo || obj.bar)(); ってするのは正しいの? (obj.foo || obj.bar) が評価されるときGetValueが呼び出されているから Reference型にはならず、呼び出すときにthisがnullになってしまって正しく動かない。 と仕様からは読み取ったんだが、いくつかの処理系では最初のと同じように動いてる
仕様に正しくないと書いてあるなら、正しくないよ。
>>564 俺の解釈が間違ってるんじゃないかと思って聞いてみた
>>563 thisはnullじゃなくてそのときのグローバルコンテクストになるんじゃないの。
正しくないという言い方は変な感じがするが、同義にはならないね。
ところで
> いくつかの処理系では最初のと同じように動いてる
っていう変な実装はどれ?
Fxだとそうなるな
ECMAScript4では、(obj.foo || obj.bar)()は狙いどおりの動作をする
>>568 狙い通りっていうのはthisがobjになるということか?
すまんがそのECMAScript4ではというのが書かれているソースを教えてくれ。
ぐぐれや
俺の証拠はお前が探せってか。 せめてどういうキーワードでぐぐれば先頭近くに出てくるか示すべきでは。
それが人にモノを尋ねる態度か? 敬語が使えるようになってから出直してこい。
書きかけで失敬。 …とここまで書いて気づいた。ひょっとして class Clazz() { function foo() {...} function bar() {...} } var obj = new Clazz(); という場合のことを言ってる? それだったら確かにthisはobjになる罠。
再び失敬。classの識別子の後に()はいらなかったな。
そうでしょ ブラウザオブジェクト関連のネタを語ってもしょうがないし
>>578 乙です
ECMAScript4の話も普通にいいかと
ECMAScript4ってごちゃごちゃした感じでわかりにくくなりそうだなあ。
ECMAScript4の名前空間について話さないかね? ECMAScript4では、メソッドの可視(public, private, internal)も名前空間で実装されるらしい。
C++の名前空間と似てるような違うような……。 Cの#defineと#ifdefみたいな使い方をすればいいのかな?
585 :
デフォルトの名無しさん :2006/09/19(火) 16:51:11
>>583 これってselector namespaceってやつ?
>>584 C++の名前空間とは全然異なるよ
>>585 そう。
C++の名前空間に相当するのはパッケージでしょ。
587 :
デフォルトの名無しさん :2006/10/07(土) 21:42:41
ひつもんです。 EcmaScriptというかDOMのネタかもしれないけど、 Opera9使ってるんでとりあえずここに書かせてください。 Opera9のDOM+EcmaScriptでクリップボードを扱う事ってできますか? やりたい事は簡単で表示中のウェブページのいろんな情報を調べて クリップボードにコピーしたいだけなんです。 ブックマークレットとかで。 クリップボード弄るのはセキュリティの問題があるので多分できないように なっていると思うんだけど無理無理そうしたい場合はどうすればいいですかね? あと、ついでに同様のネタでローカルファイルを弄ったりとかできないですか? これもできないところを無理無理やりたい場合はどうすればいいですかね? よろしくお願いします。
無理無理が無駄無駄に見えた
ムリムリってなんだよ。無理矢理だろうが。 無理矢理出来たらセキュリティも糞もないだろ。
>>587 「JavaScript Flash クリップボード」でググってみると幸せになれるかもしれない。
それ以上はスレまたは板違いだからそれに見合ったところでどうぞ。
__proto__ や __parent__ ってのはFirefoxオンリーですか。それとも他の実装でも使えますか。 手元にFirefoxしかないんで調べられない。だれか教えて。
FirefoxっていうかSpiderMonkeyな。 Rhinoも限定した形でサポートしているっぽい。 KJS、JavaScriptCoreは__proto__のみサポートしてるっぽい。
>>591 とりあえず ECMAScript 3rd の規格外なので期待しないほうがいいよ
w3.orgが主導権発揮してくれないかなあ。
W3Cいったら開発スピード落ちそうな気がする。なんとなくだけど。
XLinkは何故用無しになったか思い出せ
jcp.orgなんて狂ったようなスピードで 新たなクラスライブラリやフレームワークを加えてるよな。 提案権、タイムリミットをうまく設定するとうまく運びそうだ。
>>597 groovyのJSRは狂ったように止まってるがな。
単にやる奴のやる気の問題じゃないのか?
秩序だって進んでるよ、groovyは。 Beanshellの方はもうちょっと速く出来る気がするけど、 "Dynamic Scripting Language"が通ってもうすぐでしょう。
だからその言語規格の方が、秩序だって進んでるって。 こんなに秩序だって進むのは言語規格では珍しい。
603 :
デフォルトの名無しさん :2006/10/10(火) 20:21:46
>>590 > 「JavaScript Flash クリップボード」でググってみると
それはいわゆる脆弱性をりようするつーわけですか?
そういうのはあんましやりたくないです。
クロスドメインでなければというかローカル限定なら
クリップ板だろうがファイルだろうが安全じゃないかと思うんですが?
それでも駄目何ですかね?
ECMAScりptスレではW3C DOMとかは無視で
ジェネリックなオブジェクトを対象としているんですか?
むしろウェブブラウザは無視なんだと思うけど。
このスレタイで紛れ込んできた根性はすごいが、
>>2 を嫁。
606 :
デフォルトの名無しさん :2006/10/11(水) 19:56:23
じゃ、参考のためにお尋ねしますが、 皆さんはどんな処理系を? ライブラリは? どのような利用目的で?
608 :
606 :2006/10/11(水) 20:00:41
やっぱ答えなくていいや。 組み込み用途で一切合切ECMASCRIPTを使う積もりないし。 DOM+ECMASCIRPTか OPERA9+ECMASCRIPTスレ捜してきます。 無いと思うけど。
ム板にくるのがそもそもの間違い
もういないだろうけど、 Rhinoでちょっとしたテストとか自動化スクリプト書いてるよ。 今度出るJava6からRhinoが標準搭載だよ。
もうJavaいらないんじゃね?VMとスクリプト言語だけでいいんじゃね?
そういや確かに Mozilla+XULならム板にもスレがあるけどOpera+ECMAのスレは無いんだな。
XULは必ずしもWebじゃないだろ。 まあOperaもウィジェットあるけど、まさかそのこと?
俺は最初からそのことだと思ってたんだけど、ちゃうの?
Operaのウィジェットって 設定用XMLが必要なのとクロスドメインXMLHttpRequest可能なくらいで あとは普通のWEBページ(HTML)と同じだから 専用スレが必要だとは思えないんだが
あえて立てるならGoogle WidgetとかYahoo Widgetとかと合わせてウィジェット総合スレか? Yahoo Widgetはもうスレあるみたいだが。
Dashboard WidgetとかMicrosoft Gadgetsは?
618 :
606 :2006/10/14(土) 18:15:47
剥いたって何? 別にオペラでミゼットとか作るつもり有りませんが? 詳しく説明しても迷惑かもしれませんが一応説明しときますと クロスプラットホームのオペラ用ツールが欲しかっただけです。 Operaに不足してる機能を補うようなヤツね。 そんで特にウェブパネルにできるようなヤツ。 その手のヤツで少しだけあるのは殆どがウェブサーバ型になってる けどそれは嫌なんで、なんとかしてみたかっただけです。
>>617 Dashboardスレは新Mac板にある。
>>593 ,594
遅れたけど、どうもありがとう。
個人的に、__proto__と__parent__はとても便利なのでほかの処理系でもサポートしてほしいなあ。
つか、__proto__はプロトタイプ型なら自然な機能なんじゃないかと思う。
ひとりごとすまん。
4thに期待
おまえら、ECMAScript/JavaScriptでUnitTestはどうしてますか?
jsunit
624 :
デフォルトの名無しさん :2006/10/27(金) 14:17:17
UnitTestって何ですか?
今年の春先にIANAにMedia Typeが登録されてたんだね。 遅まきながら、ようやくtext/javascriptが公認されたわけだ。
すでにtext/javascriptは非推奨な罠
普通に<script type="text/javascript">してるけど…
登録されていきなりobsolete
>>627 実は今までそれ、違反だったんだよ
他に方法がないから、みんなやってたけど
http://www.rfc-editor.org/rfc/rfc4329.txt Use of the "text" top-level type for this kind of content is known to
be problematic. This document thus defines text/javascript and text/
ecmascript but marks them as "obsolete". Use of experimental and
unregistered media types, as listed in part above, is discouraged.
The media types,
* application/javascript
* application/ecmascript
which are also defined in this document, are intended for common use
and should be used instead.
This document defines equivalent processing requirements for the
types text/javascript, text/ecmascript, and application/javascript.
Use of and support for the media type application/ecmascript is
considerably less widespread than for other media types defined in
this document. Using that to its advantage, this document defines
stricter processing rules for this type to foster more interoperable
processing.
いいよ、いいよ、PythonもRubyも食っちゃってさ。
でも 4th edition が市民権を得るには IE が実装するのを待つしかないんだろうな
>>633 JScript.NET は 4th edition 準拠だから、次あたりのIEには
IronJScript みたいな形で実装されるかもね。
>>634 あれは昔の草案をもとにしたもので、現在の4th edition草案とはかけ離れてるだろ。
MozillaさんAdobeさんから何かもらったらしいねぇ。
>>636 >>632 の事?
spidermonkey とモロ被りな気がするけど、どうするんだろうか。
JIT だからこっちの方が速いんだろうけど。
そりゃその気なければあんな発表にならんわな。 Javascriptの世界は、実装依存コードが幅をきかせているから、 Adobeは、自分達のコードのシェアを広げる作戦かな。
HTMLの次はJavaScriptですかそうですか
ほー、正規表現エンジンはPCREなのか。
PCRE が Google で使われてるのは知らんかった。しかも C++ か。
Number って double, decimal, int, uint だけなんだ... float は double で良いとして、byte は欲しかったな
はぁ?何のために? 仮にbyteを用意しても、4〜8バイトのメモリを消費するんだが?
4つのbyteを4バイトの領域に詰め込んでくれたらいいなぁって話じゃね? まあどの道、全体的に見れば大した違いは出ないだろうけど。
つか byte array が欲しいんだけど。
何に使うんスか?www
そんなものより演算子オーバーロードがほしい。
バイナリファイルを弄るのに。
Stringじゃあかんの?
そりゃあかんだろ。お前使ってないだろ。
なんだ、無知な低脳の戯言か。
バイナリファイルを直接いじるなんてECMAScriptっぽくないね。却下。
>>654 > A ByteArray can be thought of as similar to an Array of uint ([uint]) with each element truncated to the integer range of 0..255.
これはバイナリデータ1バイトにつき4バイト/8バイト(マシン依存?)のメモリを食うってことか?
656 :
652 :2006/11/11(土) 21:34:13
ボクは650に言いました。紛らわしい書き方だったのでage
>>654 演算子オーバーロードも検討中じゃないの?
どっちもproposalsにあるけど。
>>655 それはbyte arrayとは何かを知らん人向けの説明であって、実装がそうだと
いってるわけじゃないよ。
byte arrayとは何かを知らん人に、「uintの0〜255の範囲以外切り捨てたものと考えていい」なんて説明が、なぜ必要?
もうCでいいよ
>>660 JavaScriptにはbyteという型がないから。
その下のPopulating a ByteArrayを見ればわかると思うが。
タマリンのは U8 の配列になってるから、unsigned char なのかな。 ちゃんと見てないけど。内部表現は実装依存なんじゃないの。
パターンマッチングが欲しい
J Scriptは、やめて欲しい
素晴らしい♪E C M A
コンパイラが出来るまでは Adobe VM 使えないのね。
ESの正規表現ってPerl互換なの?
670 :
668 :2006/11/27(月) 03:57:40
>>669 本当だ。ちゃんとPerl5を模して作られるって書いてある。
ありがとん。
671 :
デフォルトの名無しさん :2006/11/28(火) 16:42:13
なんでこの板には曖昧javascirptスレが無いの?
JavaScriptって書くとすごいのが湧いてくるからなぁ
JavaScript 出でよ、すごいの!
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ JavaScript | |r┬-| | 出でよ、すごいの! \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ / \ / ─ ─ \ / (●) (●) \ | (__人__) | \ ` ⌒´ ,/ ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
出ませんな
今なら何を書いても怒られない予感…
680 :
デフォルトの名無しさん :2006/11/29(水) 18:26:20
>>669 文字クラスのところ、珍しい仕様だな。
>15.10.2.16
>パターン /[E-f]/i は大文字小文字含めた ASCII 文字だけでなく
>記号 [, \, ], ^, _, ` にもマッチする。
試しに "ABCDEFXYZ".match(/[E-f]+/i) をしてみたら、
確かにIE6では全体にマッチしたわ。
FirefoxとOperaは EF にだけマッチした。
>>681 >パターン /[E-f]/i は大文字小文字含めた ASCII 文字だけでなく
>記号 [, \, ], ^, _, ` にもマッチする。
珍しくないよ。ASCIIテーブルの通り。
131 89 59 Y
132 90 5A Z
133 91 5B [
134 92 5C \
135 93 5D ]
136 94 5E ^
137 95 5F _
140 96 60 `
141 97 61 a
142 98 62 b
「ASCII文字」は、「アルファベット」の間違いかな。
原文だと "/[E-f]/i matches all upper and lower-case ASCII letters" って書いてあるね ってことは、この仕様書通りに実装しようとすると、A-Dとg-zも 引っかかるようにしないといけないのか。めんどくさいな
>>683 15.10.2.8の最後のパラグラフによれば、
大文字に変換してから、比べろってことみたいだね。
それならそんなに面倒でもない。rangeは展開することになりそうだが。
/[e-F]/iはエラーですかね。
どうしよぉ 生理こないぜー
昨日から尻が生理です
/[E-f]/i ってのが、 /[E-Fe-f]/ と扱われるか、 /[A-z]/ (E-fの範囲にA-Z全体の大文字or小文字がどの道カバーされてるため) と扱われるかの違いか。 Perlでも/[A-z]/扱いになるみたいね。 今までそんなの意識したことなかったな。 まあ、iオプションつけといて、正規表現の中に大文字と小文字を混ぜるのもどうかと思うけど。
>>688 > 今までそんなの意識したことなかったな。
a-z, A-Z, 0-9の範囲外のrange指定の動作は未定義、
としている正規表現規格も結構多いよ。
むしろはっきり記述してある方が珍しいと思われ。
いまやcharacterはASCII&Unicodeの世界ってことですかね。
ECMAScriptの正規表現のコンパイル結果は、キャッシュされてたりするの?
そりゃさすがに実装依存だろ
というか正規表現のパース結果をプールするために正規表現リテラル使うんじゃなくて正規表現オブジェクトをnewして変数に突っ込んでんだけどオブジェクトをnewしたりcompileプロパティで内部表現にコンパイルできるのはECMAの仕様外だっけ?
関係ないけど正規表現リテラルを変数に突っ込むのではあかんのかいな
>>692 正規表現リテラルは構文解析時にパースされてオブジェクトが生成される。
ソース位置が同じなら常に同じ参照を返す(と仕様書には書いてある)
関数リテラルはキャッシュしてもいいしキャッシュしなくてもいい(クロージャの問題があるので)
どちらもソース位置が別なら別のオブジェクトへの参照を返す
695 :
694 :2006/12/10(日) 11:40:41
サンプルコード(FireFoxで確認) alert(/ / === / /); //=>false function a(){return / /}; alert(a() === a()); //=>true
>>694 >(と仕様書には書いてある)
まるで仕様だけの話にも聞こえかねないが、そうじゃない実装例があればプリーズ。
>>695 ところで、正規表現のコンパイル結果がキャッシュされるかどうかってのは、
例えば/ /がソース中の2箇所に出現するとして、いわゆる「正規表現オブジェクト」としての実体は別々でも、それらが実際にマッチングに使われたときに、同じコンパイル結果が使われているのかどうか、
ってことだと勝手に考えていたんだが、そういうわけではない?
実装としては、「正規表現を表す文字列(+フラグ)をキーとし、キャッシュされたコンパイル結果への参照を値とするハッシュテーブル」みたいなものが内部でマッチングのたびに使われるみたいなのを想像してた。
まとまりのない文章になってしまった。スマソ
>>697 そういう実装があってもいいけど、実際に実装が
そうするかどうかは仕様の範囲外、だと思う。
受理マシンが毎回作られるのがヤってこと?
700 :
697 :2006/12/10(日) 23:06:19
あーこのスレは仕様の話をするスレだったのか。 仕様には規定されてないのを前提で、どういう実装が考えられるかってのを書いてた・・・
>>697 複数の場所で同じ正規表現を使うのってそんなに頻繁にあるのかしら?
あとそのコンパイル結果はいつ破棄するのかな?
オブジェクトでキャッシュしてプログラマが使いまわせば十分な気がするけど…
リテラルが複数個所ってよりも、newで作ったオブジェクトの場合はキャッシュしててくれたら、ちっとはパフォーマンスに寄与するんじゃないかな
ありでしょ。E4Xは内部メソッドの動作にもいろいろ変更加えててより変態的。 JDK6のって要はRhinoでしょ。なんか上のほうで E4Xは外すっていう情報があったけど結局どうなったんだろ。
>>変態的 けどECMAScript4だったかJS20だったかの仕様に取り込むって話があるんだよな
こりゃホントに三年持ちそうだな
ワラタ ちゃんと保守しとけよ。
そもそも何故JavaScriptの標準化がECMAなんだ? って話は禁止?あと、標準化されてるHost Objectは何処でやればいい? W3C DOMやWindow Objectの仕様・・・。Native Objectの内Built-in Objectまでがここ?
ECMAが一番手っ取り早かったんでしょ。 ISOへの近道にもなるし金積めば通してくれるってうわさもあるし。 それからこれはあくまでも個人的な意見だが、 W3C DOM、Window ObjectなどはWeb製作板ではないかと思う。 Native Objectはここでいいかと。 ちなみに巷でネイティブオブジェクトといったとき、 documentのようなブラウザ組み込みオブジェクトも 含めることがあるけど、ECMA-262の定義だと そういう環境依存のオブジェクトは ネイティブオブジェクトに含まれないんだよな。 まあその定義自体informalだけど。
ECMAScript 仕様書に載ってる範囲までがここ、でいいんじゃね?
mynamespace = {}; mynamespace.global = this; mynamespace.Namespace = function( name, parent, obj ) { this.__name__ = name; this.__fullname__ = parent ? parent.__fullname__ +"."+ name : name; this.__namespace__ = function( child, cont ) { if( child in this ) { cont( this[child] ); } else { this[child] = new mynamespace.Namespace(child,this,cont); } } this.__marge__ = function( cont ) { ... } } mynamespace = new mynamespace.Namespace( "mynamespace", null, mynamespace ); mynamespace.__namespace__( "utility", function(_) { _.MyUtilityClass = function() { ... } }); var obj = new mynamespace.utility.MyUtilityClass; やべぇ、javascript 面白すぎ
あ、Namespace のコンストラクタで __marge__(obj); してないや。 無名関数があるからあんまり意味無いけど、Boost.Bind が超簡単に実装できるとか楽しすぎ。
Boost.Bindて知らんけどクロージャでスコープ引っ張りつつInvok関数みたいなので任意コンテキストに縛って実行って感じで出来る? NamespaceてよりScriptContextだな。
よく考えたらjdk6のrhinoは ant -Ddebug=off -Dno-regexp=true -Dno-e4x=false smalljar なsmalljar.jarをベースにしてんだな。 仕様には関係ないが
>>714 PC用途なくせに、なんでそんな事を…。
みんなJavaじゃなくてJavaScriptにいっちゃわないためか?
716 :
デフォルトの名無しさん :2007/01/25(木) 03:03:56
>>715 フットプリントを小さくしたかったらしい。
JAVA的にはScripting APIの仕様が適応出来て
親しみ易くJAVA実装のある言語を選んだ訳だから最低限インタプリタで動いてJAVAと通信できれば良いらしい。
だからコンパイルモードのコードは削除され、一部LiveConnectのコードも削除・簡易代替に変更されてる。
E4Xは文法いじるからとっつき難くなるから排除らしい。
rhino独自の組み込み関数も削除されてる。help()が効かないんで驚いたよw
rhinoは色々な用途向けにビルドオプションを用意してるからコアエンジン部分はビルドし直せば影響ないし。
元もとrhinoは内部プロパティにアクセスする__proto__とか__parent__とかはサポートしてないし、
LiveConnectも一部機能をサポートしない変わりにJavaとの通信性を高めてる。
EcmaScriptに毛が生えただけの本家実装だから他の実装よりこのスレ向きだろうね。
718 :
デフォルトの名無しさん :2007/01/25(木) 18:09:27
>>717 ほー。
でもそんなの言い訳でしょ?
MEならわかるけどSEでフットプリントガリガリ削る必要性なんてないじゃん。
>help()が効かないんで驚いたよw
ってことはprintもreadFileもloadもない??ダメすぎwww
>>718 readFile はない。
print,load はあるな。
>>718 削る必要性ないのに「言い訳」ってどういうこと?
言い訳って、理由があって出来ないことを、誤魔化すことでしょ?
フットプリント的に削る必要がないのに、
削るって事は、ポリシーの問題って事なんじゃないの?
>>717 > E4Xは文法いじるからとっつき難くなるから排除らしい。
Javaの方でもやっているからって事はないかな?
>>720 >言い訳って、理由があって出来ないことを、誤魔化すことでしょ?
Rhinoをフル搭載することは、Sunの都合上の理由があって出来ない。
それを、
>ポリシーの問題
という風に問題をずらして誤魔化す、という「言い訳」をしてるんでしょ。
>>722 のレスは本質をついていて参考になる。
このような高度な内容を平易に語れる人は少ない。
さんくす。
Java側に類似のクラスがあって、 ECMAScript標準でないものは、外す候補になるとは思う。 ただし外しすぎるとJavascriptとしての使い勝手が、 既存コードやノウハウの流用上、悪くなり、バランスを考えないといけない。
使い勝手のみ考えたら-Dno-regexp=falseでビルドしてJava 1.4の正規表現ライブラリラップした方がJava使いには良いだろうね。
>>722 幾つかあってどれが今回のに当てはまるかよく分からんw
JavaVM上で動く言語を黙認してたくせに突然Groovyを標準化して一本化しようとした事か?
標準化も実装も間に合わなくて知名度、安定性、入り易さの優れるrhinoを選んだは良いがコンパイラもデバッガも排除ってオチか。
考えてみるとjsソースを事前にコンパイルしといてdefineClass()でオンデマンドロードの方が使い勝手良いのに。
Ecmaの仕様から考えるとコンテキストとスコープの関係、プロトタイプチェーン、深い部分の仕様ミス、そもそもクラスベースOOPな人間にプロトタイプOOアプローチは出来ない。
その上、Javaとの通信もマシン型の未実装で不完全。暗黙の変換時のみ使われる予定のCharクラスも無い、でまだ言語として問題点山盛りなのにな。
始めてRhinoに触れるならその文化を残す理由も余りない むしろimportで割り切ってくれたほうが学習コストも低くすむ
表面上の学習コストは元々低いよ
RhinoのScriptableインターフェイスについてなんですが、 get、put、hasが持ってるパラメータScriptable startって 何のためにあるんでしょうか。 いくらか試してみたんですが常にthis == startになりました。 this != startになることってあるんでしょうか ?
あの引数startはスコープじゃなかったか? そりゃthisになると思うけど。 いわゆるインスタンスの動的メンバにアクセスするためじゃない? JavaDocが今手元にないけどそれ読んでみればいい
730 :
デフォルトの名無しさん :2007/03/05(月) 09:19:43
ネタないねage jdk6のrhinoが使えねぇー sunの勝手な解釈でJavaAdapterがインタフェースの単一実装しか出来なくなりました。 GUI書くときは無名オブジェクトに対してリスナー系インターフェイス+α実装とコンポーネント系クラス継承を一度にしてサクっとインスタンス化しちゃうのに・・・ いちいちnewした後に関数再定義してJavaAdapterでインタフェース実装しなきゃいけなくなった・・・ そもそもJavaAdapterとかはjsの機能じゃなくてLiveConnectの機能なんだからネスケの実装しかつかえねぇーYO!
ぅゎー、そんな無体なことに。sun腐ってるな。
FirefoxのJavascriptエンジンは1.7とかいってPythonくさい機能を大量に装備したけど、 それらはECMAScript 4th ed.(Javascript 2.0)には入るのかな?
js17はjs20の先行実装。fx2.0系のgeckoは次世代仕様の為の先行実装されまくり。 実験的な意味が強い。rhinoが1.6止まりなのもそのせいじゃない? むしろjs16がspidermonkyのGCバグフィックスリリースなのにrhino1.6が出たのが不思議。Date.nowがrhinoでもサポートされただけだし。 rhinoエンジンのバージョン定数の1.6のところの値が1.5と同じ"1.5"になってるから見てみ?
じゃあjs1.7はproposal用reference implementationの一つなのかな。
いやjs20の仕様を全て実装した訳じゃないよ。じゃなきゃバージョンが2.0になってるだろ? 実験的先行実装たしかDOM lv3もまだ実験段階だし、ていうかmozillaのとこ探せば開発者向け文書落ちてる
タマリン用のコンパイラはちゃんと出来るのかのう。 Perl 6 みたいな事にならないと良いけど…
>>737 タマリン用じゃなくてタマリン自身がFlash9の開発環境(AVM2+IDE)のうちのAVM2のソースコードの一部のJITコンパイラ+GCフレームワーク+AS実行のためのコアライブラリだよ。
swfファイルはJITじゃなくて事前コンパイルされたAVN2バイトコードだ。
んで次期ASも次期JSもES4に取り込む予定だから基本的な部分は流用出来るから、
まず、次期Fxに載せて小手調べするんだろ。
タマリン自体はOSSで汎用のES4ランタイムになってそれをベースに将来のmozilla製品とadbe製品用の実装しちゃうって事だろ。
残りのECMA-262WGであるアップルとMSとオペラが反応なしってのが何か起こりそうだ。
740 :
デフォルトの名無しさん :2007/03/15(木) 17:45:51
これjavascript2.0が出たら殆ど書き直しになるんだよね。 だから手出してない。2.0は項目分けるのかな?
>>740 入門まで呼んだ。続きは気が向いたら。
- 「JavaScript 導入」「JavaScriptとは?」の中のブラウザ意外の実装の話は
独立した節にして「JavaScriptの歴史」の中身あたりを「JavaScriptとは?」に
ひっぱってきたらどうだろう?
- Number Type が数字型になってたり数値型になってたりするけど
プログラミング言語界隈一般では数値型だと思う。
(すう‐じ【数字】:数を表す文字。アラビア数字・漢数字またはローマ数字など。)
743 :
デフォルトの名無しさん :2007/03/17(土) 04:12:20
>740 アドバイスありがとう、若干直した。 > JavaScript 導入」「JavaScriptとは?」の中のブラウザ意外の実装の話は 独立した節にして「JavaScriptの歴史」の中身あたりを「JavaScriptとは?」に ひっぱってきたらどうだろう? 「ブラウザ意外の実装の話は独立した節にして」っというのは何処まで独立して扱えばいいのかな? オブジェクト指向に関しては、詳しい解説は後で書くにしても JavaScriptとJavaの比較を独立した解説とするのは何処までやれば良いんだろう? 簡単にJavaとJavaScriptのほぼ同じ機能のコードを並べてしまうのかな? それとも、Perlとかの言語まで含めて、JavaScriptはどのように動いているのかを詳しく書いた方がいいのかな? 簡単なJava > Number Type が数字型になってたり数値型になってたりするけど すいません。これは完全に私の凡ミスですね。移行気を付けて行こうと思います。
744 :
741 :2007/03/17(土) 04:15:36
> これjavascript2.0が出たら殆ど書き直しになるんだよね。 普通は分けると思う。 ところで自分なりに思うんだけど、JavaScript2.0って将来普及するのかな? 自分あまり詳しくないのですが、簡単に読んだ感じでは、変にガチガチになっちゃってイライラするところがあるんだけど。 正直、2.0は2.0があうところで独立に共存しそうなんですが…
ブラウザが古いJavaScriptを無視することはないだろ。 Flash 9では、実行性能が欲しけりゃECMAScript 4、 という縛りをつけてきた。 高機能なIDEが前提なら、strictな型はいいことづくめ。 Flash 9のIDEがどうだかは知らんが。
実行時に型を特定するのはしんどいんだなw
実行してみなきゃ型がわかんないから実行してみるわけだけどでも副作用が、
>>743 >>742 ではないしまだ殆ど読んでないから外してるかも知れんが、「JavaScriptの歴史」辺りにLiveScriptの話出してjavaとは別物である事を強調しつつ
マーケティング的な理由でsunからライセンス受けてjavaの名前を使ってるってのを解説した方が良いと思う。
>簡単にJavaとJavaScriptのほぼ同じ機能のコードを並べてしまうのかな?
Groovyじゃないんだからそれは止めた方が良いと思う。
プロトタイプベースとクラスベースは本来アプローチが違うんだから並べて比較は出来ない。
プロトタイプベースの方が言語仕様レベルでデザインパターンを駆使して楽にコード書こうとしてるし、
javascriptの場合、関数型言語に近い作法が多い。だから何処かで他のプロトタイプベース言語や関数型言語の概念を
「仲間」として出すとかした上で敢えてクラスベースと比較した方が効果的だと思う。
749 :
デフォルトの名無しさん :2007/03/17(土) 13:32:26
>プロトタイプベースの方が言語仕様レベルでデザインパターンを駆使して楽にコード書こうとしてるし、 kwsk
>>744 静的プロパティが導入されればIDEの入力支援とマッチするからクラスベースしかできない連中が喜ぶんじゃない?
まあ、callオブジェクトがなくなる時点でjavascriptじゃなくなるが。
無名再帰はどうやってすればいいんだ!?
クラスベースイラネ!mix-inの規約化された仕組みとjava並みの単純で強力な名前空間があればそれで良い!
>>749 javascriptの話だけどプロトタイプチェーン自体がPrototypeパターンのChain of Responsibilityだからオブジェクトのクローニングとメッセージ処理の委譲を同時にやっていわゆる継承を実現してる。
雛型であるクラスを定義してサブクラス化してインスタンス化して使う、より使うためのプロセスが減る。
ただし、この継承部分が今の所、複数の方法があって、しかもネットスケープの__proto__や__parent__以外は効果が曖昧だったりする。
クラスベースな連中が想像する継承を実現するのはこれ位だろう。
で、javascriptはオブジェクトをただの連想配列として扱ってて、各プロパティはStrategy パターンとも捉えられる。
「javascriptのプロパティは呼び出せるプロパティ」とよく言われるしね。
まあ、オブジェクトに対するメッセージがStrategy パターンと言うならそれまでだけど。
だから、全ての連想配列についてPrototypeパターンのChain of Responsibilityを構築してツリー状になっててそのリーフ一つ一つがStrategy パターンです。って感じ。
コンテキストとスコープとプロトタイプチェーンの関係はややこしくなるから省くよ。
あーと、javascriptの場合 >リーフ一つ一つがStrategy パターン の部分が自分そのものや自分の所有者や呼び出し元をreturn出来るから厳密にはツリーってよりフラグになるんだけど・・・。
753 :
デフォルトの名無しさん :2007/03/17(土) 14:27:14
>>751 プロトタイプベースの何がいいの?つったら、いつもCoRが出て先が続かないw
Strategyはそうとも言えるかも知れないけど、CoRとStrategyだけじゃ
>プロトタイプベースの方が言語仕様レベルでデザインパターンを駆使して楽にコード書こうとしてるし、
とは言い難いような。
つうか、Strategyはプロトタイプベースかどうかより、
関数やクロージャがファーストクラスかどうかの問題の気が。
>>748 > 「JavaScriptの歴史」辺りにLiveScriptの話出してjavaとは別物である事を強調しつつ
> マーケティング的な理由でsunからライセンス受けてjavaの名前を使ってるってのを解説した方が良いと思う。
このあたりWikipediaでは「要出典」になってるんだけど
検証可能性を満たすソースは存在するの?
>>754 要出典なの!?
常識だと思ってた・・・。てことはLiveScriptが実装された頃からjs叩いてた俺は生き証人ってやつになるのか・・・。
>検証可能性を満たすソース
難しいね。W3CとかIETFとかnetscapeが歴史資料の一部としてなら保管してるだろうけど。
その他の場所に信頼性のあるソースが転がってるとは思えない。
古臭いMLやネットニュースのアーカイブを片っ端から当れば出てくるかもしれないけど
古来のサーバーは軒並み死んでるからね。
それこそ当時を知る人間じゃないとそんな鯖を見つけ出す事は不可能だし・・・。
遅レススマソ。737 だけど、
>>739 そういう意味では AVM2 用のバイトコンパイラがちゃんと出来るのかなって意味ね。
ECMAScript のソースコードをバイトコードにコンパイルする為のコンパイラが欲しい。
今ある選択肢は↓こんな感じだけど、3 が出来たらインタラクティブシェル的に使える
様になるので嬉しいなと。
1. Adobe の開発環境を使う(有料)
2. OCaml で書かれたオープンソースのコンパイラ MTASC を使う
3. SpiderMonkey のコンパイラを AVM2 用のバイトコードを吐ける様に
改修する作業が終わるのを待つ
4. AVM2 のセルフホストコンパイラが完成するのを待つ
もそも経緯を考えれば要出典もクソもないけどな。LiveScriptの開発コードはMochaって言うんだけどMochaを作った理由はNN1.1に実装されてた LiveDocumentっていうサーバープッシュ・クライアントプル技術を利用した動的文書技術でその延長としてMochaを実装したんだが サーバープッシュ・クライアントプルじゃCGI使うんで鯖に負荷をかけるし当時はCGIの脆弱性が問題視されててクライアントサイドで完結した動的文書の為にMochaを開発し始めたんだよ。 んでNN2.0bに搭載されたんだけどこの頃は確実にLiveScript(Mocha)だったんだけど95年12月にsunと契約してJavaの商標権借りてJavaScriptに変えたんだけど、 その理由がお互いクライアントサイドのみでwebページに動的な変更を与える能力を付加するって目的が一致してて (当時のjavaは組み込みとサーバーサイドにアピールして両方ボロクソに叩かれてクライアントサイドに逃げてきたって経緯がある)
かつBrendan Eichがjavaに興味持って利害が一致したんでお互いjavaの名前を使ってwebページを動的に変更できる部分をアピールして行こうって事で契約が成立したはず。 これがマーケティング的な理由って部分。問題はいつ名称変更されたかでNN3.0XのどれかのマイナーアップかNN2.0の正式版で既に名称変更してるかで意見が分かれるんだよ。 2.0が96/3、3.0が96/8なんだけど2.0だと実際に権利処理が間に合うか疑問だし。どのverで変更したか確認できればいいけどね。 なんで変更したかはやっぱアーカイブの記事あさるしか・・・
国内鯖探してみたけどパッとしないね。 javascriptの関連技術にLiveがつくのはLiveDocumentから来てる事だし、JS13までJS仕様にDOMが含まれてたのも元々DOMの根源たる根源がLiveDocumentの思想で それをクライアントサイドで完結させるためのLiveScriptだからね。 JS14からコアとDOMが分離されたのはW3C標準になったからだろう。こうみてもLiveScriptにJavaなんて一切関係ない。 信頼できるソースが転がってるとはやっぱ思えんなぁ。wikipedia自体間違えまくってるしね。 Netscape Navigatorの項の「当初は「Mozilla」という名前でリリースされる予定だったが、マーケティングの理由により、「Netscape」に変更されている」とか。 本当はmosaic開発チームがNCSAの方針に反発して独立してMosaic Communications Corporationを作って Mosaic Communications Corporation版mosaicを開発して、 その開発コードがmozillaなんだけどその次期mozillaであるmozilla 2.0 (Mosaic Communications Corporation版mosaic 2.0)をシェアウェアとして売ろうとしたら 正式リリース直前でNCSAが離反報復に出てmosaicの商標権はうちにあるから使うなって言いだして 了承せざるを得なかったからしぶしぶNetscape Navigatorに変えてNetscape Communicationsに社名変更したんだしね。 ここらへんはMozilla Application Suiteのwikipediaの方が正確だし「sunからライセンス受けてjavascriptにした」が要出典なら 「NCSA Mosaicで知られるNCSAの圧力により、社名も製品名もMosaicから Netscapeに改名を迫られた経緯」も要出典だと思うよ。 出典出せって言われても当時は何処でも当たり前に言われてたんで出典が何処かは今となっては分からないんだよ・・・。 現在のwww自体また聞きに次ぐまた聞きでしか知らない連中が曖昧なまま垂れ流してるんだし。ムズカシス
763 :
741 :2007/03/18(日) 18:27:26
>>748 > プロトタイプベースの方が言語仕様レベルでデザインパターンを駆使して楽にコード書こうとしてるし、
> javascriptの場合、関数型言語に近い作法が多い。だから何処かで他のプロトタイプベース言語や関数型言語の概念を
> 「仲間」として出すとかした上で敢えてクラスベースと比較した方が効果的だと思う。
実は自分、LispとかHaskellくらいを「あー、こんなもんなのかー」と思いながらサッと流してしまった人間なので、正直少々荷が重い所があります。
少しどうすればよいのか、コードなんかの具体的な所が欲しい。ごめん…。
組み込んだデザインパタンな所は、言語使用というよりは、柔軟なプログラミングのための機能といえる様な所があるから
確かにデザパタ組み込んだ、は大げさな言い方と思う。
waybackmachineってwebページを保存するってサイト? じじいの記憶が正しければ96年だと思う。 >Mozilla Classic NN5ナツカシス。
どうぶつ奇想天外でオマキザルが出てる。 タマリンの仲間だぜ?
ファイナルファンタジーかとオモタ。Fxの事ね。 mozillaがロードマップ通りに進む訳がない。子供が予定日に生まれないのと同じだ。
>>760 thanx.
asc_authoring.jar でも遊んでみます。
>766 一瞬ポケモンの名前かと思った
771 :
デフォルトの名無しさん :2007/04/01(日) 21:18:18
数字型って、規格上64ビット浮動小数点型のはずなんだが、ie,Firefox,Operaともに document.write( Math.pow( 2,120 ) ); とかやらせてみるときちんと計算されるんだが、これはどう解釈すればいいのだ?
>>771 指数部は10ビットなので Math.pow(2, 1024) でオーバーフロー
773 :
デフォルトの名無しさん :2007/04/01(日) 22:05:53
ありがと、オーバーフローさせたら+Infinityが返ってきた
実は実装で拡張されてたりする。 rhinoってnumberの整数表現はjavaのlongまでだった気する。 小数表現もstrictfp使ってるわけじゃないからIEEE-doubleでは無くCPUのFPU依存。
自己反映計算なくなったら無名再帰どうやって書けばいいの? 仕様上はもう無いけどさ・・・。 Y-コンビネータとかどうやって書けばいいの? そんなに暗黒面の力が嫌いか!
Brenden Eichってなんて読むの。ファミ名の方がよくわからん。 アイク?それともエイク?独語風にエイヒじゃないよね?
777 :
776 :2007/04/10(火) 13:18:39
ごめん。独語風ならアイヒだね。<ツッコミ予防
えーいち
まさか。日本人だったの、あの人?
780 :
デフォルトの名無しさん :2007/04/22(日) 23:14:05
Javascriptの文字列操作についての質問です。 C言語の場合日本語は2バイトなので、 char型のポインタを使ってリーダーバイト、トレーラーバイト共に操作すればよいのですが JavaScriptの場合はどうすればよいのでしょうか? 文字列のハッシュ値を求めたいのですが、 var string = 'hogehuga'; function hash(str){ var h = 0; var weight = 0; for (var n = 0 ;n < str.length; ++n, ++weight){ if ( weight > 7){ weight = 0; } h += str.charAt(n) << (4*weight); } return h % 7; } alert(hoge); としても 0が帰ってきてしまいます。
・関数hashが一度も呼び出されてない ・ハッシュ値を計算するなら、マルチバイトとか気にせず1バイトずつ処理すりゃいいんじゃないの? ・StringのcharAtは文字列のオブジェクトを返すんだけど
・関数hashが一度も呼び出されてない 馬鹿だ、俺。 var string = 'hogehuga'; function hash(str){ var h = 0; var weight = 0; for (var n = 0 ;n < str.length; ++n, ++weight){ if ( weight > 7){ weight = 0; } h += str.charAt(n) << (4*weight); } return h % 7; } hoge = hash(string); alert(hoge); です。コピペ間違いです。 ・ハッシュ値を計算するなら、マルチバイトとか気にせず1バイトずつ処理すりゃいいんじゃないの? JavaScriptってchar型の変数、定義できるんですか? ・StringのcharAtは文字列のオブジェクトを返すんだけど 帰ってきた文字を数値に変換すると言うことですか?
charAtじゃなく、charCodeAt使え。
こんな関数があったとは!!!!!!!! どうも有り難うございます!!!!!!!!
どうしてJavaScriptではバイナリデータを扱えないのですか?
文字列型を使ってバイナリ列を表現できるよ。 バイナリファイルを扱いたいということなら そもそもECMAScriptではファイル入出力について規定されてないから。
処理系を自分で拡張するとか
そこでLiveConnectですよ奥さん。
え、俺男なんですけど。
いや、むしろ ヒント:慣用句
3人とも帰っていいよ
MozillaのCVSリポジトリからタマリンがごっそり消えた なにがあったんだ……
所詮2chのことなのに、ここが糞スレとかいわれるとなんか腹が立つ。 ところで、特定のスコープ内でvar宣言なしに代入した変数が グローバルオブジェクトのプロパティになるというのは、 ECMA 262-3rdの10.1.4と11.13.1と8.7.2を見れば明らかだよな。
トップレベルでのdefineのことかーっ
>>796 rhinoでグローバルオブジェクトをトップレベルでnewするとコンテキストチェーンが・・・
>>797 これってまだES4だけでベンダ実装のJS20とかはまだっぽい?
実際に使えるのはまだまだ、先っぽいよね。
ecma-262 ed.3から激変した混乱もあるだろうし。
>>800 AS3 はだいぶ近い。クラス関連の激変分はカバーしてると思う。
JS.Net は結構別物。
Web 上でつかえるかってのなら早くて再来年だな。
802 :
デフォルトの名無しさん :2007/06/19(火) 03:05:46
どちらかというと、今はadobeとmozillaがタッグ組んでるからMSとoperaが自然と浮いてる感じじゃない? MSって標準化グループに居たっけ? あと、個人的な観点だけどJS13以降for-in文のあるecma-262にイテレータの類いらなくない? どいつもこいつもrubyに触発されすぎだと思うんだけど。 rubyの作法は生産性は高いけど、保守性とリファクタリング耐性が低いと思う。 JavaScriptはモジュール性と後者二つが重要だぞ。
アァ?! ルビキチつれてくるぞ?
rubyは全然知らないんだけども、 俺はイタレータは必要だと思う。 コレクションの部分指定に逆方向走査、入出力抽象化などなど、 イタレータパターンはすっかり成熟していると思う。 豊富で洗練されたライブラリを持つには是非とも必要。 そんなでかくする必要ねーよということなら分からないでもないが。
>ルビキチつれてくるぞ? 別につれて来て良いと思うけどあっちはサーバー側でしょ。需要が違うと思う。 そもそも、ESとして入出力が必要かね。 ESとしては標準化する必要はないと思うが。 ネット越しが大前提だから勝手に読み書きはまずいし。 >そんなでかくする必要ねーよ これもブラウザに実装する面を考えれば重要だよ。ランタイム肥大化するし、 ライブラリを大量に標準化してもどうせMSが準拠しないのは目に見えてるし。 非互換なライブラリが増えればまたブラウザ戦争だし。 結局自分でクロスブラウザライブラリ作る羽目になる。 本当に必要最低限だけでいい気がする。
イテレータを標準化すべきかって言うと、やはり標準化された方が俺は嬉しい。 ライブラリ間でコンセンサスが取れるのが大きそうだし、 function を引数に取るメソッドが大っぴらにあった方が面白そうだから。 ただ、現実問題として、現行のライブラリでは別の名前になっているのがほとんどだろうから 移行に時間がかかるだろうし、for 文と被るところがあるし(被ろうが構わない、という言語ならともかく)、 IE のことも考えると、標準化されてもあまり意味は無いし、それならいっそされない方が良いとは思う。 現行なら prototype に書き足すだけで、使う分には大した手間にならないし。 って ES4 なら、どうせ混乱するに決まってるんだから全部入れちま(ry
>>803 イテレータを入れると保守性とリファクタリング耐性が落ちるってのか?
ナに言ってんだお前。
>全部入れちま(ry
それだとリフレクション機能排除した意味なくね?
まあ、あれは最適化を妨げるから云々と結構前から言ってたけど。
>>808 >イテレータを入れると
>rubyの作法は
>>809 >>イテレータを入れると
>>rubyの作法は
アホ。別の話ってんなら、イテレータを入れてはダメな根拠0じゃねーか。出直して来い。
お前には一つ上の文が読めんのか? >for-in文のあるecma-262にイテレータの類いらなくない? ES4が部分的にRubyに影響受けてるのも事実。 もともと、パラダイムが違うのにわざわざ他流を入れすぎればカオスの元。ES4と3の激変をみれば明らか。
>>811 はぁ?そんなのがイテレータが要らないって理由だったのか?
あまりにアホな意見なんで確かに見逃した。
もう、forがあればwhileは要らないだろ並にアホだもの。
>ES4が部分的にRubyに影響受けてるのも事実。
これは具体的にどの言語機能が?そんな事実も無いのに言い切るなよ?
>これは具体的にどの言語機能が?
javascript1.7がでた時点で散々PythonとRubyの真似と言われてるんだが。
というかもともとコミニュティー側からの声が大きくて実装した。
ttp://www.betanews.com/article/Firefox_20_to_Feature_New_JavaScript_17/1160795703 For that reason, the upgrade of the interpreter to version 1.7 will be of prime importance,
especially as JavaScript begins to take on more of the programming features of newer,
compelling scripting languages such as Python and Ruby. "JavaScript 1.7...implements a whole host of new features that were really inspired by the takeoff of other languages that have become popular, like Python and Ruby,"
stated Schroepfer, "so we take the JavaScript language to that next level."
あたりよく読め。技術責任者自らこう言ってる。
JS17は当時、ES4やJS20へ取り込み予定の機能を試験するための16のアップデートでもある。
for-each-inなどがES4で標準化されてるんだから。
ちゃんと役目果たしてるよな。
まねって事でもないと思うよ。 PythonやRubyがこの世になくても、入れて当然の機能が多いから。 むしろ色々な世界を切り開いているのは、 かつてはscheme, ML, Haskellなどの関数型言語系。今はC++だろう。 PythonもRubyもすごく保守的だ。 それから、イタレータの用途は、DOMのイタレータ型のインターフェースとか、 HTTP responseのイタレータとか、chunk型のhttpストリームとか、 いくらでもあるんじゃないの? イタレータのないプログラミング言語は、 宣言型風にプログラムを書きにくくて、使う気がしない。
C++ って何かしてたのけ?
つobject oriented + meta programming
イテレータの実装法はいくらでもあるけど、そこに重点を見出して言語機能で直感的なわかりやすさ重視でやってやろうってのは、新しいパラダイムだと思うけどなー>RubyやPython
関数型の話が出てる時になんだが、現在、一般的にオブジェクト指向と呼ばれてる概念 を広く浸透させた功績があるじゃない。 javascriptは関数型だけどSelfの影響が強いけど。
>>816 たまにでいいのでAdaの事も思い出してあげてください。
>>813 結局ES4に入ってない機能にいちゃもんつけてたお前はスゲーよ
お前はどうあっても叩きたいんだなw
ある関数があるとして、それが定義されているファイル名や行番号を知ることはできますか。 また、eval("function f(x) { return x*x; }") を実行するときに、ファイル名や行番号を与えることはできますか。
evalをバエルと読んでしまったよ閣下・・・orz 無理
doxygenとかjavadocとかドキュメンテーションツールがjavascriptにも 欲しいです。根性ですかソース管理はそうですか? ('A`)
3年目記念カキコ あと3年は持つな
yield をカタカナ表記するために、ヤ行に新しく /ji/ の音を導入する必要があるな イールドじゃ、納得できない
イィール゜ド
ヰールドとかヱールドってかんじ?
ヰンダーの魔除け
spidermonkeyでスクリプトを書いてみているのですが、print()を使うと必ず改行も出力されてしまうようです。 改行を含めずにprint()することはできますか。
System.print()など
>>833 bash$ js
js> System
typein:1: ReferenceError: System is not defined
System というオブジェクトは定義されていないようです。
836 :
デフォルトの名無しさん :2007/07/10(火) 15:36:06
>>833 js.c の Print 関数が本体で、
最後に fputc('\n', gOutFile); してるだけなので、そこだけ削ってリコンパイル。
SpiderMonkey(JS Shell)ってデフォだと liveconnect 組み込んてないだろ
JS Shellだけならね。 だからlive connectを取るか(rhino) 最新仕様を取るか(spidermonkey)だよ。 それ以上するならどっちにしろビルドからやった方が良い。 rhinoはjar突っ込むだけで+E4Xだから手軽だよね。
>>833 が spidermonkey つってんのに rhino 持ち出すのはどうかいな。
出入力など実用は rhino の方が楽なんで、こだわらんけど。
spidermonkeyもliveconnect使えるだろ。 ビルド時の問題ってだけで。 rhinoだと公式ビルドのdistroで初めからオールインワンなんだよ。
素のsmjsだと無理だろ。
だからspidermonkeyは元が組み込み用だからスタンドアロンな利用は弱いって、 rhinoで良いじゃん。フットプリントでかいから組み込みには向かんがw spidermonkeyはdefineClass()みたいなのないの?
spidermonkeyは小さいしごちゃごちゃしてなくて良いなぁ・・・。 じゃあ、自分で必要なもの実装してエンジンに関連付ければ良いんじゃ? 実行時にスクリプトから出来るのかよく分からんが。
動的ライブラリの仕組みは SpiderMonkey 自体はもってないので それも自前で実装しなきゃあかん、そんなに大変じゃないけど。
rhinoも持ってないぞ。てかEcma-262 ed.3も標準化してないな。4からか。 Java自体が全部動的リンクなだけだぁーw
おっと、一応コンパイル済みJSをロードするフレームワークは持ってるね。オプションだからエンジンとは直接関係ないけど。
wxJavascript、普通に便利だな。Windows の場合、否が応でもコンソールが開いてしまうみたいなので GUI アプリを組むにはイマイチだし、一部のサンプルプログラムを終了させるときに後味が悪かったり wxWidgets の部分は挙動が怪しい部分もあるが、SpiderMonkey のシェルとしては、MySQL も SQLite Expat もファイル I/O も使えてしまうので、非常にお手軽で優秀。オヌヌメ。
見てみた。確かに良いがRhino使いには初めからバックボーンにjavaのライブラリがいるから利点ないな。 Swing+javaアダプタは楽だよ。 >Windows の場合、否が応でもコンソールが開いてしまうみたい win版wxWidgets側の問題だな。
rhinoのJavaAdapterってただのリフレクションかと思ったらもっと高度なことしてるんだね。 アダプトするjavaのスーパークラス(指定されない場合はECMAのObjectオブジェクトが使われる)とインターフェースをjava側で動的ロードして スーパークラスにインターフェースを実装したjavaクラスのバイトコード吐いて そのバイトコードをjsオブジェクトとしてrhino側で動的ロードし直したインスタンスを返してる。 jdk6の実装でJavaAdapterが簡略化されたのはこれのせいだろうね。 jdk6の実装だとバイトコード吐く部分が省かれてるから。 serialize()とdeserialize()もなくなってるし。 serialize()とdeserialize()はゲームのセーブデータ読み書きがこれだけで出来る神関数だったんだけど。
Rhino 1.6R6来てるよ。 ソースコードだけ丸ごと無いからcvsから取りに行くようになったのかと思ったらアーカイブ壊れてた。
あのさ、ecma-262系言語って言ってみれば関数レベルのレキシカルスコープしかないよね。 関数レベルのダイナミックスコープの変数定義するか 親スコープの変数に明示的にアクセスする標準な方法ってある? function obj{ this.dynamic=100; this.func1 = function(){ //ここでError return this.dynamic; } } obj.func1が実行されてるときアクティブな実行コンテキストは obj.func1の関数コードだからthisはobjないのthis.func1になるから func1ないからthis値参照してもobjのインスタンス値じゃなくて objのthis.dynamicは参照できないよね。 これどうやって解決すればいいんだっけ?
何がしたいんだかよくわからない…解説頼む. o = new obj(); var value = o.func1(); とかいう話じゃないんだよねぇ…?
クロージャを作りたいって話かしら
rhino1.6R6 試してみたんだが… リソースのメッセージカタログ足りなくない? % java -jar js.jar -hoge Exception in thread "main" java.lang.RuntimeException: no message resource found for message property msg.shell.invalid
861 :
857 :2007/08/01(水) 19:17:58
ごめん。rhinoでHoge.prototypeにJavaAdapter使った場合に関連する謎の挙動だった。 どうも、prototypeにJavaAdapterインスタンス突っ込むとHegeのthisコンテキストすっ飛ばして JavaAdapter (Hoge.prototypeの方)の方見に行っちゃうみたい。 JavaAdapterのjsObject渡す部分でプロパティ変数定義して Hoge.prototype.memberで明示的にアクセスするとアクセスできた。 (明示しないと未宣言エラーかundefinedになる) これLiveConnect側のバグかな?
>>860 >msg.shell.invalid は昔からないけど
そのメッセージが表示される事態になったことないから困ったこともないんだが・・・
>>862 実用上困らんけど気付いてたらレポートしてやったら?
# 実は仕様なのか?
>>860 R6で実装が変わって「コマンドライン引数 -hoge なんて無効だぜ!」っていう
メッセージ「Didn't understand "-hoge"」と以下に続く
Usage文が外部ストリング化されてついでにUsageが詳しくなったんだがプロパティmsg.shell.invalid を忘れたみたいだな。
たぶんMessages.properitesに
msg.shell.invalid = Didn't understand "{0}"
追加だな。
>>856 もともとRhino 1.6でE4Xサポートしたのにあやかって
SpiderMonkeyのほうもバージョン1.6に引き上げたのにな。
そういう意味では「Rhino 1.6ではJavaScript 1.6を
部分的にサポート」というのがとおりがいいのかな?
いやspidermonkyがE4XのフルサポートでRhinoは部分サポートだろRhinoがフルだっけ? spidermonkyにE4Xが実装されたときにfor each inがE4X構文拡張からjs1.6独自拡張に格上げされて。 1.7で2.0仕様に採用する予定で実験的にjs仕様に格上げされてes4に正式採用。 それにjs1.6は主にspidermonkyのVMのメモリリークフィックスがメイン。 Arrayに追加されたプロパティとイテレータ・ジェネレータはspidermonkyの独自実装で1.7の余興。 js1.4みたいに世間では事実上の欠番扱いだろ。 1.4もクライアント側の変更はないとマスコミでは言われてるが 実際にはCallやClosure,_proto_,_parent_,argumentsがjs仕様上正式に非推奨になった版で、 かつ、DOMがjs仕様から分離された版でもある。 ecma-262 ed.3あたりで既にリフレクションはecma仕様から外されてたから認識がめちゃくちゃなんだろ。 これは歴史由来。 実際Rhino 1.6系はjs1.5がサポート範囲でマイナーチェンジでE4Xとjs1.6の部分サポートがある程度。 js1.6のVM修正はRhinoには関係ないからだろう。そのVMもいまやry 世間一般のブラウザ実装がmozillaですらデフォでは1.5+独自拡張モードだから問題はないけど。
https://bugzilla.mozilla.org/show_bug.cgi?id=306664 これ見る限りは
>>865 が正解のようだが。
Array Extra は 1.6、何で入れたのかわからんが(AS3? 1.8 で reduce,reduceRight 追加)
Iterator,Generator は 1.7、多分 ES4 仕様に提案->実験実装なんだろうな。
メモリリークフィックスは、DOM との循環参照関連ならば 1.7。違うなら 1.6 からずっと。
mozilla.dev.tech.js-engine とか見てると、
rhino の側でちょっとの間何が 1.6 で何が 1.7 なのかわかんなくなってたような。
今は MDC のを元にしてるようだけど。
>>857 こんなんしかないな
this.dynamic=100;
var self = this;
this.func1 = function(){
//ここでError
return self.dynamic;
>>857 呼び出すときにobj.func1()って形で呼び出せば、
func1の定義内に書いた「this」はobjになるわけだけど、
敢えてそういう呼び出しをしたくないという希望なら
>>868 のようにクロージャ使うことになるね
>>861 は何をしようとして何ができないのかさっぱりわからん
それよりR6で末尾呼び出しの最適化が行われるようになったけど 末尾再帰も最適化するんだろうか? 関数型ちっくなコード書きまくる俺にはwktkが止まらないw けど、最近の流行でC構文しか知らない人間がes系言語使ってるけどりかいできてんだろうか? classいらないからこっち方面を強化してほしかった。 せっかくSelfをC構文にしたのに Smalltalkに逆戻りってのも。
>>871 汎用のtail jumpがあれば、tail recursionは当然含まれる。
Tail recursion最適化は、関数入り口へのjumpと引数の調整で済むので、
関数フレームの書き換えが必要なく、実装が容易。
だからC言語あたりでも結構行われている。
pureなOOてSmalltalkのOOの事? C++のOOは違う気がするんだが。
876 :
868 :2007/08/03(金) 03:04:06
>>869 >>868 のようにクロージャ使うことになるね
俺はお前が名に言ってるかわからん。
「クロージャ使うことになるね」 は?何が?
877 :
869 :2007/08/03(金) 03:26:05
とりあえず
>>857 のコードが曖昧でよーわからんので、
objというインスタンスにdynamicとfunc1というプロパティが
あるのだと解釈した
で、obj.func1();って形で呼び出せば、
>>857 の
>//ここでError
>return this.dynamic;
という部分のthisは正しくobjになるので、
クロージャにしなくても(selfを用意しなくても)よかろう
という意味
>>857 のコードが曖昧なために多少荒れてるな…
ってかそもそもあのコード動かないよな?
みんなエスパーすぎだぜ…
>>857 もう少し具体的なコードが欲しいなぁ……。
>>861 を読む限りでは rhino 限定問題らしいが。
ちなみに
>>857 のコードをちと書き直した次のコードは
Firefox 2.0.0.6 では動作する。
function test() { this.d = 100; this.ex = function() { return this.d; }; }
var n = new test();
alert(n.ex());
>>875 SmalltalkはpureなOOというより宗教的なOO。
仏教だの道教だのの宗教用語をバズワードのように使う。
そこら辺は、見る人間の素質に依るよね。 宗教人は対立宗教に厳しい様だ。
883 :
857 :2007/08/04(土) 02:14:06
ごめん、混乱させたね。
ttp://gamdev.org/up/img/9913.zip ↑を作ってるときに発症したんだけど何とか回避したんで元の再現コードはもう無いから状況をうまく説明できない。
Usage:
<rhino_cmd> ControlWindow.js
*<rhino_cmd> は実行可能なRhino Shell
詳細は<rhino_cmd> ControlWindow.js -u で確認。
strictモードでも警告出ないようにするのが苦労した。
#俺はSmalltalkよりSelfやIoの方が好きだな。
>>883 > #俺はSmalltalkよりSelfやIoの方が好きだな。
俺も元はバリバリのSmalltalkerだったが、
今ではprototype指向のほうがpure OOだと
思うようになった。
javascriptはC構文にしたせいでクラスベースしか理解できない連中に誤解されたというか、 連中がパラダイムについていけてないんだよ。 パラダイムの系譜的にはこうなのに。 Smalltalk─Self─Io └LiveScript 最近、再評価されてるがAJAXなんてレガシーなホストオブジェクトだし。
JavaScript の至上命題は prototype ベースの OO を普及する事 という訳ではないんだから、言語の許す範囲で好きにしたら良いさ
Javascriptが最初からクラスベースだったら、 Python, Ruby, JVM系のGroovyなどが登場する余地は全くなかったと思う。
>>884 prototype指向のほうが純粋な理由は?
あるオブジェクトがプログラムの中で進化していく感じは生き物っぽいとか? ・・・ごめん、メルヘン入ったw
pureは違うと思うが、 なんでもobject傾向が高いよな。prototype系は。
その「なんでも」っていうのは、普段プログラム書くときに色々なものをオブジェクトにしやすいってこと? それともコアな(メタな)レベルでオブジェクトそのものの表現力が高いってこと? (例えばJavaでいうとClassクラスを定義できるってことが、Javaのクラスの表現力の高さの1つ)
「なんでも」は「なんでも」だ。 どちらか一方を選ぶ必然性はない。
べつにクラスベースだってなんでもオブジェクトにできるじゃん
>>887 javascriptが始めっからクラスベースだったら
関数型+prototypeで動的web pageっていう凶悪な中毒性がないからほかの言語が流行ったと思う。
それを言うならPython, Ruby,GroovyはJVM上で動いてるから
Rhinoの実績がなかったらJVM系スクリプト言語が流行らなかったと思う。
javascriptがうざいエフェクトに使われるはるか以前のMocha/LiveScript時代に
一部の連中があのパラダイムと動的web pageに目を付けて
狂気乱舞してゲーム量産された時期があるんだが
ああいう連中は関数型・prototype・強力なリフレクションに惹かれてたんだよ。
(まあ、すぐにリフレクションは仕様ミスだとnetscapeに訴え続けたが久しく認めてくれなかったね。)
だから、prototypeがないとあまりwktkしない。
あの時代に遅延評価とかY-コンビネータとか
無限リストとか無名再帰とかC構文で見たときwktkしたが
アレにさらにprototypeが足されたら堪らんかったよw
真っ先にSmalltalkとSelf周り連想した。
言語仕様をフルに活用したトリッキーで奇抜なコードを読むのも楽しかったし。
>>894 ECMAScriptの策定以前に、そんなに関数型な使い方をガンガンしてるどころか
OOをバリバリ使い倒してるコードが量産された形跡が、今日全くと言っていいほど
見当たらないが、誰がそんなコード書いてたんだ?
>>895 まあ、いわゆるギークとかウィザードと呼ばれる学術的・技術的に精通してた連中?
時期はnetscapeにLiveScriptが正式実装される前のβ版からダイナミックHTML初期以前くらい。
ダイナミックHTMLが流行りだした頃にうざい演出として使われるようになってからそういうソースは消えたね。
Mocha〜LiveScript間の時代だから今の連中が知らなかったり痕跡が残ってないのは当然。
遊んでた連中がお偉いさんになって仕様決めてるか、ソースがホストされてた鯖が死んでるから。
それに太古のwwwってpropaganda shit(糞宣伝屋)の(結構長期間の)工作が「西洋の暗黒時代の再現」と
まで言われるほど酷くて一般人の偏見が人権侵害並みに酷くて
ジジイは昔話したがらないから語り継がれることも無いしね。
そのピーク時に起こったのがコランバインの悲劇(コランバイン高校銃乱射事件)だよ。
だから昔話は周辺全部まとめてタブーってのが暗黙の了解。
(ていうよりみんな疲れ果てたんだけど)
そのころ日本の事情しか知らない連中はパソ通マンセーだったから知る由も無いね。
まあ、wwwとコランバイン高校銃乱射事件の関係はGEEKSって本読めば少し分かるよ。
当時、あの本に出てくるサイトに出入りしてたし、著者がwwwに精通した分かってるライタとしてその筋では有名だったし。
フォーラムで意見交換するのが好きな人だったからあの本の登場人物は知らない人間でもないよ。
昔のwwwは何も無かったけど人と有用な話するのは容易だったから
(たとえそれが有名・著名・今でこそお偉いさんであっても)印象に残ってるよ。
だから痕跡なんてないし知る人しか知らない話ってところ?
このまま歴史に消した方が良い事実でもあるけどね。
よくもまぁ訊かれて無いことまでベラベラと
javascriptでクロージャをバリバリ使うには、循環参照をこなせる GCが必要なわけだが、そんなGC積んだ処理系が昔どこに あったんだ? 要するに、オモチャを作って遊んでた奴らがいるだけだろ。
だから循環参照切れなくてバグだとnetscapeに主張してたが当時netscapeはそんなヘビーな使い方は想定してなかったんで相手にされなかったよ。 ていうか一番はじめのGCはスクリプトがロードされればメモリ確保して、 ページがアンロードされるまでメモリ解放されなかったから 実際にそれでゲームやってたらその内メモリ食らい尽くしてたよ。 その次くらいのGCが弱参照カウンタで次がmark&sweepだからnetscapeもどうにかする気になったんだろう。
主語が書いてないから、何とも言えんな。 誰が主張して、誰が相手にされなくて、誰がゲームを作ったの?
放置しる
>>894 > それを言うならPython, Ruby,GroovyはJVM上で動いてるから
> Rhinoの実績がなかったらJVM系スクリプト言語が流行らなかったと思う。
JythonやJRubyは、C/C++で書いた参照実装(本家)じゃなくて、JVM使ったalt.実装だぜ?
904 :
884 :2007/08/06(月) 20:42:45
>>888 > prototype指向のほうが純粋な理由は?
class指向では、オブジェクトがオブジェクトであるために
そのオブジェクトのクラスに依存することになる。
つまり、オブジェクトがfirst class objectであるためには、
オブジェクトとそのクラスがペアとして必要ということ。
一方で、prototype指向では、オブジェクトがオブジェクトであるために
オブジェクト自身以外に依って立たずにすむ。ECMAScriptの
オブジェクトリテラルが良い例。
クラスも単なるオブジェクトだから、純粋性が損なわれている様な気はしないなあ プロトタイプベース言語の場合は、クラスという機構を持たない分、ピュアというよりは シンプルな感じがする。
プロトタイプベースだって、 「属性」がファーストクラスオブジェクトじゃない実装あり得るだろ。 動的な言語だときついけれど。
907 :
888 :2007/08/07(火) 08:16:03
>>905-906 自分が「pureなOO」と言ったのは、何でもオブジェクトという意味ではなく、
オブジェクトがより純粋な意味でのオブジェクトとして実装されている、
という意味です。
なぜクラスオブジェクトがあるとpureでないかというと、「オブジェクト」という時に、
単一のオブジェクトが存在してそれだけで説明が済むprototype指向に比べ、
class指向の場合、インスタンスオブジェクトの視点から見ると、メタオブジェクトと
ペアになって始めてインスタンスオブジェクトが完結するというのは、
メタオブジェクトというインスタンスオブジェクトにとっては「不純物」なオブジェクト
が入ってきてはじめてfirst class objectになるというのは、pureさを損なっていると
思います。
>>907 > class指向の場合、インスタンスオブジェクトの視点から見ると、メタオブジェクトと
> ペアになって始めてインスタンスオブジェクトが完結するというのは、
いや、いったんインスタンスになったら、自立していても構わないぞ。
クラスベースでも、プロトタイプベースでも。
909 :
888 :2007/08/07(火) 08:28:35
>>908 > いや、いったんインスタンスになったら、自立していても構わないぞ。
> クラスベースでも、プロトタイプベースでも。
mehtodDictionaryもinstVarNamesも持ってないのに自立していると言える?
prototype指向言語はどっちもインスタンスが持っているが、
Smalltalk等のclass指向言語はメタオブジェクトが持っているよな。
それはそういう実装が多いってだけの話でしょ。
>>907 クラスベースの言語における クラス−インスタンス 連携というのは、
プロトタイプベースにおいてパターンとして存在するひとつの委譲方式を選んで
言語機能に組み込んだだけ(時系列は前後するけど)と考えることができるので、
プロトタイプベースにおいても当然存在しうる当該パターンが「オブジェクトの
用い方として pure ではない」と感じたとしても、それは 888 の(おそらくは
間違ったメンタルモデルに基づく)主観の問題にすぎなくなくない?
>>907 が間違っているとまでは思わないけど、
>>911 の論旨の通りだと思う。
クラスベースの言語でも Smalltalk みたいに不純物ゼロの物もあるし。
プロトタイプベースはフラットでプリミティブかもしれないけど、プロトタイプベース
だからピュアというのは無いんじゃないかな。
913 :
888 :2007/08/07(火) 22:56:37
>>911 そう。あくまでパターンとして存在するべきものが
言語仕様の中で固定化されてしまっているでしょ?
オブジェクトの存在だけでなく、ペアの存在までアプリオリとしている。
そこがclass指向のpureじゃないところ。
prototypeベースでの委譲は固定化されていない。
prototypeなしでもオブジェクトはオブジェクトとして存在できる。
classベースではクラス無しにオブジェクトは存在できない。
この差は大きいよ。
プロトタイプベースのオブジェクトだって結局ヒモはついている(単独では成り立ち得ない) わけだから、どこまで見えて(知っていて)それが気になるかってだけの話じゃね? それが pure とかいうと文脈がわからん人は混乱するからイヤ〜ンな感じだけど、 別の表現をしてくれればスルーできるからそうしてくれ。
>>913 は多細胞生物より単細胞生物の方が生物として pure だと思うんだろうかね。やっぱ。
>>915 は単細胞生物より多細胞生物の方が生物として pure だと思うんだろうかね。よくわからんが。
この場合、"pure" という表現が妥当じゃないという事に尽きると思う。 どちらかがより "pure" だという話をするという事は、もう一方が "impure" または "polluted" だと言っているのと同じだと思うけど、クラス機構を 持つオブジェクト指向言語が "impure" だとは思えない。 別にクラスを持つ言語に不純物が入っているというわけではないからね。 クラス自体はもちろんオブジェクトだし、オブジェクトの生成にクラスを使用 するという機構も、オブジェクトが生きる上での単なるルールであって、 オブジェクトの世界に異物が混入している訳では無いよね。 プロトタイプチェーンの存在は "pure" の内に入るのかな。
そういう例えなら、888 は、個体の維持のために(増殖には関係ない)よけいな機構を いろいろと持っている通常の生物より、自らを記述した遺伝子しか持たないウイルスを、 より純粋な生物だと主張しているように見えるよ。
>>916 やっぱり良く分かってもらえなかったか。
多細胞生物も単細胞生物も、組成の複雑さの違いや特殊な機能を司る器官の存在が
有っても、生物としては同じ様に pure だと言いたかったんだが。
そもそもプロトタイプベースの言語で書かれたクラスシステムはどうなるんだ? ありゃ不純なのか。
921 :
888 :2007/08/08(水) 07:28:22
>>915 >>913 は多細胞生物より単細胞生物の方が生物として pure だと思うんだろうかね。やっぱ。
変なたとえだね。
「細胞指向の生物として」、単細胞のほうがピュアだとおもうよ。
生物としてなら、別にpureも糞もない。
ちなみに
>>916 は俺じゃないよ。
俺は別にprototype指向のほうがプログラミング言語としてpureだと言ってるわけじゃない。
オブジェクト指向言語としては、prototype指向のほうがpureだと言ってるだけ。
プログラミング言語としては、別にどっちがpureというわけでもないでしょ。
まあ、この話でグダグダしてても仕方ないから、もうこの辺でいいよ。
「プロトタイプベースはピュアなオブジェクト指向言語である」と 「関数型言語には副作用が無い」はこの板で良く聞く間違いの 2大巨頭だな
最後のでなんとなく分かったような気がする。 888 は「ピュア」を誤って「プリミティブ」というニュアンスで使っちゃってる んじゃないかな? 単細胞やプロトタイプベースがプリミティブだって言うのなら、 なんら異論はない。
>>921 >「細胞指向の生物として」、単細胞のほうがピュアだとおもうよ。
ここがみんなが理解出来ない点だと思うんだけど、ピュア=「均質で澱みが無い状態」
の様なニュアンスで言ってるのかな? 他の人はピュア=「不純物が含まれていない」
というニュアンスだと思うけど。
>>913 クラスベースだと、クラスがなければオブジェクトが存在できない
という見方をするなら
ECMAScriptでも、callable属性を持つコンストラクタが無ければオブジェクトが存在できない
って話になるのではないかと
プロトタイプベースでオブジェクトがアプリオリに存在できる
という見方をするなら
クラスベースでも、オブジェクトはアプリオリに存在できる
と考えて支障はないし
プロトタイプベースのほうがピュアってのは、ただの希望的観測だよね?
要は、オブジェクトとメッセージこそがOOの本質であって、 クラスや継承やその他諸々は本質ではない(=必須要素ではない) ということが言いたいんではないかな?
>>926 それはみんな了解していて、それを pure と呼ぶ事にのみ疑問を
抱いていると思うんだけど
>オブジェクトとメッセージこそがOOの本質 もう 888 は出てこないだろうからちょっと話題を変えて聞きたいんだけど、 ECMAScript ユーザー的には、この「メッセージ」ってえのはどうなの? メッセージって言って違和感ないのはプロトタイプベースでは SELF や Io くらいまでだよね。 NewtonScript や JavaScript ではただの(ちょっと変わった)関数呼び出しにしか 見た目的にも意味論的にも見えないわけなんだけど。メッセージって本質として要るもんなの?
メッセージ・パッシングが本質的なのはアクター・モデルであって、 OOではない、というのが一般的じゃないですかね。 もちろんOOとアクター・モデルはよく合う。 むしろ継承やプロトタイプって考え方の方が、 混沌としたオブジェクトの海にどうやって秩序をもたらしていくかって事で、 OOの世界に必然的に出てくることだと思います。
930 :
929 :2007/08/08(水) 23:20:34
あれ?これってスレ違いだね。ごめんね。 「ECMAScriptでは」って制限つけないといけないよね。
モレはインスタンスがクラス(型)になるってのがプロトタイプベースのビックリだった。 あのドロドロした感じが、クラスベースよりLivelyな感じがする。
スレを伸ばしたければ宗教論争が一番さ
迷惑な奴らだな
>>932 Smalltalkのブロックオブジェクトは、
クロージャじゃない実装のほうが多い。
と言って煽ってみるテスト。
>>931 クラスが最初に出てきたときは違ったけど、今時は全てのクラスがインスタンス
(「Classクラス」みたいなののインスタンス)だったりするから、もはや本質的な違い
はないんじゃない?
この速さの原因には、プロトタイプベースオブジェクト指向スレが落ちてるってのもあるんだろうな。
>>928 JavaScript はメッセージというよりは単なるスロットアクセスという感じがするなあ
>>935 クロージャじゃないのは Squeak くらいだと思ってた
ANSI Smalltalk 的にはブロックはクロージャだったよね
939 :
928 :2007/08/09(木) 14:30:07
>>938 なるほど。単なる(ちょっと賢い)スロットアクセスってぇあたりでFAかな。
ありがとう。すっきりした。
>>929 スレ違いだけど念のため。
アクター理論はヒューイットがケイのOO…というか「メッセージング」という
アイデアをヒントに発展させたもの。
現在主流のOOであるストラウストラップやメイヤーの「抽象データ型」のOO
と違って、ケイのOOは「メッセージング(による動的性)」が本質だから、
なにが本質か、アクター理論と合うかどうか等々は「OO」が意味しているところ
(前後の文脈)によるよね。
文脈ないところでは、オブジェクト中心って事以上の意味はない。
でもJavaScriptってケイよりもストラウストラップっぽい匂いがするなあ。
でもケイ言うOOは、SmalltalkよりもJavaScriptのほうが近いような気がする。 888じゃないけど、なんとなくそんな気がする。 でもケイはSelfの良さは認めているけど(だからSqueakでMorphicはじめた) Selfを基盤にすることは拒否しているんだよな。繁雑すぎるという理由だったか?
>>941 具体的にはどんなところが?
ストラウストラップやメイヤーの「抽象データ型」のOOのミソは、
クラスを使って「ユーザー定義型」を表現するところにあるわけだけど…。
>>943 JavaScriptのオブジェクトって、ぶっちゃけ構造体+コンストラクタだよね。
構造体っつーよりハッシュテーブル 構造体にはメンバを動的に追加したり出来んよ
>>931 >>944 あれは代数的データ型と言ってだなry
ES4の型なんてまさに代数的データ型だろ。
さらにメタプログラミングでカオスってるが。
関数型言語知ってりゃ結構普通の概念なんだが。
>>947 ECMAScriptのオブジェクトのどこがAlgebraic Data Typeなんだ?
代数データ型に実行時にコンストラクタを追加したりできんよ?
ECMAScriptって実行時にコンストラクタを追加できたっけ? コンストラクタ関数の参照なら持てるけどReadOnlyじゃなかったか? コンストラクタとしては定義時に決定してるだろ。 Functionオブジェクトの事?
代数データ型のコンストラクタとESのコンストラクタは別物だろ。 むしろファンクタ(ry
>>952 しかしそれは仕様のバグのような気がする。
たとえば13.2.2のステップ4では"original Object prototype object"とあり、
Objectを書き換えても常に同一のオブジェクトを用いることになっている。
同様に11.1.4および類似の部分でも"original"なコンストラクタを
用いることと明記すべきだったと思う。
javascriptで仕様ミスの話といえば、複文(入れ子関数)を使った際のCallオブジェクトの参照問題だろ。 語ろうぜ!
そろそろ次スレのことも考えようか
>>954 1. 複文といったら普通は(C系の言語なら{}で囲まれた)ブロックをあらわすと思うんだが。
2. もうちょっと具体的に。仕様のどのへんが問題だと思うの?
複文ねえ、、、operational semanticsな人達は 「複文と言えば、;で結合された逐次実行文だろ」 と思うだろうな。 まあそんな枝葉末節は置いといて、俺もCallの仕様のどこがおかしいか知りたい。
良い文書を見つけられなかったのでサイ本5版でも読んでくれ。良いタイミングで新版出たから。 Activationオブジェクトとスコープチェーンとコンテキストチェーンの話してるあたりに載ってたはず。 JScriptのホストオブジェクトの循環参照が切れないのとは違う問題だぞ。
>>959 だからさ、なんで君がこういう問題だとズバリ解説できないの?
そんな突っ込みより情報があるからましじゃまいか
俺には同じぐらい無意味なレスにしか読めんが。
最近仕様分かってない奴が叩きたがってるだけに見える。
よくある「俺仕様と矛盾している」って奴ね。
サイ本5版読んだ人、サンプルコードお願い。
Callの仕様のミス、まだ〜チンチン
5版はまだ読んでないがサイ本3版にこんな例があった。
var x = "global";
function f() {
var x = "local";
function g() { return x; }
}
alert(f.g()); // undefined
f();
alert(f.g()); // local
gのスコープチェーンはgのCallオブジェクト、fのCallオブジェクト、
グローバルオブジェクトとなるため、fが呼び出されていなくても
fのCallオブジェクトが参照されてしまう、とか書いてあった。
ただし、JavaScript 1.5(Firefox 1.0.8で確認)では2度目のf.g()も
undefinedを返したし、
ttps://bugzilla.mozilla.org/show_bug.cgi?id=293782 の修正によって、少なくともJavaScript 1.6以降ではf内で定義された
関数をfのプロパティとして参照できなくなった("g" in f == false)から、
そんな古い問題が5版にもなってまだ取り上げられているのかは知らない。
それにこの問題はJavaScript固有の問題であって、ECMAScript 3に
従うなら現在のJavaScriptと同様、f.gがundefinedになるはずだし。
あれだけ盛り上がっていたのが突然clearIntervalされたような静けさ・・・
var g = (function(){ for (let i = 1; i < 1001; i++) yield i; })(); var id = setInterval(function(){ try { var i = g.next(); } catch(e) { clearInterval(id); // <- イマココ, i = 969 }}, 1000);
マヤ「スレ、完全に沈黙しました」 リツコ「なかなか伸びないものね・・・」 ミサト「GC班、スレッド回収を急いで、早く!」
971 :
デフォルトの名無しさん :2007/09/01(土) 10:14:02
今でもJavaVMをスクラッチする人がいるという 事実に感動。
スクラッチから書ける人間の絶対数は普通に増えている。 スクラッチから書けない、書く気も無い人間との比で減ったように感じるだけだな。
書けると書くには天地の開きがある。 最近どんなJavaVMが新登場したよ? 昔(2001年くらいまで)はなんかむやみにたくさんあったぞ。 Wabaみたいなパチモンもあった。 今はJITのハードルが高すぎるとか、サーバサイド一辺倒になったとかで、 誰も書かなくなった。
>>976 ちょっと前までは書く能力のある人が必要に応じて書いていたけど、
もう今はそれも一巡しちゃったんじゃないの?
いまは公式のOpenJDKもPhoneMEもあるからな。 PhoneME Advanceならプロファイル揃えればHotSpot VMでSE1.4のフルセットが使えるしなぁ。 たぶんRhinoもCDC用のブートストラップクラスと必要なプロファイルをクラスパス通してビルドすればJavaME/CDCで普通に動くと思うよ。 wm版バイナリ出てるがそのままじゃJAMが使えないけど。
なんでプログラマって「スクラッチから」とか言うの。 英語のテストなら確実に0点にされるぞ。
# from scratch 〔作業{さぎょう}などが〕最初{さいしょ}から、ゼロから、一から ◆【参考】scratch ◆【同】do something from beginning ・Louise made her wedding cake from scratch. : ルイーズはウエディングケーキをすべて自分で作った。 ・She made this cake from scratch. : 彼女はこのケーキを一から(ミックスを使わずに)作りました。
from scratch をそのまま訳してるだけでしょ。 その英語のテストを採点してる教師は首にした方が良いぞ。 Results 1 - 50 of about 22,900,000 for from-scratch [definition]. (0.17 seconds)
多分プラモデルのフルスクラッチから来ている
違いますよ
モデラー用語のスクラッチがfrom scratchから来てるわけだが・・・
scratch=引っかき傷 土の地面に木の棒で作った引っかき傷(scratch)=スタートライン
>>985 はscratchの意味すら分からない、と・・・
>>981 慣用句なんだから、カタカナにしたら訳せませんって言ってるのと同じじゃんよ。
一般人には絶対通じねーし。
「スクラッチから」で通じるんだからどうでもいいんちゃうん。俺の場合、 「最初から」や「作り直し」って言うと、 例えば進行中のプロジェクトの最初とかと意味が混同するから 「スクラッチから」って言うのは混乱を避ける意味でも使うのは正しいと思うんだが。 つーかスレ違いだろ。
>>989 >一般人には絶対通じねーし。
× 一般人
○ 馬鹿
致し方ない所ではある。
>>990 よくわからないな。「ゼロから」とか「一から」とか辞書通りに訳して混乱するケースなんかあるか?
>>991 これだからプログラマという人種は。
「ワーニング」といい、たいした根拠もなくおかしな言葉使ってるほうがバカだろ。常識で考えて・・・
ワーニングって何?
>>989 > 慣用句なんだから、カタカナにしたら訳せませんって言ってるのと同じじゃんよ。
> 一般人には絶対通じねーし。
応用力0のカスは、バカといわれてもしょうがない。
これではインド英語とか聞かせられないな。
>>993 >これだからプログラマという人種は。
何かプログラマにコンプレックスでもあるのかな?
君を助けるのは俺らには難しそうだし、専門家に
相談した方が良いんじゃないかな。
類推が利かなくなっているというのは何かの兆候
なのかもしれないよ。"from scratch" 以外にも
同じ様な症状があるかどうか、自己診断してみる
のも良いかもしれないね。