1 名前:デフォルトの名無しさん [2007/09/19(水) 09:08:01 ] 《ECMAScriptを語るスレ》 1. - 概要 - ECMA-262規格として知られる言語(通称 ECMAScript)についての利用法や言語仕様、 その他四方山話をするスレです。 - ECMA-262 3rd Edition 標準規格(英語)- www.ecma-international.org/publications/standards/Ecma-262.htm Under Translation of ECMA-262 3rd Edition (日本語訳) www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ 前スレ ECMAScript デス 2 pc11.2ch.net/test/read.cgi/tech/1088298991/ 過去スレ JavaScript デス pc5.2ch.net/test/read.cgi/tech/1052273054/
175 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:50:37 ] 逆に必要ないのはes3にしがみついているプログラマになってきちゃった…
176 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:09:40 ] HTML5と絡んでWebアプリケーションを作るための言語にしたいんじゃないの。
177 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:13:42 ] ES3のプロトタイプ指向のシンプルな美しさがES4には無いね。
178 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:12:53 ] >>117 だからといって、 javascript.crockford.com/recommend.html wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft これもあんまり。部分的にはいいとこもあるけど、なんかいいかげんで。
179 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 08:15:31 ] クラス使いたければJavaのアプレットでも作ってろっての。 JS/ESは言語仕様の無軌道な拡張よりも処理系の実装の改善をしていってほしい。 言語仕様をいじるのは、せめてpythonと比較になるぐらいの速度が出てから。
180 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 09:24:06 ] つ>>164
181 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 10:33:36 ] >プログラミング言語について語るときに仕様と実装という区別のついてない人が多すぎる。 ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night-again
182 名前:179 mailto:sage [2008/03/16(日) 11:13:41 ] >>181 実際問題として仕様と実装の区別を間違えているのがes4のstatic typingを始めとする パフォーマンス向上のための言語仕様拡張でしょ。 それよりも、パフォーマンス向上は実装の問題として扱って、 せめて他のdynamic typingな言語の処理系のパフォーマンス程度にマトモな処理系を 実装/普及させるのが先だろ、というのが>>179 の主旨。わかりにくてスマソ。
183 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:35:33 ] static typingにはsafe programmingというのもあるわけで…
184 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:12:36 ] 消火器を売りつけるようなもんか
185 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:41:02 ] >>183 ところがJS/ESにstatic typingを導入しようとしている人達は、 static typingをAPIに適用してパフォーマンスを稼いで ユーザスクリプト側ではdynamic typingのままでいいと言っている。 safe programmingのためならば、ユーザスクリプト側にこそ static typingが必要だと思うのだがね。
186 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:58:14 ] 動的型言語はコンパイラによるチェックではなくテストケースによる 安全性のチェックを行うという事になっている。そこにコンパイラに よるチェックを入れた方がより簡単に安全性を増せるよと主張するのは 野暮天。
187 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:45:57 ] 多態に対するテストケースででどーせ型に関する情報を埋め込まなきゃ ならんのだから、はじめから型情報入れられるようにした方が楽でないか?
188 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:13:58 ] >>187 > 多態に対するテストケースででどーせ型に関する情報を埋め込まなきゃ > ならんのだから、 え?あるコードで想定している「型」と具体的なクラスは全然別物なのが dynamic typingのいいところでしょ…
189 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:38:50 ] そういう意見は全て退けられてes4が出来ましたw
190 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:44:10 ] そりゃそうだけど、あるコードで想定している「型」が明示されてるなら 具体的なクラスの方は楽できるし。 www.ecmascript.org/es4/spec/evolutionary-programming-tutorial.pdf
191 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:55:44 ] es4は言語思想がes3までと違いすぎて同じ言語として扱う意味がない。
192 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:11:08 ] ちょうど今パート3だしes4のスレは分岐するか?
193 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:02:38 ] その前に1000行ったらな
194 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:21:24 ] >>191 禿同。
195 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:48:11 ] 実は言語思想などはじめから無かったw
196 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:37:08 ] 最初はNetscapeの看板機能になるためだけの言語だったからな。
197 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:52:07 ] Live Object という名前の時は輝いていた
198 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:40:59 ] >>196 >>197 Live Object はわからないが、古いこと知ってそうだから聞いてみる。 最初っから .prototype スロットって在ったの?
199 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 01:08:03 ] >>197 LiveScriptじゃないの? >>198 手元にあるJSのリファレンス本みると、prototypeはIE4.0、NS3.0からの対応みたいだから、 バージョン的に言うとJavascript1.1からの対応らしい。 最初からあった訳じゃないと思うけど、当時を知らないから正確なところは分かりません。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 02:45:06 ] Javascript 1.0になった時点で、 SunのSelfベースの言語になっているはずだけどな。 まだprototypeの機構を全て揃えてなかったのかも。
201 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 08:42:26 ] Live Documentのこといってんじゃないの?
202 名前:198 mailto:sage [2008/03/17(月) 13:15:28 ] >>199 prototype は Netscape 3.0 からじゃなかったかなーと記憶してたもんで、ありがとう。 んでちょっと調べてみた。 web.archive.org/web/19990117060741/home.netscape.com/eng/mozilla/3.0/handbook/javascript/newfunc.htm Netscape 2 からの変更 web.archive.org/web/20000823073137/home.netscape.com/eng/mozilla/3.0/handbook/javascript/ref_m-q.htm#178711 JavaScript 1.1 の prototype の説明 JavaScript 1.0 の文書は見当たらないけど、やっぱり Netscape 3.0 からっぽい。 で、Netscape 2.0 のインストーラ(n32e20.exe)探して、入れて確認したら、 javascript:function Foo(){};Foo.prototype.hello="hello";o=new Foo();alert(o.hello) JavaScript Error: prototype has no properties だった。やっぱり 1.0 だと prototype 無いのね。 function 使ったユーザオブジェクトの生成はできたけど。 javascript:function Foo(name){this.name="2chneller"};o=new Foo();alert(o.name) // 2chneller
203 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:46:07 ] >>179 >>182 mozillalinks.org/wp/2008/03/updated-web-browsers-javascript-benchmarks/ 実装も速くなってる、python 並みかは知らないが。
204 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:49:57 ] 昔はprototypeは関数コンストラクタがnewされた後に作られた。 function obj{ //hoge } a = new obj(): a.prototype.foo=function(){//hoge} ------------------------------------ 関数オブジェクト.prototype = hogeはエラー。 インスタンス.prototypeは可能。 javascript1.2までこのルールで1.3でecma-262準拠になって 関数オブジェクト.prototype = hogeが許されるようになった。
205 名前:198 mailto:sage [2008/03/17(月) 16:47:14 ] そのようで ------ function Foo(){} o=new Foo() //*1 Foo.prototype.hello="hello" o=new Foo() alert(o.hello) ------ Netscape 2.0 -> Error: prototype has no properties Netscape 3.0 -> ok: hello *1 の行がないと Error: Function.prototype has no property named 'Hello' Netscape 4.0(js1.2 だよね。not 4.06以上) だと *1 なしでもいけるけど、 プラットフォームによるかも。やってみたのは全部 win32 Ajax 以前というか Netscape4 までのネスケ全盛時代はあんまり prototype 使ってなかったと思うんだけど、納得。
206 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:12:30 ] nn4.0はjs1.3だぞ
207 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:06:48 ] NN4.0〜4.05 - js1.2 NN4.06〜NN4.xx - js1.3 だと聞いてるんだけど。 www.din.or.jp/~hagi3/JavaScript/JSTips/VersionOfJs.htm とか
208 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:25:10 ] 3月頭にRhino1.7R1が来たけどここであがってないね。 debuggerキーワードが有効になってイテレータ・ジェネレータが使えるようになったけど SpiderMonkeyでもまだ1.7は浸透してないかな。 なんかPythonぽくなってきたね。
209 名前:デフォルトの名無しさん [2008/03/23(日) 16:26:50 ] >>208 気づいてなかった letも実装されてるみたいだし これはいいね
210 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:26:56 ] 次の問いに答えなさい。 new function() { var window = {window:null}; // ここでGlobalオブジェクトであるwindowを取得しなさい。(10点) } 灘中学入試問題 2008年度
211 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 22:04:45 ] ブラウザの実装は板違い
212 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 18:05:15 ] 1.7すごいな。フィボナッチ数列が恐ろしく簡単にかけるぞ。 function fib() { var [a, b] = [0, 1]; while (true) { yield b; [a, b] = [b, a + b]; } } var f = fib(); // 100 以下のフィボナッチ数を表示 for (let i in f) { if (i > 100) break; print(i); }
213 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 00:16:15 ] 今頃どうしたんだ? 1.7の新しい処理系でも出た?
214 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 01:01:12 ] >>213 >>208
215 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 02:55:35 ] greacemonkeyで1.7が動いたらいいなあ
216 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 07:54:02 ] >211 そんなの書いたら構文エラーです。 正解は valueOf(); もしくは eval.call(null,"this"); 他にもあるかもしれません、さすが灘中学
217 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 10:56:50 ] 板違いが理解できん馬鹿は消えろ
218 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:59:46 ] eval.call これはダメだろ?
219 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:22:25 ] そういう細かいこといいだしたらブラウザの実装はGlobalオブジェクトが複数ある時点で仕様満たしてないとか色々突っ込みどころがある。
220 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:23:21 ] このスレは細かいところいっていいんじゃない?
221 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:36:31 ] eval.call(null,'this')はECMA的に言っても駄目だろ。落第。
222 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:19:27 ] >eval.call(null,'this') まあこれは力技のひどいコードであることは違いないけど
223 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:41:03 ] 力技とかじゃなくて、それでGlobalとれたらECMA違反
224 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:57:00 ] >>216 対象がブラウザっぽいのにどっちもIEで動かないので落第です先生。 (function(){ return this })();
225 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:03:04 ] JScriptはそもそもコンテキスト周りEcma満たしてないよ
226 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:06:04 ] RhinoはトップレベルコンテキストからGlobalでアクセスすると取れるんだよね。 var foo = new Global();なんてやると・・・
227 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 21:43:39 ] >>221 どこがだめなん? 15.1.2.1を読む限りでは直接呼出し以外をエラーとするのは mayであってmustではないようだけど。
228 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:36:47 ] 10.2.2
229 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 00:27:17 ] var a = this; var b = eval.call(null, 'this'); var c = a == b; cがfalseになることがある実装はECMA-262 3rdに違反。 cがどんなときもtrueになる実装はECMA-262 3rdに違反してない。 bの行で例外が投げられる実装もECMA-262 3rdに違反してない。 だよね。
230 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:59:10 ] おまいら、オレの理解を超えた会話はするな。これは命令だ。
231 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 20:08:48 ] >>230 理解できる範囲を明示してくだしあ><
232 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 20:21:44 ] print('hello, world');
233 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:03:06 ] >>230 その命令は、どのコンテキストで実行する?
234 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:13:58 ] ここじゃね? eval.call(null, 'this');
235 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:32:53 ] 正直1.6以降ついて行けませんってのどれくらい居る?
236 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 15:38:09 ] ECMAScript 1.6 ですか?
237 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:06:42 ] ついていけないっつーか、 いつになったら新しい機能を使ってもいいか タイミングをはかりかねている。
238 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:26:02 ] ローカルならいいけど、 やっぱ公になってるWebでは使えないよな。 あと3年くらい?
239 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:20:12 ] 最長一年半じゃない? ブラウザをアップデイトしない選択肢はないから。
240 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 07:31:57 ] >>239 いや、結構古いまま使ってる人多いよ。
241 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 10:19:39 ] うちのアクセスログ、今でもIE5とかある。
242 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 11:53:15 ] >>241 NS4.7とか言うのもまだあったりするからなぁ
243 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 11:55:04 ] IEなんて2のころからまともに使ったことないが シェルに食い込んでるからバージョンアップだけはやってるな。
244 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:02:45 ] マルチプラットフォームに使えるgeckoとwebkitとoperaだけ確認しておけばok。
245 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:15:22 ] IEはどのみちJavaScript動かないしね。
246 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:37:03 ] JScriptってコンテキスト周りでecmaすら満たしてなかった気がするが
247 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:28:36 ] es4はどうよ? 俺は正直イラネ
248 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:41:59 ] ActionScript同様に扱える予定なんだろ、方向性自体は悪くないんじゃね? まあ現物見てみないとアレだが、長い目で期待してるよ どうせIEでも使える日は当面来ない
249 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:35:02 ] >>247 別の言語だと思ってるので遠くから見てる。 >>248 も言ってるようにWebで使いものになるのは当分先だろう…
250 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 06:15:58 ] es3のほうが言語として美しい。es4はキメラ化した愚作。
251 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:37:52 ] 確かに言語としてはes3の方が美しいよな。 クラスベースにしたのにプロトタイプのこすとかイラネ。 まあIEがまともに実装することは永久にないのでwebでは日の目見ないだろうな。 標準クラスライブラリが多すぎるのも問題だ。
252 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 18:12:50 ] とはいえprototype.jsとか使って疑似クラスとか定義しているのが主流なのを見ると、 言語の機能としてクラスベースを取り入れるのも正しい方向性っちゃそうなのかもしれない。 既存のクラスをprototypeで拡張できなくなるのはちょっと寂しいけどな。
253 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 18:25:13 ] prototype.jsって別にいらないと思うんだがそんなにプロトタイプベースは嫌いかね?
254 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 18:39:39 ] 今のところ既存のクラスをprototypeで拡張出来るはずだが。 es4 は今がりがり仕様を削ってるところなので様子見。 es3.1 がちっとづつ進んでて興味深い(MS主導)
255 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:23:02 ] >>253 俺もprototype.jsは嫌い。 つーか、マトモな感覚してたらあんなwarning出まくりのライブラリなんて気味悪くて使えん。
256 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 01:10:40 ] そのマトモな感覚ってのがecmaの仕様理解しててプロトタイプベースも使いこなしてるって事だから 実際にajaxアプリ書いてる連中には居ないだろうな。
257 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 04:26:31 ] このスレ見て俺ってまだ勉強不足なんだなって思ったよ ああ・・・
258 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:49:16 ] 似非クラスベースやりたいだけならprototype.jsなしでも 継承モデルとか作れなくもないしな カプセル化の面で多少悩みは残るけど でもjQueryは手放せない
259 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:56:49 ] 継承させる場合はFunction.apply()使えば良いけどミックスインしか出来ないんだよな。
260 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 09:11:18 ] Yahoo UIってどうよ めちゃくちゃメソッド・プロパティあるけど
261 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 11:57:47 ] ecma-262関係ないな。
262 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 16:14:32 ] fx3がリリースされてjs1.8が登場したわけだが・・・rhinoはまだか!?
263 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 20:20:40 ] 1.8以前に1.7R2がまだ… ttp://blog.norrisboyd.com/search/label/rhino
264 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:08:11 ] SpiderMonkey の 1.8 が出てからじゃない?そうでないと仕様確定できないとか? Fx 3.0.* が結構出てからでしょ。 developer.mozilla.org/en/docs/New_in_JavaScript_1.8 もまだいまいち、JSON, Slice Syntax は js には入ってないし、 https://bugzilla.mozilla.org/show_bug.cgi?id=404734 が入ってない。
265 名前:sage mailto:sage [2008/06/29(日) 22:55:41 ] tamarin付属のescにて、 es> eval("2/1"); SyntaxError: (EVAL CODE): Binding form not legal: {/*NamespaceFixture*/ 'ns': {/*InternalNamespace*/ 'name': '<#internal (EVAL CODE)>'}} となるのはなぜですか?
266 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:43:48 ] まだ文法パースすら出来てないんじゃない? RIもそんな感じだし。
267 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:03:49 ] 文法ころころ細かく変わってるからおかしくなるのは仕方ないんだけど、 数値まわりは lexer がおかしいのかも。 RI-M2 で function test2d {...} とやったらエラー出たのはびっくりした。 (2d で数値リテラルと解釈したらしい、なんじゃそら)
268 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 15:03:08 ] >>267 function test2d() { ... } じゃないんですか。
269 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:32:35 ] >>268 typo った。スマン
270 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:17:16 ] 無名関数を #(x,y)と書く処理系があったのですが、他でも同じように書いて動くのでしょうか?
271 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 23:24:58 ] 初めて聞いたkwsk
272 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 13:13:42 ] 右シフト演算子、「符号ありが >> で、符号なしが >>>」に 決めたのはなぜだろう。 「符号なしが >> で、符号の分を更にシフトする方が >>>」って考えると しっくり行くのに。っつーかそう誤解してた。 更に、逆に解説してるサイトもある。
273 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 13:56:35 ] >>272 符号の分をさらにシフトすると何がうれしいんだい?
274 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 14:13:07 ] >>273 質問の意図がよく判らないけど、 負の数を負のまま扱えるから嬉しい。 算術シフトの名の通り。
275 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 14:25:28 ] >>274 負の数のまま扱いたければ、普通に算術シフトを使う処理系で>>すればいいだけ。 何かカンチガイしてないか?