1 :
デフォルトの名無しさん :
2007/09/19(水) 09:08:01
2. - JavaScriptについて -
JavaScriptは動的Webページ作成専用言語ではありません。
このスレでは、★言語★としてのECMAScript(JavaScript、JScript等)の話題を扱います。
ブラウザ環境でのJavaScriptはWeb製作板へ。ASP、CGIなどはWebProg板へ。
●スレ違い●なレスの例
+ JavaScriptによるWebページの挙動実現に関する疑問/質問、は、
■スレ違い■です。→Web製作板へどうぞ
+ Webブラウザの動作挙動に関するの疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
+ そのほか、Webページ作成に限定した内容の疑問/質問 は、
■スレ違い■です。→Web製作板へどうぞ
■参考■[Web製作板] + JavaScript の質問用スレッド vol.59 +
http://pc11.2ch.net/test/read.cgi/hp/1187856865/l50 ※JavaScriptが板違いと言いたい人へ
運営サイドから次のような見解が出ています。
|459 飛べない削除屋 ★ sage :04/05/30 15:38 ID:???
|>>458
|ローカルルールにはひどく単純化されて書かれていますが、
|Javascript という言語そのものが板違いなのではありません。
|用途によって板違いかどうかを判断してください。
Rhino 1.6 release 6 2007 09 01
js> print("
>>1 乙")
>>1 乙
js>
Tamarinは自己完結コンパイラに食わせてTamarinで実行するんじゃなかったっけ?
確か今、自己完結コンパイラを開発中のはず。
まあ、いずれRhinoみたいにバイトコードコンパイラもネイティブになるんだろうけど。
まあ、英語の慣用句だから日本人には解せないよなw
>>10 俺が見たときより進んでるっぽいな。まあ製品化は当分先だろうけど。
ecma-327はecma-262 ed.3のサブセットのやつか。
組み込み向けブラウザくらいでしか実装を見たことがないなぁ。
いまいちよくわからないんだけど、 1. ES4 RIでesc/src/*.esを入力としてesc/src/*.esを実行 2. esc/bin/*.abcが生成される 3. (esc/src/*.esをいじる) 4. Tamarinでesc/src/*.esを入力としてesc/bin/*.abcを実行 5. esc/bin/*.abcが生成される 6. Tamarinで任意のECMAScriptコードを入力としてesc/bin/*.abcを実行 7. 任意のECMAScriptコードが実行される 8. 3に戻る という流れでよろしい?
>>12 4と5はまだじゃないかな。
ES4 にあるけど AS3 にない構文(switch type とか)使ってるところがあるし。
インメモリにバイトコード生成して実行(Tamarin インタプリタ)
は出来始めたようだけど。
リファレンス実装M0 だと native 関数足りない(write,read)んで
試せないのが泣ける。はよ M0.5 でいいから出してくで
var f = function() {}; f.key = "value"; こいつのJSON化ってできる?
型の違いでしかないからデータとして持つ場合は無意味だぞ。 var f = {key : "value"} これと同義。 JSONにするんじゃなくて普通に文字列受け取ってエバルした方がマシ。
俺発見! isNullOrUndefined を評価する演算 (value != value - 0) これ! var a = [null,undefined,,"",false,0,-0," ","0","00",0x0]; for (var i = 0; i < a.length; i++) a[i] = (a[i] != a[i] - 0); a; IE7とFF2以外の環境でも期待する結果でる?
普通に val === null || val === void(0) と書く場合より高速だったりする?
絶対遅いこと請け合いです。 ""と0をtrueにしたかっただけなんです 決して若くもありませんが若気の至りです。ごめんなさい
val == null で十分じゃ?
!valじゃ駄目なの?
>>20 isNullOrUndefinedという名前をそのまま解釈するなら
0やNaNでもtrueを返す(0やNaNがnullまたはundefinedと判断される)からだめ。
でも「""と0をtrueにしたかった」なんて言ってるから
そもそも
>>16 の望んだ動作が何だったのかよくわからない。
cssで "" と 0 は有効な値?だからスルーしたくて だどもcss値にnullとundefinedは プロパティによってえげつない結果なるじゃない? (0 || 1) みたいにnullとundefinedだけ1の方いかないかなと思った次第です
isNullだったかNumber.isNullだったかecmaでなかったっけ?
25 :
デフォルトの名無しさん :2007/10/13(土) 06:30:59
Javascriptを勉強し始めたばかりのものですが
↓の様なブックマークレットを見つけたのですが
javascript:void(function(){var%20q=(document.all)?document.selection.createRange().text:document.getSelection();
if(!q){void(q=prompt('Google検索',''));}if(q){location.href=('
http://www.google.com/search?hl=en&oe=UTF-8&ie=UTF-8&q= '+q.replace(/_/g,'-'));}})()
if(!q)の!って何ですか?
あと
javascript:var%20q=document.getSelection();if(!q){q=prompt('Google検索','')}if(q){location.href=('
http://www.google.com/search?hl=en&oe=UTF-8&ie=UTF-8&q= '+q);}
といろいろと削っても動いたのですがもしかして問題があったりしますか?
まだJavascriptをいろいろと勉強し始めて二日と立ってないので
変な質問してるかもしれませんがよろしくお願いします
板違い
>>26 あーWeb製作板に質問スレあるのに気づかなかった・・・
すみませんでした
ところで、prototype.js作った奴は仕様ちゃんと理解してるんだろうか? 突っ込みどころがありすぎて使えないんだが。 ecma-262からみてどうだろうか?
JavaScript を ruby 風に使うライブラリに ECMA3 からどうこう言っても意味なくね
null.toString() がないのに null+"" が可能なのは誰のおかげ?
>null+"" 普通そんなことしないw なんのためにnullがあるんだよ。 そういえば標準でnullのプロトタイプにアクセスする手段はないな。必要ないが。
33 :
デフォルトの名無しさん :2007/10/24(水) 00:02:29
大丈夫
むしろ今まで貧弱すぎたかと。 これからどんどんサーバーサイドのPHP, J2EE辺りの役割を果たしていくんだろうから。 メーラ、カレンダ、メモ帳、簡易ワープロ&表計算 この辺りが全部webアプリになってきたからね。 正直、Javaみたいなしっかりしたsecurity modeを持たない Javascriptがこれほど長生きするとは思ってなかったが。
少なくともこのスレが終わるまでは ECMAScript 4はMozilla製品以外では 使われないと予言しておこう。
W3C次第じゃないかな。 一昔前ならMSが唯我独尊で無視だったろうけど、 最近はEUの思惑に結構押されているから。 C#や.NETではECMA標準の重要性を訴えているしねw しかし最近はAJAX系が増えてきて、 Javascript処理系が軽くないと、軽いブラウザとは言えなくなってきたな。
>>37 Operaも標準規格マンセーなブラウザだし、Mozillaと同じぐらいの速度で実装してくれそうだけど。
Tamarin - MozillaWiki
http://wiki.mozilla.org/Tamarin ActionMonkey, the integration of Tamarin and SpiderMonkey for Mozilla 2.
Tamarin:IronMonkey, the mapping of IronPython and IronRuby to Tamarin.
Tamarin:ScreamingMonkey, integration of Tamarin as a <script> engine in
other browsers, starting with IE.
これやね。ActionMonkey, IronMonkey,ScreamingMonkeyプロジェクトか…
SpiderMonkeyとの統合, IronPythonとIronRubyから操作, <script>を用いて
ブラウザ内で Tamarin を利用できるようにする試み。ですな
恐ろしく汎用言語化してるな。 こりゃRhinoの再実装に時間食いそうだ。 今までの実装も名前とバージョン引き継いで 別コードベースで書き直しとかした方が楽そうだと、一瞬思ったがed.3と互換性持ってるんだったな・・・。 あと、JavaScript2.0の策定に1年、実装に1年くらいかねぇ。
livescript登場した時には、ここまで普及するとは思わなかった。 インタープリター系では一番実行されてる言語だし、 Ajax関連で重要性もどんどん高まっているから、 言語としてより強力にならざるを得ないだろうね。 なんでもできることをみんな望んでいるというか。
Rhino だと Java の機能から援用できる部分もあるだろうけど それでも実装1年だろうねぇ。 es4-pre-release.M1.source.tar.gz にある spec/schedule.txt 見ると 2008 Apr. Spec deadlines - Clean enough for commercial implementaters to start using it なんで3ヶ月〜半年くらい遅れを見込んでも、来年半ばには実装に入れたらいいな。
ECMAScriptは仕様が仕様だからパーサ部分手書きだろうしね。
それはweb browser上、特にtamarinに移行するfirefox、での話でしょ? 単体の処理系はもっと早いよ。
いずれにせよ、まともなクラスシステムを持つようになって大変めでたいです。
ごめん、クラスイラネ関数型+prototypeパラダイム最高!派なんだ。 モジュラー性の確保だけで十分だったと思う。 いくらなんでもこれはやりすぎ、再学習のリスクと仕様満たした実装を作るコストが高すぎる。 けっきょく、クラス付けたのも関数型+prototypeパラダイムが理解できない連中の救済策でしかなく、 もともとここまではやるような言語じゃないんだから無理に一般に合わせる必要もないと思う。 AJAXとかいい加減うざいと思ってる。
てかプロトタイプパラダイムがあればクラスなんて簡単に実装できるじゃん。 プリミティブなままにしときゃいいのに、と思ってしまったおれはscheme脳なのか
>>50 package と namespace だけつかえばえーやん。
>>51 保護されないけどね。そこがいいんだろうけど。
ところで R6RS はお嫌い?
C もどき文法で 型付と動的型の融合は Dylan 以来の挑戦
と思うと面白かったり。Perl 6 もあるけどさ。
言語として面白いと思うが実装が普及するかどうか微妙じゃね…?
ES4って面白みあるか?
OreScript
Java ライクな拡張文法の方に意識が行くのも分かるけど 一番重要なのは互換性があるってことだろう
そんなRubyみたいなこと言わないでw
59 :
49 :2007/11/17(土) 23:58:57
>>52 自分は、ECMAScript 4も、R6RSも万歳です。
正直異なるクラスシステムの間でポートするのうんざりなんですよ。
prototype.js逝って良し
というかなんでprototype.jsがはやってんの化理解できない。 あんなライブラリ使うくらいなら自分で作るわ。 Object.prototypeの汚染は直ったのかね・・・?
自分で作る方が理解できない。 あんなライブラリ作るぐらいなら、既にあるのを使うわ。
>>60 批判するのはかまわないけど
もっとprototype.jsのことを知ってからにしたほうがいいよ
それじゃ「JavaScript?スクロールバーに文字流すやつでしょ」
といってる連中とそう変わりない
横槍で俺も一言 base2ライブラリの構造が理解できない、base2ライブラリって難しくない?
javascriptは他でやれ
var obj = { true:true ,false:false ,undefined:undefined ,null:null ,new:"new" ,if:"if" ,for:"for" ,switch:"switch" ,function:function(){} }; こゆーの定義できるんだけど、これは合法?
JavaScript 1.7以降ならOKだけどECMAScript 3だとだめだよ。 undefinedに関してはECMAScript 3でもOKだけど。
objectリテラルのキーは全部文字列と見なされるからOKなんじゃね?
70 :
デフォルトの名無しさん :2007/12/29(土) 21:56:27
メタプログラミングみたいなことをやりたいのですが、 リフレクション系の機能はないですか? メソッドを列挙したりしたいのですが・・・ rubyで言えば、Object.methods
仕様書嫁。いくらでもやり方がある。
72 :
デフォルトの名無しさん :2007/12/29(土) 23:09:01
ワカタ メソッドあったら、for-inで、列挙できるのな 最初、 for(var i in 1234) {print(i);} for(var i in "hoge") {print(i);} とか、やって、なんで、うまくいかないんだろとかおもてて、 thisつっこんだらメソッド列挙できますた サンクソ
それだとメソッドじゃなくてプロパティの羅列だけどな。
74 :
デフォルトの名無しさん :2007/12/29(土) 23:41:30
あ、本当だ・・・orz しかも、WSH/JScriptでやったら、プロパティ列挙するできんぽいし
typeof が "function" のを抽出
そもそもメソッドって概念が存在しない。 メソッドっぽく見えるのは、プロパティに関数オブジェクトが代入されたもの。
じゃあ真のメソッドってどんなのよ
78 :
デフォルトの名無しさん :2007/12/30(日) 00:29:46
JavaScript Shell 1.4
http://www.squarefree.com/shell/shell.html ここで、試してたんですが、props(this); とか Methodとか、Field全部出してくれました。
このpropsのソース参考にしてみます。
props(this);
では、ずらずらでるけど(typeof(this) = object)
props(Array.prototype);
props(String.prototype);
とかやっても、何も出ないのは、組み込みだからですか?
79 :
デフォルトの名無しさん :2007/12/30(日) 00:51:25
すいません。 とりあえず、本来、動かしたい SleipnirのJavaScript互換(JScript?)の組み込みスクリプトの for-in で、プロパティ、メソッドが列挙できないようなので、 あきらめますた。 何がやりたかったかといいますと、SleipnirのUserActionで、 ドキュメントにない、sleipnir 変数や、API変数が使えるので、 thisのプロパティになってるのかどうか、調べたかっただけなのです・・・。 Echo("do tmpScript.js"); Echo(typeof(this)); Echo("sleipnir:" + typeof(sleipnir)); Echo("API: " + typeof(API)); for(var i in this) { Echo(typeof(i)) }; やっても、for-inで何も出ねえので、あきらめ・・・ 付き合って下さった皆さん、ありがとうございました。
mozilla系の全てのオブジェクトの全ての プロパティ書き出すコード書いたらメモリ食い過ぎて落ちた事あるな。
現状のECMAScriptの仕様にはメソッドなどないと。 第4版には盛り込まれてるけどな。
関数オブジェクトと関数リテラルならあるけど。 でも結局プロパティに突っ込む。 てか、仕様書嫁。
Javascript1.7が楽しい。Pytnonからyieldとリスト内包をパクってきた んで非常に面白い言語になってる。インデントを強制されるPythonは 個人的につかう気にはならんがjs1.7はその代替になるね。 しかし、rangeは標準で入れておいて欲しかったな・・・
うん、クラスもプリミティブ実装になって、 他のscript言語を駆逐する可能性あり。 Webブラウザが味方だし。 後はCPAN相当の構築。 namespaceとpackageがあるから容易と思われ。
そういや外部ライブラリを読み込む記法って標準化されるのかな。 教えて詳しい人
>>87 ありがとう。
外部ライブラリっていうか、外部のソースを読み込む方法について聞くつもりでした。
どちらにせよ、use使えばいけるのね。
早く使ってみたい。
>>85 >後はCPAN相当の構築。
取り敢えず Python の標準ライブラリを一つずつ
ECMAScript にポーティングしていけば良いのかな
1.7つかってみてぇ!っておもったけど FireFoxだけっすか
rhinoがあるよ
rhinoは1.6です。
Rhino 1.6.R6 とかで JavaScript 1.5 機能が入ったりしてるし Rhinoのバージョンと JavaScript のバージョンって完全一致してるわけじゃないよね? そこに置いてある rhino1_7R1pre.zip は JavaScript 1.7 相当なの?
DIY, RTFM Do It Yourself, Read The Fucking Manual
js1.7相当の実装は今のところspidermonkeyだけ。
さすがリファレンスインプリめんてーしょん
というかjs1.6はspidermonkeyのGCバグフィックスとArrayオブジェトにプロパティ増やしただけのメンテナンスリリースだからな。 rhinoの方はconstとか実装してなかったから1.6相当になったのもつい最近。
>>98 前スレでも同じような話が出てたが、JS1.6が"1.6"というバージョン名を
持つにいたった最大の理由であるE4Xを忘れてもらっては困るな。
まあJS1.5.1となっていた可能性もあるわけだから
メジャーバージョンアップとも言い切れないのかもしれないが。
https://bugzilla.mozilla.org/show_bug.cgi?id=304828#c51 しかしGCバグフィックスがJS1.6の主機能の一つって言うのは
どこから出てきた話だ?GCがらみの修正なんてそれこそ
Mozilla 0.6からMozilla 1.7にわたる長いJS1.5の時代にも
JS1.6になって以降も繰り返されてることだろうに。
その話の根拠となる文書またはバグを示してくれるとありがたいんだが。
E4Xはもともとrhinoで実装されてたしなぁ。
あけましておめでとう spidermonkeyをみなおしたおれがいる
板違い&重複のjavascriptスレに抜かれそうな勢いとは皮肉だな。
spidermonkeyのライセンスってGPLかいな
***** BEGIN LICENSE BLOCK ***** Version: MPL 1.1/GPL 2.0/LGPL 2.1
Javascriptを勉強しようと思っているのですが、チュートリアル的に使えるオススメのサイトってありますか? テキストなどを処理するためのスクリプトを書いたり、将来的にはSilverlightでGUIアプリケーションを作りたいと思っていますが、 検索してもHTML埋め込みでの解説ばかりで困っています。
埋め込み以外でガチでJSを知りたいならサイ本買えば。
まあサイ本だな。 どうしてもWeb上でチュートリアル的なものをというなら MDCのCore JavaScript 1.5 Guideあたりか。
やっぱり定番はオライリーですか……。 Webで気軽に勉強というわけにはいかないみたいですね。 ありがとうございました。
>>107 MDCは求めていたものと少し違いますが、仕様が一覧で見られるだけでも大分わかりやすいです。
しばらくこれを見ながら勉強してみようと思います。
ありがとうございます。
ちゃんと言語としてJavaScriptを知るにはO'Reillyの本が一番いいよ。 はっきりいってWebで検索するよりずっと手軽かつわかりやすく効率いい。
なあ、全然プログラム解らない俺に教えてくれよ
昔、PC98にはRomBasicが乗ってて、簡単なプログラムとかが直ぐに出来たんだが、
同じ事をしようとして、VBSってのをかじってみたけど、MSはVBSの開発を中止したみたいだし、
で、くだらない質問だけど、バカにしないで教えてください。
Q1)最新のVisualStasio2008には、Jscript8.0ってのがあって、VBSとは違って開発・発展が継続してるようなんだが、
このJscript は、
http://msdn2.microsoft.com/ja-jp/library/xkx7dfw1.aspx によるとコンパイルして実行するように書かれていて、
テキストファイルのままコンパイルせずに、 WSH とか ブラウザで気楽に実行できなくなったの?
以下スレ違いだけど、アドバイス頼みます。
Q2)昔のPC98に乗ってたRomBasicみたいに、気楽にどこでも簡単なプログラミングって目的の時は、
JAVAscriptが良いの? 他になにかお勧めはないですか?
Q3)Windows Power Shell ってのを覚えると、上記の目的に合致しますか?
Q4)VisualStasio2008Express のVisualBasic を使えば、VBS見たいにコンパイルしなくても気楽に実行できる、プログラムできますか?
>>111 A1. そのとおり。JScript.NETからはコンパイル必要。
A2. 昔のBasicやってんならHSPでもやってみたらどうか。ちょっと頑張ってVBAでもいんじゃね?
A3. PowerShellは結構ありな選択肢だと思うよ。
A4. できません。VBもコンパイル必要。
結果的にスレ違いになるから続きは「くだらない質問はここにスレ」あたりにでも行ってな。
javascriptは関数型パラダイムにプロトタイプベースだから気軽には始められないと思うが・・・。 最低限、プロトタイプチェーンとコンテキストチェーン理解してないと言語仕様に付いていけないと思う。 後、勉強ならecmaの言語仕様とサイ本で十分。 まあ、どっちにしろjavascript2.0が出たら皆勉強し直しだしなぁ。
関数型的要素は意識する必要ないべ それに、既に多くの人間が気軽に使っていると思うけど
116 :
111 :2008/01/22(火) 18:47:11
親切な方、もう一つ教えてください。 Q4)ECMAScriptを覚えたら、どのWindowsPCでも、計算とか簡単なプログラム作って走らせたりできますか? 何か別にコンパイラとかインタプリタとか入れなくても、ネットカフェとか友人のPCとかでも、Windows標準状態でできますか?
>>116 とりあえずWSHやHTAなら大抵のWindowsPCで動くんじゃないか?
JScriptとJavaScriptでは変数のスコープの扱いがすこし違うくらいか
119 :
111 :2008/01/22(火) 20:08:38
ありがトン
120 :
デフォルトの名無しさん :2008/02/07(木) 04:24:44
web上の文献を読んでいたら、global スコープでの var 宣言がほとんど無意味なように感じたんですが、 global スコープでは var をつけて変数を宣言するのは無意味ですか?
処理系にとっては無意味でも人間にとっては意味あるでしょう。
var付けないとコンテキストチェーンたどって変数探す処理が含まれるから挙動は違うと思うんだが。
123 :
デフォルトの名無しさん :2008/02/12(火) 09:27:08
win = window.open(...); win.scrollBy(0,100); みたいにサブウィンドウを作って、それを親から操作することは出来ないんでしょうか?
124 :
デフォルトの名無しさん :2008/02/12(火) 13:48:58
板違い
文字列リテラルで、Unicodeのコードポイントを "\uXXXX"で指示できるけど、これはBMP内まで?
>>126 サンクス。
手元の処理系だと、サロゲートペアで処理されてた。
"abc123def".search(/[0-9](?=[^0-9])/); // = 5 "abc123def".search(/(?=[^0-9])[0-9]/); // = -1 前者は期待通りですが、後者がマッチしない理由がわかりません。 3 を期待したんですけど。
129 :
128 :2008/02/16(土) 23:13:41
prototype.js ってどのへんが便利なの?
ES4がなくてもクラスを使える。
見た目クラスなだけだろ
lispのマクロに相当することってできるの?
lips マクロでググッたらキャノンのページ記述言語が出てきたんだが lipsってあのlipsだよな?マクロなんてあったのか。
Nice joke!
136 :
sage :2008/02/26(火) 20:54:00
ものすごい記述方法を発見した!! Date.call.call("".replace, " TRIM ", /^\s+|\s+$/g, "") これなにしてるかわかるか! 使おうとは思わないけどすごいね この記述はもう知られてるの?
callってes4でなくなるんじゃなかった?
なくなるどころか汎用メソッド化されるぜ
>>136 は
Function.call(String.prototype.replace, " TRIM ", /^\s+|\s+$/g, "")
String.replace(" TRIM ", /^\s+|\s+$/g, "")
などと書けるように
後者はすでにJavaScript 1.6で可能になってるけどね
どうすごいの?単なるトリムなんだけど。
任意のコンテキストで関数呼んでる。 invokeみたいなもん。
[].slice.call(arguments)とかarray.push.apply(array, arguments)とかならたまに見るな。
142 :
sage :2008/02/28(木) 00:58:02
ちょい脱線するけど [].slice.call(arguments) より Array.apply(arguments) のほうが好き
143 :
sage :2008/02/28(木) 01:00:17
ミスった無駄にスレ消費して恐縮です。 Array.apply(null, arguments) と言いたかった
引数の数が1つでその値が数値である、ということが 絶対ないと保障されているならそれでもいいね。 だがその前にsageを覚えろ。
別に下げんでもいいよ 荒らしや厨が入ってくるわけでもないし
あらしです
ムーンサルトり乙
gotoスパゲッティや継続スパゲッティと一緒で理解する必要はないかと。 単なる遊びだから。
まあcall.callは有用に使われてるの見た事ないね
callee.callerの方が使える。
callを覚えたてのやつが誰もがやる遊びだが実用性は皆無
再帰で、関数名が変わってもいい様に arguments.callee.call()にした事はある。
バッド・ノウハウの塊だなw
俺の知ってるバッドノウハウ var o = {valueOf:function(){return 0;}}; ++o
それはバッドノウハウではなく「遊び」のような気が。
もうちょっといじればジェネレータだ
JavaScriptで、JavaScript処理系は作れるのかな。
あるよ。ググッてみて。
あるんだ。 柔軟な言語だしな。
tamarinが自己完結コンパイラじゃなかったっけ?
>>153 そゆときは本体関数の内側にクロージャを書くかな。
初期化や終了処理も追加しやすい。
>>161 あれはプロトタイプであってAdobeが使っていたものとは違うけどね。
けどかなり大きな本格的な実装。
> A partial implementation of a prototype compiler written in
> ActionScript, which will be developed by the open source community to
> implement all of the ECMAScript 4th edition specification. This will
> be a "self-hosted" compiler that is written in the language it compiles.
http://www.mozilla.org/projects/tamarin/faq.html
ecma-262やjavascriptでカリー化ってどうやろう? 数学的に考えてカリー化できればラムダ式使って関数宣言なしに全コード書けると思うんだけど。
>>167 便利だね
pythonが便利なモジュール沢山あるからそっち行ってしまったけど
c++に慣れている人にはこっちの方が書きやすい
カリー化とラムダ式オンリーだと書いてて楽しいじゃないか。 ブックマークレットでも使えるし。 Rhinoのes4実装まだ〜?
es4はプロトタイプ言語の特徴を無視してる感じで嫌いなのは俺だけ?
俺は好き。
>>170 俺も3の方が好きだ。
同じ言語だと思うから嫌いとか思うわけで
もう完全な別言語だと思うといいと思うよ…
ECAMScript4はpackageが入ったから、 CPANみたいなのができて大爆発だと思う。 perl6はもちろんruby, pythonも食っちゃうかも。
それはないな。 俺もes4より3の方が好き。 es4はプロトタイプである必要性がない。 演算子オーバーロードも要らない。可読性が落ちる。 ライブラリがでかすぎるのも実装するとき問題になると思う。 仕様が巨大すぎてwebでの要求以上のものをやっちまった感があるんだよなぁ。 学習面でも大変だし。 これがデスクトップアプリケーション作るための言語ならこれくらいの仕様で良いんだが・・・。
逆に必要ないのはes3にしがみついているプログラマになってきちゃった…
HTML5と絡んでWebアプリケーションを作るための言語にしたいんじゃないの。
ES3のプロトタイプ指向のシンプルな美しさがES4には無いね。
クラス使いたければJavaのアプレットでも作ってろっての。 JS/ESは言語仕様の無軌道な拡張よりも処理系の実装の改善をしていってほしい。 言語仕様をいじるのは、せめてpythonと比較になるぐらいの速度が出てから。
182 :
179 :2008/03/16(日) 11:13:41
>>181 実際問題として仕様と実装の区別を間違えているのがes4のstatic typingを始めとする
パフォーマンス向上のための言語仕様拡張でしょ。
それよりも、パフォーマンス向上は実装の問題として扱って、
せめて他のdynamic typingな言語の処理系のパフォーマンス程度にマトモな処理系を
実装/普及させるのが先だろ、というのが
>>179 の主旨。わかりにくてスマソ。
static typingにはsafe programmingというのもあるわけで…
消火器を売りつけるようなもんか
>>183 ところがJS/ESにstatic typingを導入しようとしている人達は、
static typingをAPIに適用してパフォーマンスを稼いで
ユーザスクリプト側ではdynamic typingのままでいいと言っている。
safe programmingのためならば、ユーザスクリプト側にこそ
static typingが必要だと思うのだがね。
動的型言語はコンパイラによるチェックではなくテストケースによる 安全性のチェックを行うという事になっている。そこにコンパイラに よるチェックを入れた方がより簡単に安全性を増せるよと主張するのは 野暮天。
多態に対するテストケースででどーせ型に関する情報を埋め込まなきゃ ならんのだから、はじめから型情報入れられるようにした方が楽でないか?
>>187 > 多態に対するテストケースででどーせ型に関する情報を埋め込まなきゃ
> ならんのだから、
え?あるコードで想定している「型」と具体的なクラスは全然別物なのが
dynamic typingのいいところでしょ…
そういう意見は全て退けられてes4が出来ましたw
es4は言語思想がes3までと違いすぎて同じ言語として扱う意味がない。
ちょうど今パート3だしes4のスレは分岐するか?
その前に1000行ったらな
実は言語思想などはじめから無かったw
最初はNetscapeの看板機能になるためだけの言語だったからな。
Live Object という名前の時は輝いていた
>>196 >>197 Live Object はわからないが、古いこと知ってそうだから聞いてみる。
最初っから .prototype スロットって在ったの?
>>197 LiveScriptじゃないの?
>>198 手元にあるJSのリファレンス本みると、prototypeはIE4.0、NS3.0からの対応みたいだから、
バージョン的に言うとJavascript1.1からの対応らしい。
最初からあった訳じゃないと思うけど、当時を知らないから正確なところは分かりません。
Javascript 1.0になった時点で、 SunのSelfベースの言語になっているはずだけどな。 まだprototypeの機構を全て揃えてなかったのかも。
Live Documentのこといってんじゃないの?
202 :
198 :2008/03/17(月) 13:15:28
昔は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 :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 使ってなかったと思うんだけど、納得。
nn4.0はjs1.3だぞ
3月頭にRhino1.7R1が来たけどここであがってないね。 debuggerキーワードが有効になってイテレータ・ジェネレータが使えるようになったけど SpiderMonkeyでもまだ1.7は浸透してないかな。 なんかPythonぽくなってきたね。
209 :
デフォルトの名無しさん :2008/03/23(日) 16:26:50
>>208 気づいてなかった
letも実装されてるみたいだし
これはいいね
次の問いに答えなさい。 new function() { var window = {window:null}; // ここでGlobalオブジェクトであるwindowを取得しなさい。(10点) } 灘中学入試問題 2008年度
ブラウザの実装は板違い
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); }
今頃どうしたんだ? 1.7の新しい処理系でも出た?
greacemonkeyで1.7が動いたらいいなあ
>211 そんなの書いたら構文エラーです。 正解は valueOf(); もしくは eval.call(null,"this"); 他にもあるかもしれません、さすが灘中学
板違いが理解できん馬鹿は消えろ
eval.call これはダメだろ?
そういう細かいこといいだしたらブラウザの実装はGlobalオブジェクトが複数ある時点で仕様満たしてないとか色々突っ込みどころがある。
このスレは細かいところいっていいんじゃない?
eval.call(null,'this')はECMA的に言っても駄目だろ。落第。
>eval.call(null,'this') まあこれは力技のひどいコードであることは違いないけど
力技とかじゃなくて、それでGlobalとれたらECMA違反
>>216 対象がブラウザっぽいのにどっちもIEで動かないので落第です先生。
(function(){ return this })();
JScriptはそもそもコンテキスト周りEcma満たしてないよ
RhinoはトップレベルコンテキストからGlobalでアクセスすると取れるんだよね。 var foo = new Global();なんてやると・・・
>>221 どこがだめなん?
15.1.2.1を読む限りでは直接呼出し以外をエラーとするのは
mayであってmustではないようだけど。
10.2.2
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に違反してない。 だよね。
おまいら、オレの理解を超えた会話はするな。これは命令だ。
print('hello, world');
>>230 その命令は、どのコンテキストで実行する?
ここじゃね? eval.call(null, 'this');
正直1.6以降ついて行けませんってのどれくらい居る?
ECMAScript 1.6 ですか?
ついていけないっつーか、 いつになったら新しい機能を使ってもいいか タイミングをはかりかねている。
ローカルならいいけど、 やっぱ公になってるWebでは使えないよな。 あと3年くらい?
最長一年半じゃない? ブラウザをアップデイトしない選択肢はないから。
うちのアクセスログ、今でもIE5とかある。
>>241 NS4.7とか言うのもまだあったりするからなぁ
IEなんて2のころからまともに使ったことないが シェルに食い込んでるからバージョンアップだけはやってるな。
マルチプラットフォームに使えるgeckoとwebkitとoperaだけ確認しておけばok。
IEはどのみちJavaScript動かないしね。
JScriptってコンテキスト周りでecmaすら満たしてなかった気がするが
es4はどうよ? 俺は正直イラネ
ActionScript同様に扱える予定なんだろ、方向性自体は悪くないんじゃね? まあ現物見てみないとアレだが、長い目で期待してるよ どうせIEでも使える日は当面来ない
>>247 別の言語だと思ってるので遠くから見てる。
>>248 も言ってるようにWebで使いものになるのは当分先だろう…
es3のほうが言語として美しい。es4はキメラ化した愚作。
確かに言語としてはes3の方が美しいよな。 クラスベースにしたのにプロトタイプのこすとかイラネ。 まあIEがまともに実装することは永久にないのでwebでは日の目見ないだろうな。 標準クラスライブラリが多すぎるのも問題だ。
とはいえprototype.jsとか使って疑似クラスとか定義しているのが主流なのを見ると、 言語の機能としてクラスベースを取り入れるのも正しい方向性っちゃそうなのかもしれない。 既存のクラスをprototypeで拡張できなくなるのはちょっと寂しいけどな。
prototype.jsって別にいらないと思うんだがそんなにプロトタイプベースは嫌いかね?
今のところ既存のクラスをprototypeで拡張出来るはずだが。 es4 は今がりがり仕様を削ってるところなので様子見。 es3.1 がちっとづつ進んでて興味深い(MS主導)
>>253 俺もprototype.jsは嫌い。
つーか、マトモな感覚してたらあんなwarning出まくりのライブラリなんて気味悪くて使えん。
そのマトモな感覚ってのがecmaの仕様理解しててプロトタイプベースも使いこなしてるって事だから 実際にajaxアプリ書いてる連中には居ないだろうな。
このスレ見て俺ってまだ勉強不足なんだなって思ったよ ああ・・・
似非クラスベースやりたいだけならprototype.jsなしでも 継承モデルとか作れなくもないしな カプセル化の面で多少悩みは残るけど でもjQueryは手放せない
継承させる場合はFunction.apply()使えば良いけどミックスインしか出来ないんだよな。
Yahoo UIってどうよ めちゃくちゃメソッド・プロパティあるけど
ecma-262関係ないな。
fx3がリリースされてjs1.8が登場したわけだが・・・rhinoはまだか!?
tamarin付属のescにて、 es> eval("2/1"); SyntaxError: (EVAL CODE): Binding form not legal: {/*NamespaceFixture*/ 'ns': {/*InternalNamespace*/ 'name': '<#internal (EVAL CODE)>'}} となるのはなぜですか?
まだ文法パースすら出来てないんじゃない? RIもそんな感じだし。
文法ころころ細かく変わってるからおかしくなるのは仕方ないんだけど、 数値まわりは lexer がおかしいのかも。 RI-M2 で function test2d {...} とやったらエラー出たのはびっくりした。 (2d で数値リテラルと解釈したらしい、なんじゃそら)
>>267 function test2d() { ... }
じゃないんですか。
無名関数を #(x,y)と書く処理系があったのですが、他でも同じように書いて動くのでしょうか?
初めて聞いたkwsk
右シフト演算子、「符号ありが >> で、符号なしが >>>」に 決めたのはなぜだろう。 「符号なしが >> で、符号の分を更にシフトする方が >>>」って考えると しっくり行くのに。っつーかそう誤解してた。 更に、逆に解説してるサイトもある。
>>272 符号の分をさらにシフトすると何がうれしいんだい?
>>273 質問の意図がよく判らないけど、
負の数を負のまま扱えるから嬉しい。
算術シフトの名の通り。
>>274 負の数のまま扱いたければ、普通に算術シフトを使う処理系で>>すればいいだけ。
何かカンチガイしてないか?
よく判らんなー。
元々は
>>272 の「>>と>>>を誤解してる人がいる」って話なのに、
>>273 が「何がうれしい」と謎の質問をしてるのが、こじれの発端だ。
嬉しい/嬉しくないっていう評価軸の話は元の質問には無関係。
>>275 も何か変な事を言ってる。
算術右シフトも論理右シフトも、ECMAScriptの話であって、
「そういう処理系で」って話は、どう飛躍してるんだ。
277 :
272 :2008/07/07(月) 15:26:46
何か話がややこしく(?)なった様で申し訳ない。
>>273 ビット操作物を書いてる時に、論理シフトを期待して>>を使ったら
MSB=1の時に意図しない動作をしたのが発見の経緯だったので、
「符号をシフトされて(私個人が)嬉しくなかった」という話。
で、>>と>>>を今の様に割り振った理由を知りたいな、と。
別に理由なんかないと思うがな。最初にそう決めたからそうなんだろう。 数学で足し算の記号に「+」を割り振ったのはなぜか? とかいわれてもそう定義したからとしか言いようがなくね?
前例があるんじゃ、そりゃ従うわ。
でも
>>272 の
>「符号なしが >> で、符号の分を更にシフトする方が >>>」って考えると
>しっくり行くのに。
はよく判る。
で、
>>273 は何を訊きたかったんだろう?
単に茶々入れたかっただけだと思うけどな
Number型は符号付きだから、 >>が算術シフトで、>>>が論理シフトである方が自然。 C言語でのsigned int + >>の多くの実装(ただし仕様的には未定義動作)と合致してる。
たぶんECMAScriptが慣例にあわせてるってのはわかってて聞いてるんだと思うんだけど… 数値型に対する演算子なんだから算術シフトの方が自然な動作で 論理シフトの方が例外的な振る舞いだよな… 「符号の分を更に…」って感覚はちょっとわからないな… シフトしてるビット数は算術のほうが少ないわけだし
284 :
283 :2008/07/07(月) 19:18:50
なんか違うなw シフトしてるビット数は同じで、「最上位ビットを0にする」っていう処理が 追加されたのが論理シフトなんだから「符号の分を更に…」って感覚は よくわからんと言いたかった。
>>280 いや、MSBを保存することを「更にシフトする」という言い方では普通は理解不能だろ。
俺もわからんかった。普通の算術シフトの後にもう1回シフトするのかと思ったよ。
>>284 わざわざ「最上位ビットを0にする」って訳じゃない。
左シフトだって、別に最下位ビットを0に「する」んじゃない。
アセンブラ経験者だと判ってくれるかな。
シフトは、左、右、算術右で、
論理型がデフォ、算術は敢えて明示するみたいな。
間違った自分はバカじゃないと同意してほしいわけですね、わかります。
結局、なんで「さらにシフトする」なんて言ったのか、ワケワカランと思うのは俺だけか? 自称よくわかった人が複数いるみたいだからw、教えてよ。 算術シフトのどこがどう「さらにシフトする」ことになるのか。
「更にシフト」じゃなく、「更にひと手間」だな。
更にひと手間つーか、MSBをイジらないだけじゃん。全然手間じゃないよ。
元の奴の感覚は判るが、言葉が悪い。 動作で<<と(空き位置に0が入るという)対称性があるのは>>>だが、 見た目の対称性は<<と>>だから、違和感がある。 と書けばよかった。
符号「拡張」っていうくらいで、 nビット(n>1)シフトする時は、 上位nビットに補填するけどな。 (いまどき1ビットづつシフトしない)
>>291 無理やり論理演算の視点になってるよ。
*2, /2だという算術演算の視点なら逆だ。
プログラマは暗黙の仮定に拘泥してはならない。
>>293 無理やりも何も、シフトは論理演算でしょ。
シフトはビット演算です。 11.7 Bitwise Shift Operators 11.7.1 The Left Shift Operator(<<) >>は符号付き算術演算です。 11.7.2 The Signed Right Shift Operator(>>) >>も符号なし算術演算です。 11.7.3 The Unsigned Right Shift Operator(>>>)
>>293 なまじ*2、/2の代用になってるからなー。
っつーか、この発想こそアセンブラだ。
なのにアセンブラ的発想は少数派になってる不思議。
C/C++みたいにbit長も内部表現も仮定しない仕様を持つ言語の「仕様を」知っ ている人と、Java,Javascriptのようにbit長規定、内部表現も暗に仮定し ている言語しか知らない人では、かなり温度差があるんじゃないでしょうかね。 前者は、言語習得時に仕様を確認する習慣があると思います。仕様を確かめな い感覚派は、アセンブラ知っていればこう考えるはずと、自分の感覚に陥って しまうんじゃないでしょうか。
ビット演算で32ビットに丸められるのは、レジスタ幅等の効率の面から判るんだけど、 整数リテラルの±2^53って、どういう根拠なんだろう。 IEEE754の64ビット表現だと、仮数部は52ビットだし。
仮数部52ビットの上に、見えない1が立ってるからでは?
本当にアセンブリ言語を知ってる人ならば符号付き演算と符号無し演算に最低限の注意は向けるはずです。 変な思い込みで符号に注意を向けない人は、生兵法でアセンブリを使っている人でしょう。
>>300 最初のネタに戻ると、間違えて逆に解説してる本やサイトがある。
そりゃ注意はしてても、まさか演算子の動作を逆に解説してるとは思わないよな。 複雑な関数やバグの確認ならともかく、演算子を事前にテストしてから使う様な事はしないし。
Webのクソみたいな解説サイトとかあてにしてたらダメだろ 書籍で間違った解説してるものがあるなら被害者を減らすためにも書名を晒すべき
今なら乗除はコンパイラ任せの*/で良いね。シフトはunsignedだけで良いんじゃね?
コンパイラの意義は抽象化にあるんだから、 シフトはビット操作にだけ使うべきでしょ。 符号の有無じゃなく。
My UNIX Series 『入門 JavaScript』、久野靖、アスキー P.43 ■2項演算子 〜(中略)〜 ●<<、>>、>>> 左シフト、右シフト、算術右シフト。 奥付では初版。 以降の版で直ってるかは不明。
まさかだけど、==と===みたいに 途中で意味が入れ替わった訳じゃないよね?
あれは痛かったなw
>>308 revision 1の仕様書を読んだが、
The left shift operator ( << )
The signe3d right shift operator( >> )
The unsigned right shift operator( >>> )
というわけで、変わってはいないようだな。
久野さんにしては珍しいチョンボだね。
久野さんって、fjでお馴染みの、 高校の情報の教科書を書いてたりする人?
fjナツカシスw
ES4では、byte型、int型, uint型が増えますが、 shift演算子の意味はES3のままのようですね。 少なくともtamarinでは、今のところそう実装されています。
だからなに?
つ お知らせ
random seed ってないのね。 まったく同じ乱数列をもう一度再現したいんだけど、 自前でそういう乱数を持つしかないか。 そういや、seed を2回設定すると 副作用で時刻が得られる言語があったよね。
tamarinは、ES4モードじゃなくてASモードの時だけ 既存のint, uintを有効にするんじゃないかな。 ES4のint, uint除外は最近のことなので、 // lib-march-2008に関連ドキュメントも至急削除のコメント tamarinはまだ追いついてないと思う。
>>316 awkだ。
srandすると、現在時刻がseedになる。
もう一度srandすると、前のseedを返す。
仕様変更しすぎだな
Number型、桁あふれで内部で勝手にfloat, doubleに昇格されると、 疑似乱数生成のアルゴリズム実装に神経使うよなあ。
var a() = function { this.b = function() {} } を、prototypeを使って書き直す場合、どうやって書けば良いのでしょうか?
なんだそりゃ var a = function() { }; a.prototype = { b: function() { } };
誰が等価なコードを望んだんだろう
326 :
デフォルトの名無しさん :2008/07/18(金) 05:17:50
aを実行しちゃっててわろた
var o = new Object(); o.f = function() { return; // 内容は何でもいい } // ←ここにセミコロン (function() { void 0; // 内容は何でもいい })(); このままだとエラーで、o.f に代入する関数リテラルの最後にセミコロンを付けると問題ない。 ここは暗黙で文の区切りにならない?
ならないからエラーになるんじゃないかな。 とりあえず{}かfuncton() {...}に対する関数呼び出しとして扱われてるはず
暗黙な 文の区切りなんて obsolete ね いつか動かないはずのコード
というか仕様書読み直して来い どの識別子が終端文字とみなされるか調べて来い
>>321 uintは欲しかったな。
ハッシュ計算、疑似乱数、ビット演算用に。
ブラウザ専用言語だと需要が少ないところだろうが。
es4は組み込み言語としての汎用性を求めてなかったっけ?
331だが、ちょっと調べてみると、 JITで型推論するからNumberあれば十分という戦略らしい。 少なくともtamarinはその方向みたいだ。 そりゃmodulo演算してれば、整数型なことが分かるけどなあ…
>>333 え、型推論をコンパイル時ではなくJITでやるのか・・・ある意味すげーな、それ。
一般の型推論は理論上NP完全だぞ。実際にはそこまで最悪なケースは滅多にないけど。
>一般の型推論は理論上NP完全 VMが型推論のパターンを学習すればいいんだ!
「できる」と「簡単にできる」は別物だろ 自分とこの処理系ならできるからいいって言われても…
337 :
デフォルトの名無しさん :2008/08/17(日) 08:30:22
ES4あぼん、か。
>>339 packageがなくなるのも確定か…
packageだけは欲しかったのに
early binding, namespaceがなくなるのはいいんだが
ES ed.4がなくなってES ed.3.1を作るってこと? まあ無難だがモジュール性の確保がなぁ。
プロトタイプベースOOP派の勝利だな。
>>341 4はなくなるわけじゃない。将来の候補の一つ。
大きく変える前に3.1を出して様子見。
MicrosoftとしてはActionscript牽制に成功。
>>342 それはまだこれからの協議。
package, early binding, namespaceがなくなること決定らしいが、
これは全く意味が分からない。
言語的にライブラリ管理補佐機構が大きく後退。
Ajaxに暗雲垂れ込める感じ。
early binding はコンパイル時エラー検出や、class や namespace を コンパイル時(静的)に決定することで速度改善と実行時書き換えによる セキュリティエラーを防ぐ、ということだったんだが複雑化と実行時定義との 衝突がうまく解決できないということで OUT package は namespace の構文糖、4月の段階で既に OUT だった。 namespace は識別子の拡張だったんだが、early binding 抜きだと 速度が落ちまくる。 ライブラリ機構は ES-ML ではいまのところ、Scheme の RSR5 というか、 Perl 類似のものを Dojo で採用されているような構文で検討中。 個人的には catchall が何とかなって欲しいんだが、namespace 抜きだと面倒そうなんだよなぁ
346 :
345 :2008/08/20(水) 18:23:47
es4にはwktkがない!何故だ!?
公式に終わってんだからあっても困る、ES3.1 は?
型指定変数宣言 var hoge:Number; も無くなったの?
それは困るなぁ
ECMAScript デス 3 が らぶ デス 3に見えたメガネ買い替えてくる・・・。
メガネより変えるべきものがあるだろ
>>353 替えの入手先の問題が。メガネは店で売ってるが。
>>354 脳へ渡す情報なら幾らでも買えるが人生は売ってないからね。
死ねば負債は清算できるぜ ES4は修正して継続するようだが。
へ?ES4は一旦清算するんでしょ? やりたきゃES3.1ハーモニーの後にしろと。
もうJITしていられんな
V8 はコンパイラオンリーな実装なんだね。 これも JIT に入るのかな。
コードざっと見たけども「V8で(だけ)速く動く」書き方がありそうなんだよ google提供のjavascript(mapsなんか)はそう書き直されるんじゃなかろうか いわゆるひとつの非関税障壁になりそうな予感
ARMあたりに対応してるからそのうちアンドロイドに組み込まれるんじゃないかと
>>362 その懸念はありかもね
他インプリもgoogleのjavascriptを基準に最適化しはじめたりしてね
アホすぎるが
ようするに方言が増えて、移植性の壁が高くなっただけだな。
修正BSDだから他も全てV8エンジンベースになるんじゃねーの これだけ速度の違いを見せつけられるとね
IEはならない。 firefoxもtamarinがあるし、XULを考えると差し換えはかなりの大作業。
Rhinoはもとから十分早いし。
>>368 firefox に tamarin が入る目はもはやほとんどないよ
tamarin jit だけ移植して終わり
ホント、タマリンはこれからどうするんだろね
MLでそんな議論になってる?
373 :
デフォルトの名無しさん :2008/09/05(金) 21:01:13
超超初歩の質問です document.write("hogehoge"); document.clear(); と書いても、clearを無視されてhogehogeと表示されます。 document内容を動的に消去したいです
document.open();
>>370-372 > The project was canceled mainly because tamarin-tracing never caught
> up to SpiderMonkey's speed. Tamarin-tracing also would have needed
> a lot of other features to be useful on the web:
https://wiki.mozilla.org/JavaScript:ActionMonkey (13:32, 4 September 2008 変更)
ML にもアナウンスはなかったと思う
tamarin自体を放棄ってことかい こりゃtamarin
chrome/JSv8の影響かな?
TraceMonkeyに吸収合併じゃねえの?
Adobeカワイソス
今のとこ
>>370 のとおり Tamarin-tracing の nanojit のみ
TraceMonkey(SpidirMonkey + nanojit) に入れてるだけ。
Adobe が使うから Tamarin-central と Tamarin-tracing の開発は続いてる。
しばらく前に DOM の GC に MMgc(Tamarin の GC) を使うか
jemalloc 利用した GC 作るかって話があったんだが、結論がどうなったか
よくわからん、後者っぽいんだけど…
>>378 コードとアイデアを Tamarin-Tracing プロジェクトと共有してるっぽい?
英語つよいひと だれか たすけて
> It is based on a technique developed at UC Irvine
> called "trace trees", and building on code and ideas
> shared with the Tamarin Tracing project.
http://wiki.mozilla.org/JavaScript:TraceMonkey
そう。 "trace trees"ってのは、 コード列を木構造にして、JIT対象単位とする手法。
v8のソース、10万行ありますね。
tamarinが15万行ぐらいだし普通じゃね?
なんでfusianasanなの?
387 :
385 :2008/09/10(水) 22:02:18
それはすごいSGだなw
ごめん、
>>389 は無視して。
navi2chのスレと間違えた。
js1.9とes3.1はまだかーーー
だって、システムソフトウェアでのかつてのCのように、 Javascript/ECMAScriptがUIの世界を支配しそうだから。
MacがWindowsを駆逐しそうだしな
インタプリタの最終進化まで行きそうだ
最初からJavaバイトコード吐いてJavaVMに最適化丸投げ出来るRhinoは楽だな。 deoptimize実装してないVMだと動的プロパティは相性悪そうだが。
SquirrelFish Extremeが早いらしいね。 リッチコンテンツ使うからどこも必死か。
> ECMAScript Harmony > Plus, as some JS implementors have noted with concern, multiple open > namespaces impose runtime cost unless an implementation works > significantly harder. これってどこかに具体的な議論ある? ES4のNamespaceが1st class objectというのはやりすぎだとは思うが、 ほとんど何もできないObjectだから問題が起きそうにもない。 もしかしてName objekutの方で、属するNamespace(qualifier属性)が immutableになってないことが問題になっているんだろうか。
>>399 > これってどこかに具体的な議論ある?
ES4-ML で実装が面倒ってのは何度も出てたけど、これは覚えがない。
> もしかしてName objekutの方で、属するNamespace(qualifier属性)が
> immutableになってないことが問題になっているんだろうか。
そうだと思う。
DOM で
script = document.createElement('script');
...appendChild(script);
のように動的に namespace object を持つスクリプトがロードされたとき、
読み込み元のスクリプトの無修飾の name を読み込まれたものと
衝突しないように、qualifier 属性を再構築しなきゃならなくなる
ということでないかな。
文字列と整数の掛け算できるようになった?
>>400 え、DOMの名前空間とJavaScriptの名前空間が一緒になるってこと?
じゃないよね?
>>402 ちがうちがう。ES4 の import とかだけ使うなら問題はないんだろうけど、
legacy な DOM を介する動的ロードするとコストが増加するってこと。
互換性のことがあるから、切るわけにもいかんのでしょ。
404 :
399 :2008/10/01(水) 17:37:31
> こう言いきっている意味は分からないな。
http://wiki.ecmascript.org/doku.php?id=proposals:modules が
harmony になる前に出された提案(というよりスケッチ)なんで
namespace が残ってる、という単純な話かも。
proposals:modules は macro の言及があるように元々 after ES4 の
ためのものだった。「議論のベース」って言ったのはまずかった、すまん。
いいとこ参照先だ。
> namespaceの全くないmoduleなんてありえないもの。
ES4 のメカニズムにおける namespace がないってことでしょう。
一般的な意味での namespace(パッケージシステム?) をどうするのか
まだ見えないけども、内部構造に namespace を持たない形じゃぁ
ないのかなと思ってる(AST になる段階で namespace が消える)
というかnamespaceのないmoduleなんてありえないよ。 FOLDOCより namespace A set of names in which all names are unique. namespaceなしじゃmoduleローカルな識別子も定義できないよ。 namespaceオブジェクトとなると行きすぎだろうけど。
>>406 そんなのcoding conventionでmodule nameをprefixとして使うとか、どうにでもできる。
elispかよw
オブジェクトを名前空間として流用する風習はあるのだから 「Rubyかよ」の方が適切じゃないかね
>>409 はあ?「Smalltalkかよ」だろ。
ルビ厨はこれだから・・・
振り仮名用の5.5ポイント活字ですね、わかります。
いきなりだけど || 演算子のハナシ。 function foo(s){ s = s || 'default string'; ... } みたいな記述をたまに見かけるんだけど、これ問題ない? s が単に true になっちゃう処理系があってもおかしくない気がするんだけど。 function foo(s){ s = s==undefined ? 'default string' : s; ... } ってこれまで書いてたんだけど、上の例のほうが短いし、慣れれば読みやすい気もする。 ただ数値の場合は 0 渡したいときに困るかね?
ECMA262より The production LogicalORExpression : LogicalORExpression || LogicalANDExpression is evaluated as follows: 1. Evaluate LogicalORExpression. 2. Call GetValue(Result(1)). 3. Call ToBoolean(Result(2)). 4. If Result(3) is true, return Result(2). 5. Evaluate LogicalANDExpression. 6. Call GetValue(Result(5)). 7. Return Result(6). (中略) NOTE The value produced by a && or || operator is not necessarily of type Boolean. The value produced will always be the value of one of the two operand expressions.
たまにどころかprototype.jsはじめそこら中で使われてるべ? むしろundefinedと==で比較する方がやばくね?
> s が単に true になっちゃう処理系があってもおかしくない気がするんだけど。 つまり、undefinedがbooleanとしてtrueに扱われる処理系ってこと? それはない。
9.2 ToBoolean The operator ToBoolean converts its argument to a value of type Boolean according to the following table: InputType Result Undefined false (略) おまけに、 > 4. If Result(3) is true, return Result(2). return Result(3)ではない。
>>415 > むしろundefinedと==で比較する方がやばくね?
やばくないです。長いので省略しますが、11.9.1と11.9.3です。
>>413 ||は、true/falseじゃなく、元の値を返すという言語仕様だから、大丈夫。
>>418 argument.length でチェックしないと意味が変わるでしょ
foo が何をする関数なのかにもよるけど 'default string' なら
>>413 の後者は「間違い」
言いたいことは一度に言って欲しいな
>>418 引数のsはnullかもしれないし、falseかもしれないだろ。ダメじゃん。
x64でうごくやつってないものか
Rhino
413 です、フォローありがとう。 今日、仕事帰りに本屋寄ったら、このスレでお勧めのサイ本売ってて、買ってきたよ。 古い本だと思ってたし、4200円と高いのでスルーしてた。 || の仕様についてちゃんと載ってたよ。 何冊か入門書読んだけど、単なる論理ORだと思ってたが、違ったんだな。 ただ "" が false に型変換されるって記述もあったので、"" を与えたい場合には やっぱり今までどおり s = s==undefined ? "default string" : s; が良い気がしたよ。ただそれ以外では s = s || "default string"; って記述もアリなんだな。いやぁ、面白いわ。 ちなみに俺ってIE4, NS4 の頃あたりに一度、JavaScript やってた人なんだわ。 v1.2 までは || が ture になっちまうってサイ本にあって、俺の記憶と一致した。 この週末、頑張ってサイ本読むわ。
>>418 いちおう s===undefinded にしなかったのは、s==undefined だと s==null のときにも反応してくれるから。
これは昔から一緒って言うか、定番の書き方だと俺の灰色の脳細胞に残ってた。
っていうか、サイ本、読んでておもしれーな。
サイ本って新版でただろ
まぢ?
>>427 金曜夜の焼き鳥を諦め、その金で買ってきたのは第5版ってやつなんだが・・・
>>428 それで大丈夫よ。427は
> 古い本だと思ってた
にひっかかって注意してくれたんじゃないかな。
焼き鳥で腹を膨らませるよりもよかったと思えることを願っているよ。
'aaaggfeeeehhh'.split(/(?=(.)\1*)/); IE6: a,a,a,g,g,f,e,e,e,e,h,h,h Firefox3: a,a,a,a,a,g,g,g,g,f,f,e,e,e,e,e,e,e,e,h,h,h,h,h,h,h Chrome: a,a,a,a,a,g,g,g,g,f,f,e,e,e,e,e,e,e,e,h,h,h,h,h,h どれが正しいんですか?
みんなちがって、みんないい。
>>434 ありがとうございます
1行ずつ解釈していったところ、どうやら同じ結果になったようです
つまりChromeが確かにECMA準拠ということですね・・・
うむむ、勉強になりました
rhino: a,a,a,h,h,h,h tamarin: aahh
そこんとこ3.1は今のところ3.0のまま。
>>436 ちょw tamarin!
tamarinってもうSpiderMonkeyにマージされてんの?
spidermonkey: a,a,a,h,h,h,h,h
kjsembed(KDE): a,a,h,h
v8: a,a,a,h,h,h,h
IE/Tamarin/kjsembedはキャプチャ括弧の内容を追加してないんだろうけど SpiderMonkeyがhを余分に出すのが謎だな
>>443 tamarin> 'aahh'.split(/(?=(.)\1*)/)
aahh
tamarin> print('aahh')
aahh
tamarin> 'aahh'
aahh
446 :
443 :2008/10/06(月) 18:28:15
>>444 あ、すまん、まったく分割されてないのね。カンマを脳内補完してた
Tamarin環境がないんだけど['a', 'a', 'h', 'h']ならa,a,h,hと出るんだよね?
tamarin> ['1','2','3','4'] 1,2,3,4
タマランw
PerlとRubyはv8と一緒だねぇ。 Pythonは分割してくれなかった。
なんでjsの正規表現エンジンって独自なんだろう?って所まで遡るわけか
正規表現の拡張は許されてるんだから WebKitとかPCRE使うならPCREの機能フルに提供しろよって感じだな
rubyの正規表現は鬼車だっけ
PCREは仕様が結構変わるし、 PCREのまんまって仕様は難しいと思う。 今でもブラウザ依存が問題になっているのに。 それから、マッチに失敗した時は、空の配列を返せばいいのに…
import pcre.*; 出来るようにならないかなあ。
名前空間ってアボーンしたんじゃなかったけ?
import pcre;でいいよ、もう。
C++0xのregexがECMAScriptの仕様を参照しているから、 こっちが変わったら向こうにも影響するかも。
正規表現で?<が使えるようにならないかな
>>457 なんでよりによって?混乱すると思うんだが
いっそSNOBOLとかIconを標準ライブラリに含めればいいんだよ。 javaあたりがやりそうで怖いけどなw
>>459 正規表現文法は数タイプ実装され、フラグで切り替えられて、
そのsyntax_option_typeの中にECMAScriptというのがある。
ただECMA282と明記された上で、さらなる改変部分も明記されているので、
大きな混乱は生じないんじゃないか。
ECMAScriptの仕様でも、もし挙動を変えるとすれば、
互換モードを付けることになるんじゃないかな。
262-3rd の 7 節を今ごろ読んでるんだけど、 lex レベルで InputElementDiv と InputElementRegExp のどちらを使うべき文脈か なんてのは簡単に決められるの?結局きちんとパーズしないと駄目?
文脈自由文法とかチョムスキー標準形とか分かりますか?
V8からOpenOfficeのUNOに接続できたら汎用言語になる?
今でも十分に汎用だよ。
Rhinoな俺にはバックのjavaのライブラリが膨大すぎるんだがw LiveConnect最高だ。
>>406 ES3.1はグローバルな名前空間一つしか用意しないで、
moduleを導入するみたい。elispやschemeのように。
>>399 のような難しい話じゃないみたい。
とにかく仕様を整理しないといけないから、
構文も意味も全くいじらないで3.1を出す。
いじるのは4で入れる。
ただしコンパイル環境と実行環境でそろえないとまずいもの、
静的型チェック、名前空間などは入れたくないということらしい。
http://ejohn.org/blog/ecmascript-harmony/#comments まあ、静的型チェック、名前空間があろうがなかろうが、
プログラムを書いている時と実行している時の
モジュールの仕様が変わったら、問題は出るはずなんだけど。
それを起こさないためのドメイン名風階層名前空間と
バージョン管理なんだから。
>>468 ES3.1 draft に module 関係の言及はないと思うけど…後はいいけど。
え? elisp にモジュール入るの?
そういえばActionMonkeyが取りやめになったって、 MozillaがTamarinのGCを使うとかいってたのはどうなったの? TraceMonkeyのGCはSpiderMonkeyのままなの?
>>471 Mozilla Developer Conference 2008 で講演してた浅井さん曰く、
Tamarin の GC 取り込みはやる予定だが Fx 3.1 (Gecko 1.9.1) には入らないんだとさ
Fx 3.2 とか Fx 4 以降になるんじゃないかっていう話だったと思う
詳しく覚えてる人いたら詳細求む
Tracing JITも同時に入れるって話じゃなかった? tamarinのソースを少し読んだがあまりの汚さに驚愕。 入れるの取り止めになって正解。 あまりのことにMozilla弱体化の陰謀かと思ったよ。 Action Scriptの仕様は結構好きなんだが。
3.1にObject.seal()入るんだ。freeze()も。 よかった。
前方互換が無くなるだけで不要な機能だろ 無用な方言を増やすだけの概念
class, moduleその他、 動的に変って欲しくないオブジェクトのために必要なんだよ。
seal も freeze も、Object.defineProperty の糖衣構文だと思う やってることは「内部プロパティを変更」という点で共通してる あるととっても便利(特に [[Enumerable]] の変更)
便利かどうかなんて訊いた覚えはないがありがとう。 >“前方互換が無くなるので不要な機能” forEach とかクラスメソッドは 3.0 でも Array や prototype を事前に拡張することで対応できる。 しかし Object.defineProperty は? IE6 と IE7 で動かすためには __*** とか適当なプロパティ作って、 forEach をそれを見るような実装で上書きするような実装しか今俺には思い浮かばない。 とここまで forEach がある Array ならいいが Object には Enumerable 関数は考えられてない(アホだよな)から for in に対応できるような実装は不可能。 4.0 から 3.1 にした意味は?中の人は何も学習してないんだろうか。
>>478 seal, freezeに関しては、
重要なのは提供方法ではなく、
・Objectが[[extensible]]でなくなる
・propertyが[[flexible]]、[[writable]]でなくなる
そのための方法があること。
これでライブラリー内部のエラー処理がずいぶんと楽になる。
ライブラリーユーザ側のデバッグも。
[[enumerable]]に関しては、
今のままではdirty hackの巣窟になりそうで、
何とかしないといけないとは思うけど、
前方互換の問題があるから慎重にやるべきだと思う。
特にメタな仕組みを持つライブラリに影響が大。
for in抽象はもうちょっとうまく整理するやり方があったと思う。
Javaのcontrol invacation syntaxみたいな。
Object.forEach みたいな関数が出てきたとして、 Object はルート要素なんだから、全てのオブジェクトに forEach が無いとおかしい罠。 元はと言えば Object をハッシュのように使った“慣習”のツケなんだけど…
>>481 > 元はと言えば Object をハッシュのように使った“慣習”のツケなんだけど…
kwsk
実装自体は連想配列なのに、使ってはならない理由があったの?
Array のようにちゃんとデータ型として規定されてれば、 メソッドやプロパティの名前空間とぶつかるような実装にはならなかっただろうし、 enumerable のアリナシに四苦八苦することも少なかっただろうって話
要はHashとかDictionaryとかいう型を別に作っておけばよかったということだな 中身はObjectとまったく一緒でいいけど
特殊な組み込み型を用意するんじゃなくて、
そういうものを実装できる機構があればいい。
[[enumerable]]に関しては、
>>481 の言うようにforEachはどのObjectも持つようにして、
for inはforEachメソッドを呼び出すように再整理するのがいいと思う。
Property attributeによる整理で基本的にはうまくいっている。
486 :
482 :2008/11/25(火) 12:16:11
thx > 要はHashとかDictionaryとかいう型を別に作っておけばよかったということだな 言われてみれば激しく同意だなー
>>484 そうすると、ESのESたる特徴がなくなってしまいますな。
つーか、それ、何のJavaの亜流?って感じになっちまう。実際なりそうだけど。 orz
ボタンAを押すと自動的にボタンBを押すスクリプトはどう書けばよろしいのでしょうか?
>>488 click()
たぶんスレ違いだからJavaScriptスレ池
490 :
488 :2008/11/26(水) 13:36:50
いえ、ecmaです。 よろしくお願いします
ECMAScriptの仕様にボタンはない
494 :
488 :2008/11/27(木) 12:19:04
ありがとうございます。 行ってみます
JScript「ecmaよ!私は帰ってきたぁー!!」
496 :
デフォルトの名無しさん :2008/12/26(金) 06:46:44
ECMAScript の仕様書に出てくる "NoIn" って何を意味するんだぜ?
498 :
496 :2008/12/26(金) 16:06:40
499 :
デフォルトの名無しさん :2009/01/03(土) 19:39:07
499
500 :
デフォルトの名無しさん :2009/01/03(土) 19:39:27
500
ナットシェルのgood partが翻訳されて並んでたよ。 いい本だからお勧め。
宣伝乙
いやいや久々のECMA的Javascript本ですよ。
宣伝乙
2chの悪い癖だよね。 すぐに「社員」だの「工作員」だの。
>>505 ただの相槌だから、
全く無反応よりはまし、と思っとけばよい。
しかしnew使うなって言われるとちょっと違和感あるな。 個人的には関数はlowerCamel、コンストラクタはUpperCamelで 名づけるという「規約」をしみこませればそれでいいと思うんだけど。
使うなとは書いてないよ。
>>507 は読んでるから知っているだろうけど、
コンストラクタをnewなしで読んで、グローバルなthisを変更するミスを防ぐために、
UpperCamelでnew向けに書かれていることがはっきり分かるようにするといい。
もっといい対処方法はnewを使わないこと。
と"bad parts - new"の節に書いてある。
「ミスを防ぐためには」が前提の工夫の話。強制はしてない。
なんで関数はlowerCamelなの? キモい
new 自体は使っているが、それを「見せないように」する、というハナシが書いてある(Object.create を実装するときに内部で new 使ってる) ちなみに、Object.create は ECMASCript 3.1 の WD で定義されてる
ファクトリメソッドってやつか。俺はnewの方が好きだな。
var a = new Hoge(); と a = {}; a.prototype = Hoge; Hoge.call(a); って等価?
call()の第一引数は関数として呼び出すしcall()は戻り値がundefindだから別じゃない?
ミス:call()は戻り値がundefind call(a)は戻り値がundefind
>>512 は改めて見ると間違ってた
var temp = {};
temp.__proto__ = Hoge;
Hoge.call(temp);
var a = temp;
これなら等価かな?
temp.prototype(); でいいけどね。
すみません、教えてください。 ↓のように二次元配列mを定義してwebブラウザのdocument.writeで 表示させてみると、定義の仕方によって表示が異なるのはなぜでしょうか。 また、【2】のように定義した場合でも、mに書式を与えて出力する関数を 書かずに【1】のように表示させる方法はあるでしょうか。 【1】リテラルで定義 var m = [ [ 1, 2 ], [ 3, 4 ] ]; document.write( m ); // 1,2,3,4 と表示 【2】コンストラクタで定義 var m = new matrix ( [ 2, 2 ] ); //要素が空の2x2配列を生成 hoge(m); //適当な関数で各要素に数値を代入 document.write ( m ) // [object Object] と表示 //matrixの定義 function matrix (size) { //sizeは[行数、列数]の形の配列 var i; this.length=size[0]; for (i=0; i<size[0]; i++) { this[i]=new Array(size[1]) }; }
>>517 1はArray.prototype.toString()の結果でそうなる。
2はmatrix.prototype.toStringを定義してないから
結果的にObject.porototype.toString()が使われる。
4月でRhinoリリース10周年
まじ?もうそんなたつの?
MocaScript時代入れるととっくに10年過ぎてるSpiderMonkeyも思い出してあげてください。
Spidermonkeyのソース読むと目眩するわ。 Connect, connect、どんだけ接続すんのかと。
なに、NN5のソースに比べたらry
mozilla関連のソースコードはもはやレガシーコード いわばバベルです
Fx4 (Mozilla 2) でその辺り整理するんだっけか
Firefoxのコード見たらなんかキモかった
NN5のソース見たらもっときもいぞ。 そもそもWinMain自体間違ってるとか・・・
サイ本を超えるJavaScript(EcmaScript)本って出ないんだろうな。 そこまでいったら仕様書暗記しろレベルなんだろうな。
俺はgood partがECMAscript本のベスト1だと思うよ。
OperaはCSSもそうだが特定の目的にのみ特化して最適化されてるから鵜呑みにしない方が良い。 汎用で早い部類に入るのはRhinoのコンパイルモードくらい。
>>531 ・Opera同士の比較である
・SunSpiderという標準的なベンチを使ってる
ということで、一行目はちょっと的外れかも。
good PartsはDouglas Crockfordが著者だっけ? JSONとかAjaxとかアホらしい。
>>533 は先入観が激しくてプログラマには向いてないな。
いや、俺もAjaxは今やるのアホらしいと思う。 DOM-level3が全部勧告されてからにしたい。 イベントモデルが標準化されんことには……
やる・やらないを技術の内容で決めてどうすんのさ。手段でしかないのに。 まぁ、やりたくない→やらなくて済む ならそれはそれで幸せだが。
手段でしかないなら、普通はその技術の内容で やる・やらないを決めると思う
やりたいことがやれるかどうか、じゃねえの?
Good Partsは、Ajaxのことは書いてない本
>>533 はそういうことには触れてないくだらないボヤキ。
やるやらないじゃなくて やれるやれないじゃないの?
>>535 今から歩いて、道を作っておくのも悪くない。
ハムレットかよ!
この流れは…… XMLHttpRequest(とXMLDocument)が ECMAの組み込みオブジェクトになるフラグですか?
そもそもJavaScriptだけがなぜかEcmaで標準化されたのか? W3Cがやっておけば関連仕様との調整もスムーズに行きそうなのに。 DOMとかXMLHttpRequestって絶対言語に食い込んで来ると思うんだが。 jsは元々DOMを操作するための言語だったし、js1.4で仕様が切り離されるまでは・・・。
W3CはJavascript否定路線だったもん。 W3C自体今はかなりやばい立場だし。
W3CはNTTのせいでNGNが完全にバズワードになってるのがカワイソス。
Compact Profileはeval入ってないのか。 JSONじゃなくXMLだけでAjaxやれってこと?
JSONはes4で読み込みライブラリが付くはずだったけど3.1はどうなるんだろう。
>>551 もう3.1はこのドラフトで殆んど出来上がってるように見えるんだが
あと何が足りないんだ? さっさと勧告してほしい。
遅れれば遅れるほどIEのJS2の実装が延びる……
MSが実装をどうするかなんて標準化作業の進み具合とはあまり関係ないだろ。 直接MSにこれはこうだからこうしろと文句いうほうが10倍は影響力がある。
IEなんざapplication/ecmascriptどころか application/javascriptすら読み込まないじゃねーか 当分無視でいいだろ。
>>553 IEのスケジュールに影響するから早くしろって言うのか?
JScriptなんて元々眼中にない。 Ecmaに限ったことじゃないが今まで散々標準に準拠しなかったのが最近になって対応をやってるが ブラウザ界だとIE8を超えれば落ち着くだろう。(もちろん、ろくな標準準拠は果たせず) XML関連はもっと悲惨だろう。 今の実装を捨てない限り永久にまともな実装は出てこないだろう。 結果、相も変わらずIEは無視したいができない現状が続くかと・・・。
IEの何が悲惨って、 実装が糞のくせにOS組み込み型だから アップデートが遅いのが一番悲惨 Chromeみたいに一定周期で安定版を 出してくれれば、まだ救いがあるのに
559 :
デフォルトの名無しさん :2009/02/14(土) 08:13:14
IEならWindowsUpdateがあるじゃないか ただ大田総理が「今までできてたことができなくなるからUpdateイラネ」って言ってた。
敢えてアップデートはせずに脆弱性突かれ放題にしておくんですね。分かります。
大田総理が言いたいのは 「今まで脆弱性を突き放題できてたことができなくなるから皆がUpdateするのイラネ」 ってことじゃね
562 :
デフォルトの名無しさん :2009/02/28(土) 11:19:06
stringオブジェクトについて少し質問です。 標準仕様にあるtoLowerCaseメソッドとtoLocaleLowerCaseの違いについて知りたくて調べております。 標準仕様によると > 正規 Unicode 文字マッピングで言語の規則が干渉する (たとえばトルコ語のような) ごく一部の文字でのみ違いが存在する。 とありますが、この文章の意味はいったい何なのでしょうか? 最初はドイツ語のウムラウト(Ü)等、英語のアルファベット以外も正しく小文字に変換するのだろうと思っていたのですが ドイツ語やフランス語でも(toLowerCaseメソッド/toLocaleLowerCase)の双方で結果が同じでした。 キリル文字(ロシア語)のグレイヴ付きЕ、グレイヴ付きИだけ、ブラウザごとに違いが出ました。 正直浅学を恥じますが、少々でも知識のある方いらっしゃいましたらご教授お願いいたします。
実装依存じゃないのかな。
トルコ語の例というのは多分Iとİのことでしょう。 通常ならIの小文字はiですが、トルコ語にはIの他にİという文字があり、 iは後者の小文字として扱われます。 I → ı İ → i この辺をきっちり処理するのがtoLocaleLowerCaseなのではないかと。
565 :
562 :2009/02/28(土) 15:28:43
なるほど、そうなると日本語を選択した環境では 「I」、「İ」共に小文字のiが返るのが仕様上正しいのですね。 一応各ブラウザ上での動作です。 IE:I→i,İ→İ Firefox:I→i,İ→i Opera:I→i,İ→i Saari:I→i,İ→i ieだけlocaleLowerCaseで大文字のİが返ります。 グレイヴ付きЕ、グレイヴ付きИでの変換の結果が違うのは、マイナー文字なので対応が遅れているだけなのでしょう。
そういやString.toLocaleString()って仕様上はロケールに合わせた文字列を返すんだよな。 SpiderMonkeyの実装だとObject.toLocaleString()はtoString()を返してArray,Number,Dataしかオーバーライドされてないんだが結局これも実装依存なんだろうか?
567 :
562 :2009/02/28(土) 23:38:57
> Object.prototype.toLocaleString() > この関数の最初のパラメータは、この標準の将来のバージョンにおいて使用されそうである とあるので、Objectではこれで良いのでしょう。 Arrayは、飛ばして議論をすると Date > ホスト環境の現在のロケールの慣習に該当する形式の Date の表現が意図される。 Number > この関数は実装依存で、 toString と同じものを返すことを許可されているが推奨もされない。 となっているので、仕様では何も定めていませんね。実装依存でしょう。 しかし、実際に調べてみるとブラウザ毎にまちまちになっていますね。 document.write( (1000).toLocaleString() +"<br />" ); document.write( (new Date()).toLocaleString() +"<br />" ); Dateオブジェクト IE 1,000.00 Firefox 1,000 Opera 1000 Safari 1000 Numberオブジェクト IE 2009年2月28日 23:16:34 Firefox 2009年2月28日 23:14:51 Opera 2009/02/28 23:16:00 Safari Saturday, February 28, 2009 23:15:29 見た感じではFirefoxが一番頑張っていて、Opera、Safariは日本語環境を考えていない印象を受けますね。 これは日本語環境下での動作でしょうから、他言語ではどうなるのかが気になりますが…
そのOperaの日付表記は、明らかに日本語環境の短い形式でしょう。
ちなみにC#(というか.NET)でこういうことすると、こういう表示になる。 ----- Console.WriteLine(DateTime.Now.ToString(new CultureInfo("ja-jp").DateTimeFormat)); Console.WriteLine(DateTime.Now.ToString(new CultureInfo("en-us").DateTimeFormat)); Console.WriteLine(DateTime.Now.ToString(new CultureInfo("en-gb").DateTimeFormat)); ----- 2009/02/28 23:56:31 2/28/2009 11:56:31 PM 28/02/2009 23:56:31
yyyy/mm/dd time方式ってRFCになかったっけ?
それかどこかで標準化されてないっけ?
んで結局
>>567 はString.toLocaleString()の話をしてないのはなんで?
#Data.prototype.toLocaleString()はSwatch Internet Timeを返すべきだと思うんだ。ブラウザの実装だしとかいってみるw
ISO8601にある。
ISO8601で'/'は範囲(期間)を示すから違うのでは? 2009-03-01T01:05:23+09:00って形式でしょう。
573 :
567 :2009/03/01(日) 07:38:14
なんだか知らない単語が吹き出してきて少し困りました…
とりあえず、ちょっとだけ整理のために…
Object.toLocaleString()はオーバーライドされるために定義されてだけなのでtoString()と同じで良いし
Array.toLocaleString()は、他のオブジェクトのtoLocaleStringで文字列化してから連結する、なのでこれは無視して良い。
なので問題はDateとNumberオブジェクトでどうするかなのだと思うのです。
仕様を読むと次の様になっています
> Date.toLocaleTimeString()
> この関数は文字列値を返す。文字列の内容は実装依存であるが、現在のタイムゾーンの、簡便で人間に読解可能な、ホスト環境の現在のロケールの慣習に該当する形式の Date の "date" 成分の表現が意図される。
> Number.toLocaleString()
> ホスト環境の現在のロケールの慣習に沿って整形される Number の値を表す文字列値を生成する。この関数は実装依存で、 toString と同じものを返すことを許可されているが推奨もされない。
「2009-03-01T01:05:23+09:00」の形式に関してはHTMLの[DATETIME]形式ですね。
http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/types.html#type-datetime ISO8601に関してはググったらwikipediaに該当項目がありました
http://ja.wikipedia.org/wiki/ISO_8601 私の場合は、ロケールの慣習に該当するというのは「○月×日」みたいな感じに返してくれるのが正しい様な気がしたのですが、んー知識不足です。正直言って。
574 :
567 :2009/03/01(日) 10:45:13
あとすいません忘れてました。String.toLocaleStringは標準仕様では存在していなかったです。 なのでプロトタイプチェーンを手繰ってObject.toLocaleStringを呼び出しているはず…。
>>573 おかしいよその仕様。どこで見たの?他と取り違えてるかコピペミスしてるよね。
原文を当たるまでもないが、一応:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 15.9.5.7 Date.prototype.toLocaleTimeString ( )
This function returns a string value. The contents of the string are implementation-dependent, but are
intended to represent the “time” portion of the Date in the current time zone in a convenient, humanreadable
form that corresponds to the conventions of the host environment’s current locale.
576 :
574 :2009/03/01(日) 15:51:10
あ、申し訳ございません。
ご指摘のとおり、私のコピペミスですね。
Date.toLocaleString()の方をコピペすべきだったのですが…。
原文と邦訳の方載せておきます。
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-9_Date_Objects.html > この関数は文字列値を返す。文字列の内容は実装依存であるが、現在のタイムゾーンの、簡便で人間に読解可能な、ホスト環境の現在のロケールの慣習に該当する形式の Date の表現が意図される。
> NOTE この関数の第一引数は、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨される。
> 15.9.5.5Date.prototype.toLocaleString()
> Thisfunctionreturnsastringvalue.Thecontentsofthestringareimplementation-dependent,butare
intendedtorepresenttheDateinthecurrenttimezoneinaconvenient,human-readableformthat
correspondstotheconventionsofthehostenvironment*fscurrentlocale
> NOTE
> Thefirstparametertothisfunctionislikelytobeusedinafutureversionofthisstandard;itis
recommendedthatimplementationsdonotusethisparameterpositionforanythingelse.
みなさま、申し訳ありませんでした。
3.1の仕様マダー?
ははは
ES4は欠番なのかぁ
ES4には絶対しないって意思の現れだね。
次は3.14だな
ActionScriptとの統合もなさそうだなあ
>>583 作者死亡と共にバージョンπになるんですね
クヌースは何歳まで生きられるんだろう?
スレチかも分からんけど、ECMAScriptってMIMEでバージョン指定できたっけ? たとえばapplication/ecmascript;version=3.0みたいな。 できないと3.1が出てからクロスブラウザ対策が面倒になるんだよなー。
ActionScriptはどうなっちゃうの?
ASがESに合わせて仕様を変えるんだろ。
なんというなみだ目
先走りすぎただけだ。 ASはASで生き残るかもよ
ActionScriptはいいところ一杯あったけど、 開発者メーリングリストとソースコードを読んで、 大雑把な仕様策定に汚いコードでびっくりした。 擁護する気が萎えた。
完全に振り回されたなASは AS2のような AS3仕様で開発可能なES5準拠のAS4を出してくれw
jQueryを今頃発見してるけど、なんとなく動的にDOM管理するのに 慣れない。 PHPでCSSのクラスかいていい気になってたんじゃ とてもじゃ無いけどやってけんらしい。
見放されたASプログラマがGnashに集結して・・・・って展開はないかな
終結してどうすんだよ AS書くのとAS実装を書くのは全然違うぞwww
終結とは巧いじゃないか
セルフコンパイラというものがあってだな
rhino 1.8マダー? ジェネレータ式ないとコード長すぎる。
604 :
デフォルトの名無しさん :2009/08/01(土) 00:21:20
DoJo の話題はこのスレで良いですか?
DoJo の話題はこのスレでよいですか?
DocomoのJava環境のこと? 最近のは知らないが違うんじゃないかな。
>>606 チミが場違い
と言われかねんぞ その発言はw
>>604-605 きっとボケたんだよ。
「どうじょ(どうぞ)」って返してほしかったんだと思う。
イマドキJavaとJavaScriptを混同するようなやつはいねーよ。
この板に張り付く様な奴は、JavaとJavaScriptを混同することは無いと思うが、 デザイナ上がりの自称Webプログラマーとかいう奴で、JavaとJavaScriptの区別のつかない奴にあった事ある(3人程)。 その内一人は、客先でJSをJavaとか言う出すもんだから「弊社のサーバではJavaは実行できない」とか客に言われて、 訂正の連絡を入れる羽目になった。 そいつは、もうオレと同じ職場に居ない...
611 :
606 :2009/08/03(月) 16:08:48
なんか俺のせいで変な方向にスレがすすんでる。 dojoをdojaに見間違えてただけなんだが、 正直すまんかった。 dojoはAjaxなどへのjavascriptの応用技術なんだが、 このスレは言語規格を扱うスレなんでスレ違いということ。
> dojoはAjaxなどへのjavascriptの応用技術なんだが、 痛々しいぜ
えっ? ネタでスレをだらだらと進めているかと思って楽しんでいたのだが... マジっすか!
MozillaとRhino以外にJS1.8に対応の処理系ってあるの?
JS1.8の拡張はESと関係ないからスレチじゃね
616 :
デフォルトの名無しさん :2009/09/05(土) 00:08:44
>>2 に
>このスレでは、★言語★としてのECMAScript(JavaScript、JScript等)の話題を扱います。
って書いてあるからOKかと思ったんだけど
だーかーらー JS1.8ってECMAの仕様と関係無いモジラの独自拡張だろって言ってんだよ JavaScript関係なら専スレがこの板にもあるからそっち池
>>618 それ言いだしたらJScriptとか独自拡張の産物だろw
JavaScriptスレはここにwebネタを持ち込まないための隔離スレ以外のなにものでもない
新スレ立っちゃったのが正直残念
>>619 独自拡張も何も、JScriptとJavaScriptは本来別物だろう
ECMAScriptって呼べるのは後から作られた標準規格に当たる部分と、E4X拡張だけ
最新バージョンのJavaScriptやJScriptに対して、ES規格は標準化のためのサブセットであって
ES規格からはみ出た部分はそれぞれの独自拡張でしかない
621 :
デフォルトの名無しさん :2009/09/05(土) 05:53:07
×独自拡張の産物 ○ゲイツのエゴの産物 Rhinoはまだjs1.8対応してないぜ >JScriptとJavaScriptは本来別物だろう JScriptは別物だがjsはルーツだからべつものではないだろ。 ecma-262はjsの共通仕様にすぎん。 ecmaは その共通仕様部分以外関与しない方針なんで実質ベンダーの仕様とその実装されたエンジンの話が出てくるのは仕方がない。 まあJavaScriptってもDOMとLiveConnectはスレチだろう。
624 :
デフォルトの名無しさん :2009/11/07(土) 02:47:40
仕様書丸暗記して出直して来い。 間違えだらけで書き切れんわ。
>>624 2年くらい前に見て、ないほうがよかったと思ったやつだな
>>624 すべてがハッシュとして記録される、っていうのは
仕様として決まってたっけ……?
いや、見た目がハッシュなだけで内部の実装に影響する記述はない。 Object objectがハッシュ風にアクセスできるだけ。 プロパティのインデックスでもアクセスできるのにハッシュだと定めると都合悪いっしょ。
整数以外のインデックスでアクセスできるのが、 ハッシュテーブル・インターフェースの特徴でしょ。
それは連想配列の特徴だな そしてハッシュテーブルによる実装が主流とはいえ手法は他にもある 例え現存する全てのECMA実装がハッシュテーブルを選択していたとしても 仕様として決まっているとは言えない
Rhinoだと効率重視なのか自前のハッシュだった。
ツリーによる実装でもいいしね。
es5のFunction.prototype.bind()とかObjectのプロパティ操作系拡張って誰得? プロパティ操作が標準化されるのはまだいいが。 バインドとかいまでも当たり前の機能でしょ? そんなことより var calc = (function(){ var a=0; this.func = function(x){ return a + x; } return { inc : function(){ return func(1); } } } )(); calc.inc(); こんなコード書かなきゃプライベートなメンバ定義できないのを何とかしてくれ。
クラス指向はes4と一緒に死んだんだよ。
クラスが作れないのに「私をクラスにして」と言わんばかりの文法だからイライラするw
AdobeのActionScriptは独自路線を突き進んでいますが、 これをECMAが取り入れてほしいともうのだが、駄目だろうか? 時期、Flash CS5 では、なんとiPhoneのプログラミングもできてしまうというので、 ActionScriptのバージョンも上がるかもしれない。 ECMAScriptの未来はActionScriptの中にあるとおもうのだが、どう思うだろうか?
>>636 iPhone用のプログラミングができることと、ActionScriptの仕様は別の話
あれは確かActionScriptをObjective Cにコンバートするような代物だったはず
あと、ActionScriptが採用したES4仕様案は廃棄されたから、ぶっちゃけお先真っ暗
次期ECMAScriptは5(旧3.1)になるし、一部ES4仕様も5に入ってるから、それでいいんじゃない?
638 :
636 :2009/11/10(火) 12:37:41
>>637 >あれは確かActionScriptをObjective Cにコンバートするような代物だったはず
そうだったんですか!勘違いしていました。
実際、ActionScriptのお先真っ暗というお話を聞いて、少し悲しくなりました。
ECMAScriptの進化はゆっくりしているようですが、
HTML5がメジャーになれば、今よりも速いスピードで進化していくのでしょう。
そうしたら、ActionScriptも淘汰されてしまうのでしょうね...orz
HTML5とECMAScriptは関係ないよ そこゴッチャにするとまともな議論なんかできない ひと昔前にW3C DOMとECMAScriptをゴッチャに考えてた輩と同じ思考してない? ActionScriptがどうなるかは、次期ActionScriptがどうなるかと、Flashをとりまく情勢がどうなるかで決まると思う 世の中にはHTML5とFlashを同列に語ってるバカも多いけど、そもそも大元が違いすぎるから比較するだけ無駄 何だかんだでHTMl5とFlashはうまく棲み分けされてくんじゃないかな 結局、ActionScript自体はまだ残り続けていくだろうよ
そういや、JavaScriptが標準化されてること自体がマイナー知識だけど ISO/IEC JTC1でも標準化してるって更にマイナーな知識だよな JIS規格ともなると、読んだことのある開発者はいるのかっていうレベル
JIS に規格票はかなりやる気ないな
なんにせよ来月には公開ってことか。めでたい。
規格気にする奴ならマイナーな知識でもないと思うが 普通はそもそも標準化って何ってレベルか
え、JISにもjavascriptあるの? JIS X 3014みたいな翻訳じゃなくて? 正直ecmaとmozillaの仕様以外どうでもいいなぁ。 オープンスタンダードとデファクトスタンダード記憶しとけば問題ないし。 まあjs1.1 - 1.8.1とJScriptとECMA-262 ed.3は覚えてるけど。
翻訳っつーとTRとかと誤解されそうだが、まあ、JISのはただの翻訳だ。 JavaScriptじゃなくECMAScript。Wikipediaにもいつのまにか載ってるな
標準規格は「絵に描いた餅」。 読むだけ時間の無駄。
>>648 その絵に描いた餅を元にJavaScript2.0が作られる予定ですけど?
絵に描いた餅を現実化するのが実装者の仕事 餅を作るのに毎回絵から描き直してたらそれこそ時間の無駄だろ
じゃあ、読むのは時間の無駄じゃねーじゃん
>>648 じゃあECMAScript実装に貢献してくれ
MozillaでもAppleでもいいからさ
それはそうと、JISのほうってWeb上で公開されてたっけ?
それとも、よくある「金出して冊子買え」商法になってる?
jis検索でググれ
>>652 JISC とかいう組織のサイトで見れるよ。
但し、保存も印刷も出来ない細工をしてるつもりらしい。
実際にはこのスレ見てるような人なら簡単になんとか出来るだろうけどな。
どういうわけか見れる pdf は文書をラスタ画像化したものになってるので、
微妙にキタナい。 検索も出来んし。
>654 っていうか一般人でも印刷は普通に出来る。 わざわざハックしなくても、スクショ(ry
657 :
652 :2009/11/17(火) 11:14:18
翻訳くらいしろよと小一時間問い詰めたい
prototype.jsってECMAScript仕様に適合してる? それともJavaScriptの拡張も使ってる? 分かる人いたら教えてくれ。
クロスブラウザな時点でわからないならry
$を平気で使ってる時点で察しろ
誰だよ単発のRhinoスレ立てた馬鹿は? javascriptスレの連中か?
で、5版の規格ではどんな機能が追加されたの? 教えて偉い人
嫁!
どうかFirefoxのスクリプトの後方互換性ができるだけ失われませんように……
言語仕様が変わらなくてもDOMの方で変わっていくから・・・
なにやってもどうせIEが糞実装だから心配するな。やるべきことは変わらん。
ES3に毛が生えた程度のES5で 後方互換性が気になるような書き方をしていたのなら 豆腐の角に頭ぶつけた方がいいぞ
誰得メソッド満載な仕様が嫌だ!
"use strict";
ecma5でもオブジェクトのプライベートメンバー作れないのかよ あとgoto文も使えないな
なんでgoto文いれるんだろう? JSでyaccでも書かせるのかな
ES5にgotoないよね? 使えないってuselessではなくunavailableの意味だよね?
カウチdata baseって大規模なwebでも使えるものなの?
Errorオブジェクトは例外の種類は分かるけど どこで例外が投げられたか分からないのが糞
SpideMonkeyで配列内包をwithの中で使ったときの動作がおかしい気がするんだけど alert([i*i for each(i in [1,2,3])]); //OK with({}){ alert([i*i for each(i in [1,2,3])]); //ReferenceError: i is not defined }
letも分割代入もできるJS1.7でwithを使う奴の気がしれん
with,Call,ClosureはNetscapeからの贈り物。 importとexportは取り込んで良かったと思う。
ttp://www.publickey1.jp/blog/10/javascriptie9_platform_preview_4.html IE9からはJavaSciptの対応バージョンは最新のECMAScript 5th Edition(ECMAScriptとは、
JavaScriptの基となる仕様の名称)準拠となっているようですが、
IE9 Platform Previewに対するフィードバックにより、ECMAScript 5th Editionの仕様のバグを発見しています。
具体的には、ECMAScript 5th Editionの仕様とそれ以前のECMAScriptで
動作に違いがあることがIE9 Platform Previewにより発見され、
過去との互換性維持のためにECMAScript 5th Editionの仕様のアップデートにつながったとのことです
(詳細は「How IE9 Platform Preview Feedback Changed the JavaScript Standard」参照)。
>JavaSciptの対応バージョンは最新のECMAScript 5th Edition準拠 でもJScriptなんでしょ。 MSお得意の仕様には準拠したけど実装は・・・てやつ。 最近はこの手口止めて自分とこの仕様をECMAに投げて標準化してるけどECMAScriptだけは入り込む隙ないからな。 入り込もうとするたびに実装を利用してるコミュニティの猛反発食らってるし。 3Eが形変えただけってのは皆分かってるからなぁ。
意味が分からん。標準仕様に完全に準拠してるなら、別にそれ以外の独自拡張をしたっていいじゃん。 それともまさか名前がJavaScriptじゃないことを叩いてんの?
なんで独自拡張が混乱の元になるかも分からんゆとりか? だいたいIEの場合、標準仕様に完全に準拠は絶対にない。
独自拡張を全否定したらWEBの発展が見込めないってこともわからんゆとりか。 完全準拠してないならまずそこを穿ってけばいいのに。
ecmaの仕様の話するスレで独自拡張布教するなよ。
独自拡張に依らないウェブの進化を目指してたXHTML2がこけちゃったもんな
689 :
デフォルトの名無しさん :2010/08/24(火) 10:09:47
つか、WHATWGが「どうせ俺らが実装しなきゃ絵に描いた餅なんだから、 仕様は俺達で作るわ、XHTML使いづれーし」って言って、W3Cが涙目で応じたじゃん? つまり、MSの独自拡張の時代はずっと前に終わってて、 WHATWGが実装ありきで仕様を作り、W3Cがそれを勧告するっつー流れ。
ecmascriptで相互再帰って出来るの? 普通の再帰にフラグを渡してその値で場合分けするみたいな 微妙なやり方しか思いつかないんだけど
出来るので頑張ってください。 微妙な実装になるかどうかはあなたのセンス次第です。
692 :
デフォルトの名無しさん :2010/08/30(月) 19:06:37
function f(){ return g(); } function g(){ return f(); } あばばばばば。
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
wikiとか見たけど混乱したんで教えてください ECMAScript5thがJavaScript1.9で実装されてて(firefox4) ECMAScript4thがJavaScript2.0(JScript/ActionScript)っていう認識はあってますか? それとも2009/12に策定されたECMAScript5thのことをJavaScript2.0って呼んでいて ECMAScript 4thは仕様策定放棄され JScript/ActionScriptはECMAScript4thの草案を実装してるだけ(JavaScript2.0ではない)なのでしょうか
JavaScript2.0はまだ出ていないけど、ECMAScript 5Eを元に策定される予定。 IE9に載るJScriptもECMAScript 5Eを元に策定される予定。 ECMAScript 4Eは公式には存在しない(今後も作られない)。 ただしいくつかの草案があって、それらを元に現在のActionScriptが出来た。 一方現在のJavaScriptやJScriptは4Eの草案やActionScriptとはほぼ別物。 4Eと5Eには互換性がない、けど4Eの機能のいくつかは5Eにも取り込まれた。 こんな感じ
>>694 4については、
Adobe, Mozilla <-> Microsoft、その他
って構図で、最後はJavascript創始者のBrendan Eichが、
4放棄の取りまとめをした。
JScript(MS)とActionScript(Adobe)を
同じグループにいれているのは間違い。
4の成否にもっとも激しく対立した二者。
wikipediaのECMAScriptのページに、どっちも草案って書いてたから MS/Adobeの件は激しく勘違いしてました そして、今はまだJavaScript2.0は出てないんですね ただ、2.0はECMAScript 5thの仕様ベースになるっていう意味で javascript2.0を試した、とか javascript2.0策定完了、とか そんな記事があるわけか 当初ECMAScript4thの仕様がJavaScript2.0になる予定だったためか? 2006年頃発売なのにJavaScript2.0対応とかいう本もあったりと 2.0の周りは混沌としてますね
ついでにもう一個、もし知ってる人いたら教えてください ECMAScriptの初版(=2版)の仕様策定に関わった人として 敬愛するGLSの名前があるわけですが JavaScriptの関数がファーストクラスとして使えたのは ECMAScript策定前からでしょうか? 初版の時点で既に無名関数があるわけですが 彼が原因じゃないかと推測します
SteeleはECMAに仕様を出す前に、 仕様を整える役として急遽呼ばれた。 幾つかの言語の仕様を書いて慣れているので。 基本的な部分の設計には全く関わってない。 関数がファーストクラスな言語はそれほど珍しくない。 全てがSteele由来なわけでもない。 ただBrendan EichはブラウザにSchemeを組み込むつもりで、 ネットスケープ社に入社した。諸々も事情で、 プロジェクトを離れている間にC言語風になった。
詳しいですね、ありがとうございます
scheme使う人だったんですね
>>プロジェクトを離れている間にC言語風になった。
悲哀を感じます。
そしてそのGLSが呼ばれて整えた仕様書は
crockford曰く「The specification is of extremely poor quality」
悲哀を感じます。
>>関数がファーストクラスな言語はそれほど珍しくない。
>>699 はMLだとかmirandaだとかそういう言語を想定してるんだと思いますが
1998年頃一般的に流行ってた言語の中ではすごいことだと思います
今でこそTiobeのトップ20の言語の半分以上はlambda相当のことが出来るけど
一般のプログラマは言語なんてほとんど知らないから。 彼らにとって珍しいことが、設計者にとって珍しいってことはない。
JavaScriptの定義ってわかり難いよね 広義ではブラウザ上で動くECMAScriptの実装を意味していて、 狭義ではMozillaのECMAScript実装だけを意味するってことでOK? で、JavaScript2.0ってのはMozillaの実装のバージョンを意味してるんだよね?
狭義ではブラウザ上で動くECMAScript実装の内JavaScriptと名乗るものを指し、 広義ではサーバサイドJavaScriptみたいなのも含める感じ 狭義がMozillaの実装だけを指すってことは無いと思う。
JavaScriptってのは商標でもあるので、
>>703 の言っていることのほうが正しいです。
>>703-704 枝葉をつつくようだが、ECMAScriptが制定される前からJavaScriptはあったわけで
そう言い切ると、NN2.0-3.0に載ってるのはJavaScriptじゃないってことになっちまう
JavaScript5版(oreilly)では、ブラウザ上で動くJavaScriptのことを
「クライアントサイドJavaScript」、言語としては「コアJavaScript」と区別して呼んでるね
これは広義の分類にあたりそうだ
>ブラウザ上で動くECMAScript実装の内JavaScriptと名乗るもの javaの名を使うことで提携してんのはNNというかmozillaだけだと思うがいまどうなってんだろうな。 だからMSはJScriptにしたんだし。
なんとなく、ECMAScript + W3C DOMのことをJavaScriptと呼んでるようなイメージ。
>>708 のウィキペディアの記事にもそんなニュアンスのことが書いてある。
歴史的にもクライアントサイドで動的webやるためにDOMを扱えるスクリプト実装したのが LiveScriptだからECMAScript + W3C DOMのことをJavaScriptと呼ぶのは自然の流れ。 Natscape js1.4で分離されるまでJavaScriptの仕様にDOMが含まれてたんだし。 1.4でJavaScript CoreとDOMに分離された。
>>700 Steeleのやったのは文言の訂正とかそんなレベルだよ。
713 :
デフォルトの名無しさん :2010/09/02(木) 21:23:06
constの挙動とか、以前の版との整合性だけ修正して Edition 6が割とすぐ出そうな気がするのは俺だけ?
・正規表現 errata か、なくてもいいんじゃ ・__*__ methods 元から範囲の外 ・文内の関数位置 確か、ES5 で IE と同じ挙動にしたはずでは…途中でやめたか? ・const ES5 には元から入っとらんわ
>>715 >・const
>ES5 には元から入っとらんわ
つまり今constをサポートしてるブラウザは
規格に入ってない機能を勝手に独自実装してる欠陥品って事か
欠陥品じゃないって言うならIEの独自機能も認めないとおかしい
717 :
デフォルトの名無しさん :2010/09/08(水) 17:16:54
規格に入ってる機能を実装してない欠陥品よりマシ
今ある全てのブラウザが欠陥品ってこと? 全部実装してるブラウザはいまのところ存在しないんだけど
>>717 は「MSが駄目って指摘できるボクちゃんカッケーww」って
勘違いしちゃってる馬鹿
720 :
デフォルトの名無しさん :2010/09/08(水) 19:32:40
独自実装と先行実装だったら、後者のほうがましだなあ、と。
つまりXMLHttpRequestを最初に実装したIEは偉大
IE信者のプロパガンダにしか見えん。 constも例外処理も勝手に追加したのはspidermonkeyだがこれらがあると欠陥とな? ブラウザ戦争の引き金になる糞互換な実装をやめろって話なのが分からんのか。 webkitとかwebkitとかwebkitとか
constについては、constの仕様が不確定なことと、 このような機構が将来仕様に含まれるとしても、 今のconstのようなものになるか不確定であること、 この二点を採用しない理由に挙げてるけど、 constってのはObjectの性質じゃなくて、 変数の性質だから、他の方法なんてないんじゃないの?
たとえば同じ名前の変数にconst指定した場合、ブラウザによって次のように別々の動作をみせるという。 * シンタックスエラーとみなしローディングを実施しない。 * 関数がコールされた段階で例外を発生する。 * 定数の上書きは成功し、変数としての上書きは処理しない。 * ただの変数として処理する。
IE以外のどのブラウザもそれなりにECMAScriptの独自拡張はしてるって話だろ? 実際、constの挙動がバラバラなんだし。これを先行実装と言い張るのはなあ
constよりletほしい。
式クロージャも欲しい
いらん
ネイティブにコンパイルできるようにならないのかな PHPをC++にコンパイルするやつはあったな
>>729 すでに主流のブラウザに搭載されているJSエンジンは、JIT(Just In Time compile)化されていたはず。
少なくともFirefoxのSpidermonkeyは、JIT化によって大きな性能改善を果たした。
FirefoxもChromeもコード生成に実行時情報使うからAOTでコンパイルするのはつらいな。 ネイティブコードにはなるだろうが実行性能的な意味で。
732 :
デフォルトの名無しさん :2010/09/09(木) 22:45:26
できてせいぜい中間コードまでだろうなあ
中間コードにはコンパイルできなきゃ困るだろ・・・
>>732 V8のコード読めばいろいろ参考になるよ
SpiderMonkeyよりかは読みやすいし
>>726 これは同意
ブロックスコープ使いたいお・・・
letもいいけど分割代入も欲しい
json形式のデータでlistと配列(vector)区別する一般的な方法はないのでしょうか? list [1,2,3] vector {vector:[1,2,3]} とかでいいのでしょうか?
ベクターとか本当に必要か?
jsonてここでいいのか?
枝葉末節だけどJSON形式ならキーを文字列にしないといけない
740 :
デフォルトの名無しさん :2010/09/14(火) 14:12:07
まあJSOということで
それってただのJSじゃね
JSObjectなら
いまのjavascriptは製品名よりブラウザ上の言語名として一般にも普及してるからjavascriptを使うんだろう。
MSも丸くなったというか下り坂というか
strict は部分的には入ってる 一括して一項目だとな…セキュリティとしてはフルサポートしないとまずいんだけど
>>746 ようやくWebKit Nightly BuildとMinefieldでグリーンになった
>>746 >>749 今 mozilla-central 20101014041748 で見たら全部の項目がグリーンになっててビビった
Chrome の Canary build とか Chromium だとどうなんだろ(表には7までしかない)
>>750 カナリアも今のところChrome 7と同じ。
WebKit本体のJavaScriptエンジン(JavaScriptCore)はstrictモード対応したけど
Chromeは独自のJavaScriptエンジン(V8)を使っているので恩恵を受けていない。
その代わりJavaScriptCoreが未対応のObject.*の類をサポートしてる
SubKlass.prototype に直接値を代入せずに Klass.prototype を継承したオブジェクトが作りたい 具体的には、 const Klass = function() {}; Object.defineProperties(Klass.prototype, {...}); const SubKlass = function() {}; SubKlass.prototype.__proto__ = Klass.prototype; みたいなことをやりたいんだけど、これってES5標準の範疇では不可能?
Object.create(Klass.prototype)
4ヵ月書き込みがなかった間にMinefieldがstrict mode evalに対応したようだ
>>753 むしろconstがES5的に不可能
var Klass = function() {};
Object.defineProperties(Klass.prototype, {...});
Object.freeze(Klass);
>>755 Chromium(V8)の最新版もstrict modeに部分対応始めたし
あとはIE9さえ対応すれば完璧だな
Opera? Safari? 何それおいしいの
Safariはバージョンアップ遅いけど WebKit Nightly BuildならもうかなりES5 strictに対応してるよ
>>754 SubKlass.prototype = Object.create(Klass.prototype);
すればできるのは分かるのですが、SubKlass.prototypeに元からあったプロパティは消えちゃいますよね。
この元からあったプロパティを残しつつ継承したいんです
>>756 constはつい癖で付けてしまいました。
Object.defineProperties(SubKlass.prototype, {
property descriptors of Klass.prototype
})
だと
SubKlass.prototype.__proto__ !== Klass.prototype
になりますよね
多重継承?
strictモードで function f(){ this.a = 45; } が出来なくなるのはただの劣化だと思うんだ。なんで元に戻したの?
strictなんだからできなくて当然と思うけど それともnew忘れてるとか?
Property Descriptorってのは特殊なJSONっていう理解でいいの?
ここまで合ってるところがひとつもない文だとかえって直しようがない
IEで自分(パーツ)用のスタイルを設定したい場合にaddRuleを使ってたんだけど IE8以降の標準モードではなぜか動かなくなってるような? 入れ物はできるけど中身が空になってる(.box{}みたいな感じ)。 そーいやChromeのダミーのaddRuleがそっくりの動作をしてたなと。 試してたソースはこれ。 if ( document.createStyleSheet ){ var myCSS =document.createStyleSheet(); myCSS.addRule( '.box', '{background-color: #f0f0f0;}' ); myCSS.addRule( '.box', '{border: 2px solid #aaaaaa;}' ); } 元のソースはIE以外にも対応するためにinsertRuleも使ってるんだけど 症状を確認するために極限まで削ってこれだけにしたのです。 (元のソースはcreateStyleSheetも使ってません) IE8でモードを切り替えながらCSSを見てたけど 互換モードとIE7標準モードでは設定されるけどIE8標準では設定されない。 IE6やIE7ならモードに関係なく設定される。 IE9もIE9標準モードでは設定されないけどinsertRuleが使える。 (IE9標準モード以外はIE8と同じ) ここまで重大な変更をしてると大きな問題になりそうな気がするけど ググっても言及してるところが見当たらない。 何か基本的なところで勘違いをしてるのでしょうか?
myCSS.addRule( '.box', 'background-color: #f0f0f0;' ); myCSS.addRule( '.box', 'border: 2px solid #aaaaaa;' );
思わず答えちゃったけどECMAScript関係なくね?
関係ないよね JavaScriptスレに行ったら?
JavaScriptとも関係ない気がするけど Web制作板のJavaScriptスレはDOMの質問も扱っているようだ
仲良くしようよ(´・ω・`)
ECMAScript + DOM = JavaScript だからなあ。 DOMのこと聞けなかったらJavaScriptじゃなくてECMAScriptだ。
最近じゃそこにHTML5周辺のAPIも混ざってきて混沌としているがな
>>771 釣りなのか?
ECMAScript + Netscape独自拡張 = JavaScript
WSHやサーバーサイドJSやSpiderMonkeyのシェルやRhinoはJavaScriptじゃないとでも?
WSH上で動くのはJScriptだな ECMAScript + Microsoft独自拡張 = JScript 断じてECMAScript + IEのDOMではない
ECMAScriptの解説書はなんで出ないんだろうか
The Good PartsはECMAScriptの解説みたいなもんだったが… ES5の解説本が出てもいいと思うが、 wikipedia(ja)も放置状態だし、関心のある人は少ないのでは?
サイ本で十分役割を果たしてる
Web寄りすぎるだろ。
WSHはもう互換性のためだけに提供されてる状態だった気がする
JScript9の新機能(ES5対応とか)はIE9の中でしか使えないんだっけ
782 :
765 :2011/05/03(火) 18:05:18.66
質問するところ間違えてしまったようですまない。 そして答えてくれてありがとう。 あまりに単純な原因に衝撃を受けたよ……カッコが原因だったとは。 間違ってたのに今まで運良く動いてただけか(よくあることだけど)。 最初に見たソースがカッコがついててそれを参考にしたみたいです。 さっきあちこち見てまわったらつけてる人とつけてない人がいるね。
これ、IE版firebugで見つけられるんじゃない?
>>770 仲良くしてたらDOMの質問が際限なく来て始末に負えなくなるから、そこらへんは線引きしとかんと
そのために2代目スレからは名前変わってるんだし
あったら積極的に使うと思うがなくても(現状でも)そんなに困らない
788 :
デフォルトの名無しさん :2011/05/09(月) 01:28:22.57
>>787 Objectの書き方がどうも
改行やインデントが意味を持つのは馴染めんなあ
JSに慣れきってるせいかも知れないけど
song = ["do", "re", "mi", "fa", "so"]
singers = {Jagger: "Rock", Elvis: "Roll"}
bitlist = [
1, 0, 1
0, 0, 1
1, 1, 0
]
kids =
brother:
name: "Max"
age: 11
sister:
name: "Ida"
age: 9
ES HarmonyはES4で一度挫折した構文の大幅変更に再チャレンジするみたいだな
ECMAScript は Java の構文を意識したところがよかったのに
>>789 harmony:modulesのこと?
>>790 意味もなくJavaのキーワードが予約されてたりな
兎にも角にも名前空間をどうにかしてくだしあ
var MyPackage = {}; MyPackage.foo = bar; みたいな感じで良いじゃん
ブロックスコープないとクロージャが使いにくい
いずれ let が使えるようになるからそれまで待つしか
797 :
デフォルトの名無しさん :2011/05/30(月) 14:32:48.39
ESで使われていない主な半角記号でこれから自由に新定義できそうなのって『#』くらいだよね でも#ってfunction文の意味を持たせる案が有力なんだよね そういえば無知な質問するけど ESって全角記号使えるけど、海外の環境じゃあ全角って普通全く打てないものなの? ☆くらいは使えたりするのかな? せっかく使えるようにしてくれてるんだし、使えるんならどんどん使っていきたいよね ある程度ちゃんと使えば絶対良くなると思うんだ
どうぞご勝手に
>>797 APLみたいにとまではいかなくても、
Unicodeにたくさんある演算記号が使えたら面白いかもね。
>>797 入力を心配する前にフォントの心配をしなきゃ
見えなきゃ打ててもしょうがない
SpiderMonkeyが#を独自拡張に使ってるから避けてたんじゃないのか
シャープ変数なんて使ったこともないし見たこともねえぞ・・・何だこれ
JVMのHotspot Engineもまったく同じような宣伝文句を使ってたよな。 時代は繰り返すにしてもちょっとスパンが短すぎやしないか ドッグイヤー換算だと100年くらい前の話ではあるが
あとGCCでは関数が同じファイル内にあれば > unsigned int g (void) { return 1; } にまで最適化されますが何か? って指摘は意外と本質的で、 ECMAScriptではvalueOfなどをユーザー定義される可能性がある限り 同じような最適化はやりたくてもできない。 IE9のPreview版がはやまって導入したらMozillaの中の人から 速攻で突っ込まれたということもあったな。
>>805 > unsigned int g (void) { return 1; }
> にまで最適化されますが何か?
ret += 1; にまでと言いたいの?
リンク先はそう書いてない。
809 :
デフォルトの名無しさん :2011/06/14(火) 01:54:57.27
valueOf(){return this; }は遅延評価に必須だからなぁw
811 :
デフォルトの名無しさん :2011/06/17(金) 02:58:48.69
テストのない8000行のJavaScriptを引き継いで、 一ヶ月程度でバグ修正と機能追加をしないといけないんだがどうしよう。死ぬの?
テストコードもないようなその品質も引き継げばいい。
久々にecmascript.orgみたら、 結構多くの機能が仕様取り込み候補になってるんだな。
やっぱり module が入るのは嬉しいね まだ strawman だけど
>>779 jrunscript(Rhino)とJavaScript-Cも仲間に入れてつかーさい。
822 :
デフォルトの名無しさん :2011/07/10(日) 02:40:18.27
825 :
デフォルトの名無しさん :2011/07/18(月) 20:54:00.65
826 :
デフォルトの名無しさん :2011/07/23(土) 05:53:39.82
>>819 jrunscriptとrhinoを一緒にするでねぇ。あれは実装が違う。
>>746 Operaやる気ないの?
10.50から全然変わってないじゃん
Firefox 4、Safari 5.1、Chrome 13にIE10さえ完全対応しそうなのに Operaのやる気のなさは異常
es5とStrict-modeならRhinoですら実装したというのに。
このスレとJavaScriptスレは普通に共存できる、というかJavaScriptスレが 穢れを一手に引き受けてくれるから問題ナッシング。
834 :
デフォルトの名無しさん :2011/09/08(木) 17:27:09.77
operaは昔から最低限のものだけ実装するよってスタンスだし今後もこんなもんだろう
質問なのですが、JavaScriptで変数のスコープって 関数以外の区切りがありますか? 例外的な変数のスコープの区切りになるものがありましたら 教えていただければ幸いです。
catchの変数はcatch節の中だけだったと思う
let! let!
>>836 ES規定ではそうだけど、IE8- はバグ持ちなので注意
お前らwithさんのことディスってんじゃねーよw
withマジで役に立たない 名前空間がクソすぎるのを隠蔽できないゴミ
ed3から非推奨で5から存在しないんじゃなかったか?
いつになったらletが気兼ねなく使えるようになるのか
>>841 5のstrict modeで使えなくなる
>>842 すべてのブラウザがjs17を実装したら。operaとIEが存在する以上まず無理だな。
>すべてのブラウザがjs17を実装したら すべてのブラウザのJavaScriptエンジンがSpiderMonkeyになったらと言っているようなものだな。
>>846 標準化されてない機能がほしいっていう意見は現実的にはSpiderMonkeyと同じ実装が欲しいと言ってるのと同じじゃね?
mozillaのjsは先行実装なのに仕様が頓挫しただけだから元々入れる予定だったんだし。
getter/setterだって取り込まれたし例外処理が標準化してる今mozillaオリジナルってLiveConnectくらいだぞ。
SpiderMonkeyの機能にV8のJITが理想に近いのは誰でも思うところだろう。
例外がちゃんと入ってよかったねえ。
分割代入と式クロージャーの使えないJSエンジンに価値はない
>>850 こうやってみると結構月日を重ねたあれやこれやの経緯がとか
重い偲ばれて…esmascriptも色々なんですな…
多値返すケースとかそれをどう受けるとか その辺言語によってまちまちだし…しょうがない面もあるか…
リストを多値に流用というか、混同している言語は悲惨だね。 ちゃんとリフトしないと。
リストやタプルや酷いときは連想配列から取り出す作業が無くなるだけでも多値の分割代入は重要だしな。 正直イテレータ・ジェネレータ、yieldはとっとと普及しろと思う。何年も前の水準のコードをいつまで書かなきゃいけなんだ。
>>844 /ヽ、__
_,, -──- ....__ //`ー∠
,...."´:::::::::::::::__/_:::::::::ヽ!_/ヽ>
./:::::::::::::::::::::::::( / )::::::(@))__rイ スッ
〈::::::::::::::::::::::::::::::::゙゙/ ̄:::::ヽ(@@)i \
ヽ,.'´ ̄` 7´  ̄ ̄ ´ ̄``ヽ::::::::;ヽ ヽ
/ / /! `ヽ ヽ::/ヽ! ノ Full ECMAScript (JavaScript) 5.1 support
/ // { / { ト、 | }ハ 、 ヽ|/
http://my.opera.com/desktopteam/blog/2011/09/13/es5 |l{ { | ∧{ ヽ.{‐ヽト、ノ}ノハ ! !
lハハlヽ{_,.. ` 、.__ リ.ハl | |___________
| ハ. (ヒ_] ヒ_ン ) ! l | | /
/ ヽヘノ"" ,____, "" | | | l /
/ ハ { } } j/ /
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>reporting one error 現時点で最優秀の準拠率なんだろうけど せっかくなんだからひとつしかないエラーをデバッグしてから Full supportって言えよw
スタンドアロンなblockの中でlet使う意義がわからん。 letは暗黙なブロックを生成するんだからスタンドアロンなblockの中で定義したら見た目とスコープが一致しなくなってわかりにくいんじゃないの? let文じゃダメなのか?
見た目とスコープは一致しているし、(むしろそのためのlet) ECMAScriptには明示的なスコープブロックがないんだからあれば便利。
letの右辺は暗黙のブロックの中だからvar x=10; {let x=x;}でLexical EnvironmentのxからVariable Environmentのxが 参照できないからThisBindingしなきゃいけないのはecmascriptだけの特殊事情だから予測され得る見た目と一致してない。 let文ならvar x=10; let(x=x){};で済むからThisBindingを念頭におく必要はなくて特殊事情知らなくても予測可能だろ。 わざわざecmascriptの仕様に精通してなきゃわからない見た目と結果の乖離を起こすくらいならはじめからlet文でいいんじゃないか? 今流行でjavascript書いてる連中なんてコンテキストと環境の関係なんて理解してないのが多いだろ。
そういうのが欲しければlabels文とかletrec文って呼んで新しく提案しろよ 実装ひとつもないのに無茶言い過ぎ
明示的にvar/externしないとグローバル変数にならない、と 逆にするだけでもずいぶん助かる 既存のコードは全滅だが
let文
>>862 strict modeなら何も書かない場合勝手にグローバル変数生成しないで
エラーになるでしょ
パーフェクトJavaScriptって本どうすか?
javascriptスレで聞け
ECMAScript5はIE8を搭載したWindows7のサポートが切れる2020年までは絵に描いた餅かな 悲しいけどこれが現実なのよね
クロスブラウザする必要ない場面ならそうでもなくね ブラウザー拡張、node.jsとか あとはUA判別後に部分的にES5の機能を利用するとか
cygwin?
dmonkey script とか昔からあるよね 互換実装なら…
>>871 だから後方互換性なんか無視して理想言語を仕上げりゃ良かったんだ
足を引っ張るのはいつも現実を見てない自称「現実派」
そのうちVMだけ標準化してコンパイルしたILを走らせるようになると夢想
理想言語ならすでにSchemeがあるだろう?
>>876 ES4ゴリ押しした連中こそ現実見てなかっただろ
>>879 ES4は中途半端なJavaって印象があるから理想とは程遠かったんだよきっと
>>876-878 ボブ「そんなあなたに持って来いのRhinoを今回ご紹介。
JavaVMで走りjavaの資産も使えjavascript自身の手続き、OOP、関数型パラダイムに加えてなんと継続までサポート!」
パトリシア「でもV8みたいに言語仕様が古いんでしょ?」
ボブ「お〜パット、そんな心配は無用さ。Rhinoを開発してるのはmozilla。本家本元js1.8まで対応さこれで安心だろ?」
パトシリア「まあ!それはすごいわボブっ!それならyeildすらなくてイライラすることもないわね!」
ボブ「そうさパット!これでフィボナッチ数列もたったの数行で書けるよ。ロジックに集中できて便利だろ。
それにね・・・このLiveConnect、LC3っていうんだけど、なんとJavaとシームレスに通信ができるからJavaの資産が使い放題なんだ!」
パトリシア「わ〜お!それはびっくりね」
ボブ「ちょと待ってパット。今ならなんとRhinoにしかない継続までサポートされているんだ!」
パトリシア「どういうことボブ・・・え〜とそれはつまり、プリエンプティブ・マルチタスクが自分で実装できるってことかしら?」
ボブ「プリエンプティブ・マルチタスク?そうさパット。マルチタスクだって例外処理だって自分で実装できちゃうすぐれものだよ!」
パトリシア「あぁ〜ちょっと、どうしようかしら・・・。でもボブ、そんなに至れり尽くせりだったらお値段がちょっと高めなんじゃない?」
ボブ「そう来ると思ったよパット。なんとこのRhino、mozilla開発でモダンなコードも書けて継続まであってこの値段なんだ!」
ち ょ っ と お 待 ち く だ さ い ! !
yeildが書けて継続まであるRhino。実はこれだけじゃないんです!
今ならなんとE4XとAOTコンパイルが出来るコンパイラ、GUIデバッガがついてお値段なんと!
ボブ「オープンソースにつきタダ!」
パトリシア「タダ?ほんとにタダなのボブ!?」
ボブ「そうさpricelessさ!」
パトリシア「まあ!今すぐダウンロードしに行かなくっちゃッ」
ボブ「お〜と、ひとつだけいいかいパット?WWWへの接続料は自分で持ってね。なに、ほんのチップがわりみたいなもんさ。だってそうだろ?」
パトリシア「まあ、ボブったら」
ボブ「HAHAHAHAHAHA」
> ボブ「そうさpricelessさ!」 タダほど高いものはない ってことですかボブ
LispやPython使ったらええがなって思います
>>883 マジレスしていいのか。
それと「アメリカの通販番組はpricelessly」とかけてる。
MCのCMがpricelessで〆てたからさHAHAHA
>884 CommonLisp/SchemeはとっつきにくいしPythonは標準規格がない よし、ここはRubyをだな……
pythonに標準規格がないとかいう文句初めて見たわ
2004年のものだけど。
WHY Common Lisp?
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/why-lisp > ANSI, ISO あるいは JIS で現実的な仕様の決まっている programming 言語と
> いうものはそう多くなく、わたしに思いつくものはCOBOL, FORTRAN, ADA,
> PL/1, C/C++, Common Lisp くらいしかありません。どれも一応 PC も含めた複
> 数の platform で動いていますが、この中で例えば web server を現実的なコ
> ストで書けるものは何か、と尋ねたら C/C++ か Common Lisp に落着く。
>
> したがって、どの programming 言語を使いますか?という問いは、
>
> gc のない C/C++ と、それを持つ Common Lisp の、どちらを使いますか?
>
> という問いと同値です。
rubyは組み込むにはでかすぎる。信者があまりにもキモすぎるで論外。
ECMAScriptの文法とどっこいどっこいじゃね>キモい それに信者は言語と関係ないし
>>888 当時すでにESは標準化されてるのに見事にスルーしてるのがひどい……
ほかにも今のところIEEEのSchemeとか、ECMAのC#とか
ISOならSmalltalk、Prolog、Eiffel、Modula-2、Forthなんかがあるな
Rubyも一応今ならJISがあるし、ISOにファストトラックで送られてる最中
Haskellみたいなのも一応標準化されてると言えるのかな
仕様なんてなくたって次期gcc4.6に組み込まれることになった golang さんのことも忘れないでくださいね…
>>891 要するに実装に縛られたくないんだろうけどlisp使いたいだけの後付だよね
プロパティに名前空間つかんのかの
c# みたいにならないかそれ delphi とか pascal みたいにいったほうが 正確か…昔の葉名前空間と言うよりモジュール名で管理というかんじだけど
オブジェクトが名前空間に属すなら それを参照するプロパティも同じプレフィクスを持つとか
>>882 Rhinoよく使うけどyieldとかletが使えるようになってたこと知らなかった。
ありがとう。
でもgenerator式はまだなんだね。
>>897 js1.8自身ジェネレータまわりの変更がメインだからだと思う。
Rhinoで使えるバージョン=rhinoのバージョン数+サポートしたと言っている言語仕様バージョンの一部て感じだからspidermonkeyと同期してるわけじゃないよ。
Rhino1.7R3の変更ってes5準拠とCommonJSサポートのが目立つしね。
組み込み用途だとjs object実装がjava collectionsとして扱えるようになったから便利になったよ。
javascriptのアンチテーゼのはずのDartが見事なjavascript1.5なのは仕様面で見てどう思うよ?
Dartがjs1.5というのは分からないけどこのクソ言語だけは絶対に流行って欲しくない
DartもCoffeeも一緒に滅んでくれ あと激重jQueryもな jsごとき1から10まで手書きできなくてどうする
ついでにECMAScriptも滅べばいいのに
Dartがボロクソに叩かれまくって、じゃあブラウザにvm乗せてもう好きな言語で開発できるようにしようぜって流れになればいい
IEは好きなスクリプト言語を自由に追加できる設計だった IE6は登場時点ではほんとに超先進的ブラウザだったんだよ
>>903 java plug-inの出番だな。CommonDOMだけじゃなくLiveConnectもjava plug-inの管轄になったから次はブラウザ用の言語か。
> ...このクソ言語だけは絶対に流行って欲しくない > ついでにECMAScriptも滅べばいいのに こういうアンチ野郎が多い言語は、不思議と普及してしまうというマーフィーの法則
出たばかりのLiveScriptもいじり倒して遊んでるギーク以外重いからやめろって結構言われてたよ。 そのときからcallerまわりは問題視されてたけどnetscapeには黙殺されて今までズルズルやってんよ。
Dartのすごさがイマイチわからんけど よく見る「ECMAScriptのセミコロン省略が良かった/悪かった」てのは 単純にHTMLのonclick="..."とかでセミコロン不要にするってだけのものだろ? onclickにDartを書きたいときとか、どう区別すんの
ん、htmlタグの属性値中でセミコロン使うと何か問題あるんだっけ?
HTML5の仕様によるとonclickにはJavaScriptしか書けないので そもそも考慮無用
>単純にHTMLのonclick="..."とかでセミコロン不要にするってだけのものだろ? そもそもこれが間違ってる。 分かりきったものをだらだらと書かせるなよって事。型推論いいよねと似てる。 他の言語だとxml地獄、rubyでend地獄やpythonのインデント強制によるエントロピー増加が問題なわけ。 省略したらしたでjsみたいな問題も出てくるし、jsの場合はセミコロンの省略が言語仕様にあるからそれとは別問題。 たんにセミコロン省略できない言語メインが省略便利といってるだけ。
>>914 すまんが何言ってるかちょっとわからん
まーあれだ、イベントハンドラのrobustnessの重要性にjQueryもやっと気づきはじめたところに
document.query(...).on.click.addとか、また黒歴史を繰り返すのかよって感じ
ライブラリの問題だからスレ違いだけどな
dartスレのjQuery厨か?
Dartスレなんてあったのかよ なんでここで議論してんだ
JDKのjavascript実装がJDK7でrhino1.7R3に変わっとる。 デフォルトの言語バージョンが1.8で特権コード書かないと変更できないようになってるがJDK8でnashornに変えるのに互換性大丈夫だろうか。 これはもしかしてnashornが1.8準拠なのか? spidermonkeyもjs1.8.xでes5準拠だしやっと最新仕様で早い実装が来るかもしれんな。
VB6.0のScriptControlでDMDScriptを使おうとしています。
http://www.digitalmars.com/dscript/download.html の「DMDScript binaries」をダウンロードしました。
ScriptControl1.Language="DMDScript"でエラーにはならないので
認識はされているようなのですが、
ScriptControl1.Eval("1+1")で何も返してくれません。
JScriptとVBScriptはもちろん、PerlScriptとRubyScriptで
ちゃんと値を返したのですが
DMDScriptはScriptControlから呼び出されるEvalに対する
インターフェース(?)を実装していないのでしょうか?
APIの実装固有はスレチ。 javascriptスレがあるがjs互換じゃなくてJScript互換なDMDScriptも対象かは知らん
412 :デフォルトの名無しさん [↓] :2011/12/14(水) 18:41:16.34
なんでプログラム板にこのスレがあるんだ
413+1 :デフォルトの名無しさん [↓] :2011/12/14(水) 18:48:12.24
JavaScriptがブラウザ以外の環境でも使われだしたから。
418 :デフォルトの名無しさん [↓] :2011/12/15(木) 07:49:36.32
jsはブラウザによって挙動が異なるけど、これはjsで言うところのクライアント(エージェント)ねたになるのでweb系板扱い。そもそもム板ではブラウザの挙動などまったく興味ないし誰も知らない。
419 :デフォルトの名無しさん [↓] :2011/12/15(木) 08:20:30.49
>>413 それならブラウザで使用するJavaScriptの話をここでするのはおかしいんじゃないの
420 :デフォルトの名無しさん [↓] :2011/12/15(木) 08:37:54.15
ム板でjsスレがあってもおかしくないけど、ブラウザねた(jsコンパイラの実装レベルの違い)や
ブラウザ依存(xml/domなどの処理クラス・オブジェクトのサポートがブラウザ別にある・ないなど)の話題が中心になるは興味ないしそういうtipsコードはプログラムに関係ないからこの板では勘弁してほしい。
421 :デフォルトの名無しさん [↓] :2011/12/15(木) 08:54:50.81
いくつか乱立してるからそのうち一つにまとめると2ch jsコミニティーとして成立するだろうね。
【node.js】サーバサイドjavascript【Rhino】
みたくクライアントサイドの議論じゃないってことを付けとくと勘違い者とかまぬけ者は無理にスレに入ってこないだろう。
俺はインタプリタでrhinoを使ってるからjavaにも精通する必要があるしcgi,httpserver,streamなんかも当然に理解してる必要があるけど、ブラウザでやるならmozilla,webkit,chromeのjs実装が中心でms-ieはweb板扱いになるんじゃないか。
423 :デフォルトの名無しさん [↓] :2011/12/15(木) 09:11:26.52
ECMAScript デス 3
http://hibari.2ch.net/test/read.cgi/tech/1190160481/ が、ム板のjs本スレか。じゃそっちに集約するし移動するか。
>>918 jdk6 rhinoは御承知のようにJavaAdapterがサン実装なのですが、rhino script上でjava class abstractを継承したjs funtionまたはabstractを直にnewしたようなインスタンスはどうやって作ればいいでしょうか。
node のせいで let、yield使えないv8のjsが流行ってるけど、 どうしてこうなった。 明らかにMozilla側の実装の方がよかった…。
このスレで言うことじゃない。
letやyieldはMozillaの独自実装 断じて先行実装ではない 多分
本家とはいえ、Mozillaのオラオラ実装っぷりはIEを笑えん
そうだそうだ しかるべき組織が策定した仕様から実装しろ!
そりゃC++をみてから言えよ イニシアチブを一社がとって進むほうが 結果的にいいものが出来るよ 熟成したら独立組織に移管がよか
C++はStroustrupが指揮棒握ってるよ。 JavascriptでEichのやらせたharmonyレベルの仕事は常にしてる。 委員会で仕様を策定しているのが原因だと思うのは言語をよく理解できてないから。
IE6の時代が最もいい時代だったってこった
MSは前に立つとボロがでるから 後ろからついてく会社
933 :
デフォルトの名無しさん :2011/12/27(火) 05:35:05.97
どうしてECMAScript 4が駄目になったのかつくづく理解できない。
あれさえ通っていればJavaScriptが主流になることに異議はなかった。
2011年になってまだ新しいモジュールの書き方生み出していてどうするんだよ。
http://waka.hatenablog.com/entry/2011/11/27/215627 このまま本格的に使われるようだと、保守不能なコードが際限なく量産されるぞ。
CoffeeScriptならどうにかなるんかとおもいきや
フォラーム覗いたら、どうすんだよ、どうにもなんねーと揉めてる有様
2005年のスライド↓
「最後に生き残るのはJavaScriptかもな」
http://eto.com/d/PresenShibuyaJS.presen 完全に的中しているし、確かに生き残ったが、言語としてまるっきり停滞したまま生き残るとか
まして主流にしようとかありえないだろ。
正直、この10年かJavaScript界隈にいて日々バッドノウハウを生み出して喜んでた連中、
言語そのものをどうにかしようとしなかった連中を全員殴ってまわりたいレベル
Googleが素直にECMAに沿って実装してればなあ。
>>933 まだ本格的には使ってなくて眺めてる状態だけどひでえ書き方だな
プログラミング界隈じゃよくあるけど妄信的な連中が大声で喚いて何も進まない
Dartは信者も苦笑い。
4を無理に通してたらバベルの塔再来になってた。 慎重に合意取り付けてくのは当たり前。 今でも非互換性が問題になって、 $(document).readyとかやってるのに。 それから4の機能の殆どは継続審議されてる。 HTML5界隈でも標準化が順調に進んでる。
大規模な JavaScript 大規模なアプリケーションを構築する場合、高品質なオーサリング機能やツールの活用が不可欠になります。 そのような場合は、クラスなどの高度な抽象化およびその他の一般的なプログラミング パターンを基盤として、 ツール利用のエクスペリエンスを向上させることができます。 数十万行の JavaScript コードから成る Office Web アプリケーションは、主に Script# をベースに記述されており、 JavaScript にコンパイルされ、今日の各種ブラウザーで実行できるようになっています。 Google Web Toolkit などのツールセットも同様のアプローチを採っています。 最近では、Traceur や CoffeeScript などの変換コンパイラ ライブラリによって、 JavaScript への追加構文や、完全な代替構文も、今日のブラウザーでランタイムへの変更なしに処理可能なことが実証されています。 JavaScript には基本的な欠陥があり、これらのシナリオをサポートするには JavaScript の構文およびランタイムからの “決別” が必須であると予告する向きもあります (Dart の例など)。 私たちはこうした見解には同意しません。 TC39 委員会の参加者として、標準ランタイムを拡張し、大規模な JavaScript 開発のサポートに必要な構文機能を既存の JavaScript 標準の上に構築できると確信しています。
今更ECMAScript 4を持ちだすやつのFlash臭
>>926 Mozillaの独自実装とは違った仕様になる可能性大だけどな
943 :
デフォルトの名無しさん :2011/12/31(土) 20:44:38.10
クラスメソッドからプライベートメンバーを参照したいんだけど、どうすればいいい? function Abc(){ var x; } Abc.func(){ return x + x; } みたいなことをしたいんだけど。
944 :
デフォルトの名無しさん :2011/12/31(土) 22:19:49.04
日本語でおk
function Abc(){ this.x = 1 } Abc.func(){ return this.x + this.x; }
ESでおk
947 :
デフォルトの名無しさん :2011/12/31(土) 22:57:41.53
function Abc() { this.x = 0; } Abc.prototype.func = function () { return this.x + this.x; } var test = new Abc(); test.func(); // 0 + 0 なので 0 が return される test.x = 1; test.func(); // 1 + 1 なので 2 が return される ちなみに、Abc.prototype.func のところは次のようにしてもOK Abc.prototype = { func : function () { return this.x + this.x; } };
949 :
デフォルトの名無しさん :2012/01/01(日) 01:09:17.25
>>943 のプライベートメンバーってクラスメンバー以外から直接アクセス出来ないって意味だよ。
text.x = 1;
とかは禁止したい。
クロージャ使え
クロージャを使うのは 苦労じゃ
952 :
デフォルトの名無しさん :2012/01/01(日) 01:33:58.33
出来たけど、面倒だね。 var Abc = function Abc(){ var x = 1; return { func : function(){ return x + x; } } }(); Abc.func();
>>952 10点(100点満点中)
惜しかったねw
答えはJavaScriptクックブックとか
そんな感じの名前のオライリー本に載ってるよ。
954 :
デフォルトの名無しさん :2012/01/01(日) 01:48:42.79
点数とかいらないから。知ってるなら書けよ。
だからオライリー本に書いておいたよ。 オ・レ・がw
956 :
デフォルトの名無しさん :2012/01/01(日) 02:24:13.37
おk。ありがとう。
めんどうくさいから
>>952 でいいわ。
貴様オライリー本の著者を侮辱するのか!
絵に描いた餅より手の中にあるカンパンですよね
959 :
デフォルトの名無しさん :2012/01/01(日) 15:04:42.15
オライリーを侮辱するわけではなくて、
>>952 が間違っているわけでもなく、目的も達成されているし、足りない部分があるとしても
さらに100点満点中90点分の何かがあるとは思えない(=
>>953 の発言が信用出来ない)から
>>952 でよしとした。
function ABC(){ if( this.constructor !== ABC ){ return new ABC(); } var x = 1; this.func = function(){ return x + x; }; } var abc = ABC().func(); プライベートメンバの代わりにクロージャ使う場合は、 昔のコードならこうじゃね。
961 :
デフォルトの名無しさん :2012/01/01(日) 15:18:57.86
同じメンバなのに this.x で統一できないのは痛いよな。 言語として実装されてないわけだから、おとなしく _ を付けるしかないかな。 変に小細工して難解なコードになるのは本末転倒。
963 :
デフォルトの名無しさん :2012/01/01(日) 15:21:35.31
>>961 混乱させてすまん。
クックブックに出てきそうな普通のコードを書いただけで、
俺と
>>953 とは無関係だよ。
利点はprototypeが使えること。
既にプロトタイプ式のクラスが廃れてきてる現代ではどうなの?ってコード。
965 :
デフォルトの名無しさん :2012/01/01(日) 15:47:25.02
>>964 ありがとう。
プロトタイプ式のクラスって廃れてきてるんだ。
その辺りの最新状況を学べる書籍や情報源ってある?
>>962 俺も同意見。プライベートは列挙不可属性だけで十分。
クロージャって使いまわすと複雑になるだけだから、
ちょっとしたlambdaな物に使うのが無難だと思う。
>>965 ごめんごめん。廃れてるってのは自分の勝手な意見で、
文献とかではなく、jQueryとかの印象で言ってる。
最近のソースって基本的に prototype をすげ替えるだけで、
クロージャ使ったプライベートメンバとか、
prototype.constructor書き換えとか複雑なことしないから。
968 :
デフォルトの名無しさん :2012/01/01(日) 16:05:55.51
>>968 列挙不可はdefinePropertyで設定できる。
970 :
デフォルトの名無しさん :2012/01/01(日) 16:59:44.44
>>969 ありがとう。
var Abc = {};
Object.defineProperty( Abc, "x", { value: 1, enumerable: false } );
Abc.func = function(){return this.x + this.x;}
Abc.func();
小細工、複雑、難解って点に関しては
>>952 の方がマシな感じがする。
971 :
デフォルトの名無しさん :2012/01/01(日) 17:12:33.00
>>970 だと Abc.x が undefined にならないんだね。
やっぱり、
>>952 でいいわ。
>>970 ちょっと質問の意図を履き違えていたわ。
クラス内のプライベートメンバという意味じゃなくて、
クラス関係なくアクセス制御したいだけならクロージャでいいと思う。
973 :
デフォルトの名無しさん :2012/01/01(日) 17:17:23.23
974 :
デフォルトの名無しさん :2012/01/01(日) 22:00:18.25
var a = (function(){return 1;})(); var b = function(){return 1;}(); わざわざaの右辺のようにしているコードを見かけるんだけど、function(){return 1;} の周りに ( ) は必要? bじゃダメなの? こういう場合の優先順位をどう考えればいいのか知りたいんだけど、 演算子の優先順位はあるけど、ブロック{}を含めた優先順位ってどこかに書いてある?
>>974 bは最後まで読まないとクロージャだと分からないから控えたほうがいい。てか、やめろ!
976 :
デフォルトの名無しさん :2012/01/01(日) 22:41:33.66
なるほど。可読性を考えるとbにもメリットがあるということか。
>>974 aの方がbより1step少ないとかじゃないっけかなぁ
別にbで良いと思うよ
()をつける必然性がない。必要ないなら付けない方がいいという考え方もあり得る。 aを勧めるなら、cの方がもっといいだろ? var c = (((((((((((function(){return 1;})))))))))))();
┐(´ー`)┌
>>978 すまん正直どっちでも良い
元々はbの方が中間コードで1step少ないと思ってたけど
実際は同じだったようだ
function()の前に(があるからクロージャーだと判断するとか、言語仕様に対して図々しい話だよな。 aなんて単なる無駄だから、bの方がいい。
aは無名関数が実行されて戻り値がaに代入される bは関数オブジェクトがbに代入される。呼ばれるまで関数は実行されていない。
えっ
>>982 可読性を犠牲にしてたった二文字を削るのか。書く一方で保守の経験はないんだろうな。
何らかの意味を持つわけでもない文法上必然性のない(をfunction()の前に付けるとなぜ可読性が上がると考えているのか全く理解に苦しむ。 保守する人間に俺ルールの(の意味を読み取らせようとする図々しさに呆れ果てる。 削るのではなく元々無い二文字だ。
>>988 適当なライブラリ読んでみろ。jqueryでもprototype.jsでもclosurelibraryでもなんでもいい。
var hoge = function(){
// 処理が複数行におよぶ
})();//ここまでスクロールしないとクロージャだと分からない
これがなんで理解出来ないんだろ。たった二文字でここまで可読性上がるんだよ?
>>988 function構文はかっこ無しだと評価されないからエラーになる。
Objectも同じ。
むしろ一行で書く方が特例なんだよ。
>>989 バカはほっとけ。トリッキーな保守もできないコードしか生み出さないんだから。
function()の前に(が付いていると、閉じ括弧の後ろに();がついてるとか思っちゃう人間の方がよほどトリッキーな脳だろ。
だからFunction Objectは評価の問題もあって括弧付けるのが普通なんだってば。 JavaScriptのソースを普段読んでる人間なら、勝手に身に付いてる事の一つだろ。
これはひどい。理論抜きで意地だけで反発してる。
まあ、今まで疑問に思わずに勝手に身についたことを否定されたら意地にもなっちゃうわな。
規格に見つけられないなら、記憶違いだろうね。
var i = 0; (function (){ console.log(i++); })(); function (){ console.log(i++); }(); test.js:5 function (){ ^ node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ SyntaxError: Unexpected token (
var foo = function () { // ... }; var bar = (function () { // .. })(); は割と一般的な書きかたで逆のパターンはみないし、 括弧つけるほうがわかりやすいだろう。 2文字増えるだけだし。 関数の中の行数が増えると、読むときにちょっと面倒かと思う。 まあ、関数本体が十分に短かければ、大差ないかもね。
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。