[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/04 14:57 / Filesize : 153 KB / Number-of Response : 594
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

[JavaScript,PHP] スクリプト言語33 [Perl,Python]



1 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 13:55:49.86 ]
JavaScript, Perl, PHP, Python, …
スクリプト言語をすべて扱うスレッドです。
最強のスクリプト言語は、どれよ?
さあ、死ぬまで語りやがれ!!!

■ スクリプト言語の用途
簡易Webアプリ、シェルスクリプト

■ スクリプト言語の特徴
1レスで書ける程度の使い捨ての短いコードなら作成が容易だが
実行速度は劣っており、2人以上の開発、1000行を超えるソースコード、
10ファイル以上からなるソースコード、大規模になればなるほど
修正時の影響範囲の把握が困難で簡単なスペルミスが
発見しづらいバグを生み、IDEなどの静的解析ツールの適用が難しく
何から何まで人手でやらなければならずプログラマの負担が大きい。
・インタプリタ
・動的型
・正規表現
・クロージャ
などを利用できるものがある。

1レスには収まらないが100行程度の短いコードはここで
ttp://play.island.ac/codepaste/

toro.2ch.net/test/read.cgi/tech/1365250318/

314 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:22:37.48 ]
>>311
知ってるか知ってないかの違い
ググればわかるようなことを
自慢げに言われてもなw

315 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:22:44.91 ]
>>313
pythonが真のクロージャを備えていないことが
よっぽどコンプレックスなんじゃないの

316 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:25:11.17 ]
Pythonに真のクロージャがないとか
JSのクロージャは危険じゃないとか
言ってる奴はアホだろ

317 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:25:46.24 ]
なんか1周回って戻ってきたな
Pythonのレキシカルスコープがちょっと変わってるんで、それを調べてから書き込んだほうがいい
JS厨の俺としてもうんざりですよ

318 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:26:21.82 ]
Javaで内部クラスをクロージャとして使うと
外部スコープはfinal変数しか参照できないけど、
そんな感じで、読むのは良いけど書くのはダメってのは
わりとありがち

319 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:27:56.20 ]
>>314
自慢じゃなくてかなり基本的なことだから、共通基盤が違うんだなあと
ノルムと言って伝わらない人は確かに科学的な計算しないと思う

320 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:27:56.92 ]
pythonでも一応外部の変数を「見る」ことはできたはず
代入が出来ないだけ

321 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:29:53.60 ]
>>318
F#とかもそうなんだっけ
そういう安全装置は意味あるし、pythonのスコープがおかしいって指摘が微妙だよな

322 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:30:47.60 ]
>>319
そいつは本当に自分が知らないことを聞いているのか
一般的な事柄としてそういう疑問があると言ってるのか、
そしてついでにいえば、そいつがどのレスと同一人物なのか
もう少し注意深く見た方が良い



323 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:31:14.37 ]
外部変数に代入したくないときに明示するか(var)、
代入したいときに明示するか(nonlocal)の違いじゃないの?

激しくどうでもいい

324 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:31:45.32 ]
>>318
それってfinalじゃなくても良くなるって話を随分前に聞いた覚えがあるけど、
Java7でもまだだっけ?

325 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:32:15.33 ]
Pythonってどうしてそういう仕様にしたんだろう
当然良いことも悪いこともあると思うが
自分には他の言事の差別化が大きいのかなと思ってしまう

326 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:33:03.21 ]
もしかして、pythonが簡潔を売りにしてる割にはself地獄なのも似たような思想なのかね
危険だとか

327 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:35:13.75 ]
>>323
JSのが明らかに危険なのにどうでもいいってw

>>322
それこそ本当にどうでもいいです。
科学的なコードに対して一般的に聞くことにどんな意味が?
JSで書いたほうが良いと言ってた奴だったと思うよ

328 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:36:21.07 ]
Python節、まあいいと思うよ
でも外側のスコープ変数変更出来ない方が普通だとは思わないな
変更されない、方を特殊に扱った方が自然だと思う
JSだってそれはできるし

329 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:38:22.45 ]
>>328
それは超初心者レベルのプログラミングも分かってないってこと
意図しない副作用に注意するなら、変更する場合に明示するほうが自然だろ

330 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:38:27.76 ]
>>327
レス見てきたけど、趣旨としては一般的なことだね
normは確かに数学の用語だけど、norm以外にもいろいろ挙げてる
から意味はあるね
normを揶揄するのは揚げ足取りの類い

331 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:39:53.56 ]
>>285
変更不可な変数の宣言と混同してる

332 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:39:58.67 ]
>>329
確かに
これはnonlocalの方が優れてるわ
まあselfは気に食わないけど



333 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:40:33.94 ]
>>324
final変数しか参照できないって不便だよな。

for(final int i : list) {
 //クロージャー呼び出し
}

for(int i : list) {
 final int i_ = i;
 //クロージャー呼び出し
}


いちいちfinal付けるかfinalつけた変数に代入しないといけないんだよな。

334 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:41:43.58 ]
>>329
自分で書いておいてその程度の事が意図しないとかいう感覚がわからない

内側のスコープにその変数を使ってるもんだと思って、
実際には無くて、外側のいじっちゃいけない同名の変数を
意図せず弄って問題が起きることがあるってこと?

簡単な具体例を説明して欲しい

335 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:42:38.02 ]
>>333
拡張forでfinal宣言するのは常識

> Java セキュアコーディングスタンダード > 01. 宣言と初期化 (DCL)
DCL02-J. 拡張 for 文のループ変数は必ず final 宣言する
www.jpcert.or.jp/java-rules/dcl02-j.html

336 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:42:51.63 ]
>>334
滅多に起きないけど、varを忘れてしまった場合にありうる

337 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:44:09.47 ]
>>335
マジか
これは良い情報
まあ仕事じゃレビューでfinalとってくれって言われるのが落ちだろうけど

338 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:45:06.87 ]
>>324
Java8で、final値だと自明な場合はfinalを書かなくても
final変数として参照できるようになる、らしい

339 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:45:58.38 ]
クロージャが呼ばれるときその中身は見えないし、その変数はそのクロージャ以外でも使われるのなら
変数の中身は当然追いにくくなるし、クロージャは基本的にメリットない気がする
なんで引数で渡したりしないの?

340 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:46:33.01 ]
>>336
あー、言いたいことはわかった気がするけど
ちょっといろいろと仮定が都合良すぎるな
確かに一昔前なら実際起きてそうなことだと思うけど

今は皆慣れてコーディングスタイルとかも良くなってきてるし
そのためにstrictmodeもあるしね

341 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:48:11.95 ]
strict modeの存在自体が危険性を示唆してるし
なんで普通の関数にそんなものを付けなきゃいけないのか謎
クロージャにだけ付ければ良いし、そしたらvar宣言自体が無駄
という結論ではダメですか

342 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:49:43.39 ]
クロージャを普通に使うJSではそれが逆に大変になるということだろうな



343 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:52:10.68 ]
>>339
それはさ、クロージャをクラスに置き換えても同じことが言えるんじゃない?

344 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:52:23.01 ]
var付け忘れというより、varつけて宣言した変数を使うつもりで変数名タイプミスして
グローバル変数になるとかのパターンが、かなり危険だね
なので"use strict"が導入された

>>341
"use strict"は関数毎につける必要はないよ
実質モジュール単位で有効にすればいい

345 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:52:59.24 ]
>>341
どういうこと?
今話してた意図せずスコープリークしてしまうのを防ぐ役目があるじゃん?

クロージャにだけ固いスコープが必要?
よくそのメリットがわかんないな

346 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:53:54.26 ]
>>344
だからさ、それ本当にuse strictで防げるのか?
俺の手元のテストコードがおかしいのか?

347 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:54:23.89 ]
>>343
クラスは変更される変数と独立してないだろ

348 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:55:28.33 ]
>>345
クロージャはコードが長くなりがち。
長いコードはスコープが広いのと同じことになる。
つまり何処で変数を変更しているかわかりにくい。

影響範囲を狭くするために
外のスコープに一切アクセス出来ない
クロージャ(?)が必要。

これをクロージャと呼ばないとかどうでもいい
違う名前でいいから、そういうものが必要。

349 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:55:53.00 ]
use strict で防げる派と防げない派がいるけど

350 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:56:01.24 ]
>>347
メソッドはフィールド変数と独立してるじゃん
同じじゃないの?
外側のクラスに囲まれてるから独立してないというのなら、
クロージャだってさらに外側のクロージャに囲まれているの
だから独立してない

351 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:57:09.50 ]
だからさ、varつけて宣言した変数を使うつもりで変数名タイプミスして
それが偶然グローバル変数とバッティングした場合は
use strict付けてても無力ってことだろ

そんなレアケースどうでもいいわ

352 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:57:31.88 ]
>>346
varで宣言してない変数を触ろうとするとエラーになるんだから
意図しない外側の変数やグローバル変数を弄ることがないってことでしょ?
それでも何か不満があるの?

>>348
クロージャは即時関数とも重なるから
むしろだいたい短いと思うんだけど



353 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:57:58.80 ]
>>351
varを付け忘れた変数が外側とバッティングする場合はそこまでレアではない
ただ、これもレアっちゃレアだと思うが

354 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:58:11.69 ]
>>349
タイプミスして
グローバル変数の宣言になるパターンは防げる
宣言済みの外部変数へのアクセスになるのは防げない

355 名前:デフォルトの名無しさん mailto:sage [2013/05/03(金) 23:59:44.13 ]
宣言済の変数もゲッター、セッター使えば一応防げる

356 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:02:52.85 ]
お前らと話していると、静的型付け言語のほうが
優れていると言ってるとしか思えなくなって来るな。

人間ミスをする生き物だ。ミスしても謝ればいいだけ。
誰もそれを責める権利は持っていない。
ミスが怖いならコンピュータにでもなれよ。

357 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:03:35.37 ]
クラス内のメソッドはクロージャで、だからselfを付けるってこと?なるほど

358 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:04:36.54 ]
オブジェクトなら簡単に代入参照制限できるし外部関数化もできるけど
プリミティブ型はちょっと面倒だな

まあPython-JSコンバータつくるときはいいかも

359 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:12:48.16 ]
>>308
使ったことないけど、Cloud 9とかintelliJ IDEAってのが良いらしい。
ただ、sublimeもlintやdev toolと連携すればそこそこいけるし、
セットってのがそんなに利点かなあ

360 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:13:13.68 ]
まあスコープ浸透しない変数が本当にあった方がよくてそれで速度向上するんなら
ES.strawmanくらいには挙がってないとおかしいんだが

361 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:15:26.73 ]
速度向上?

362 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:16:09.51 ]
>>359
最近段々とChromeがOS化してきちゃってさ
というか9割の時間Chromeを全画面表示してるし



363 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:16:25.04 ]
Colud 9 IDE
www.publickey1.jp/blog/11/nodejsjavascriptcloud9_ide.html
凄い時代だよなあ
クラウドでIDEとか
Javascriptすげえ

364 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:19:51.95 ]
>>361
初期のconstみたいに実装に思わぬ負担となる場合がある

浸透しないとその分内側は軽くなると普通思うが
前例があるからどうなるのか心配

普通の変数と変わらない程度なら実装のコンパクト化を考えるといらない

365 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:22:14.41 ]
>>364
いや、誰も速度の話なんてしてなかったように思えるのに
急に速度向上の話になったからビックリしただけ

366 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:23:47.20 ]
>>356
どうだろうねえ
静的型付けの方がより安全ではあるけど、動的でも
だいぶ頑張れるしねえ
むしろ柔軟性を考えるとデメリットかもしれない
静的型付け言語だったとしたら、jQueryだのが生まれるイメージがあまり湧かない

367 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:26:41.58 ]
> 静的型付け言語だったとしたら、jQueryだのが生まれるイメージがあまり湧かない
そうか?

jQueryのキモは、セレクタ文字列から、jQueryオブジェクト型を返すだけだろ?
普通に型つきオブジェクト指向のやり方だと思うけど。

368 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:29:22.65 ]
静的言語でjQueryの$関数を実装するとかマジキチ
業界を破門レベル

369 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:29:32.64 ]
>>356
このスレではスコープ関係の議論をしてて、スコープについては
ダイナミックスコープより安全なレキシカルスコープが主流になってるから
あんまり違和感が無かった

370 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:30:34.51 ]
>>365
誰もしてなくてもJSにとって速度向上はものすごく大事なことなの

371 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:31:25.32 ]
>>367
例えばプラグインがメソッドを追加しまくってるけど、
単純な継承では継承の順番を指定しないと駄目だろ

372 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:31:48.16 ]
なぜならJSはリアルタイム性が重視される用途によく使われるから。
GUIとか、その動作速度でさくさく感が大きく変わる。



373 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:33:23.12 ]
>>371
プラグインがメソッド追加するのは
jQueryの失敗点の一つだと思ってるけど。

だって、名前かぶったらどうするのさ?

374 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:35:19.53 ]
VS+C#は戦車、スクリプト言語は拳銃くらいのイメージ

375 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:35:20.19 ]
>>368
いいじゃない
jQuery-C++とかjQuery-Javaとか

JQuery $ = new JQuery();
$(”ul li .hoge”).css("color", "red");

がJavaのコードでも別に良いじゃない

376 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:37:20.94 ]
>>373
noconflictとかでなんとかならんかね
実際そんなに問題出てる?

377 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:39:15.03 ]
>>375
全然よくない
本当は型によって振る舞いを変えるのは
JIT妨害の代表格みたいなものだからJSでも最悪なんだよ

でもjQueryはブラウザとHTMLの柔らかさや非互換性があるからこそ便利なもの
静的言語でやると悪いことしか産まない

378 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:39:50.55 ]
>>375
だよな。作れない理由が思いつかない。

>>376
noconflictは単にjQueryのエイリアスである$を使わない(jQueryだけを使う)
ってだけの意味でしか無いので、何も効果はない。

379 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:41:11.04 ]
>>377
具体的な理由何一つ言ってないなw

380 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:41:20.53 ]
>>374
C, C#, Java あたりは PC で
スクリプト言語はスマホやタブレットなのかもしれない

381 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:41:31.07 ]
Javaで$(”ul li .hoge”)という書き方は内部で$メソッドを定義しない限り
残念ながら出来ない
どうしても、$.$()になる
Cなら出来るだろうけどそれこそ破門レベルw
あと当然extends JQueryはそれぞれ別のクラスになってしまう

382 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:42:49.00 ]
>>378
名前かぶったら別の変数にして使えるじゃん



383 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:42:57.27 ]
jQueryはイベントハンドラとかthisの上書きとかいろいろJSならではのことやってるから
静的言語で移植するのは100%無理
ブラウザのDOM関数叩ける、V8のライブラリとして作るのならなんとかというところ

384 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:44:09.85 ]
>>381
$が関数名として使えないとかいう話?
使えるけど?

> $.$()になる
あぁ、staticインポート機能を知らないのか。

385 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:45:24.42 ]
>>382
えとね、今はプラグインのメソッド名の話してるの

$オブジェクトを別の変数で使う話してないの

386 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:45:25.53 ]
>>384
ああ忘れてたわ
すまん

387 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:46:12.63 ]
>>385
だから、プラグインのメソッド名がかぶるなら、$オブジェクトを別の変数に入れて
それぞれ使い分ければ良いだろ

388 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:47:39.72 ]
staticだと、それこそnoconflictができないよね
まあ何か考えれば方法があるのかもしれないが

389 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:47:41.21 ]
無理だって言われてるのに意地張るなよ
それともチューリング完全だからとかいうのか?

390 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:50:57.95 ]
>>387
お前馬鹿か?

$をhogeって変数に入れても
プラグインのメソッドは、
$にもhogeにも作られるんだよ。

$はオブジェクト、つまり参照型なんだから
コピーは作られない。

391 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:54:19.33 ]
>>388
noconflictもstaticもお前勘違いしてるだろ。
無理に参加しなくていいよw

392 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:55:26.14 ]
>>390
deep copyすればいいじゃない



393 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:58:42.91 ]
>>383
> jQueryはイベントハンドラとかthisの上書きとかいろいろJSならではのことやってるから
> 静的言語で移植するのは100%無理

JavaとJavaScriptでthisの扱いが違うのだからそれは当然
100%同じインターフェースで実装できるわけじゃないが
実用上困らないレベルでは実装可能。

例えばthisは、クロージャー(Javaでは匿名クラス)の第一引数にすれば良い。

394 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 00:59:10.41 ]
>>390
何がどう出来ないんだ?
単なるオブジェクトだよ?
クローンも作れるし、それぞれに独自の拡張が出来る
プロトタイプベースの言語に慣れてないのか?

395 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:00:22.56 ]
jQueryはJavaでは無理って言われて
ついにJavaドカタが本性を現した、の巻

396 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:00:54.91 ]
>>392
プラグインはjQueryにメソッドを生やす。
jQueryをコピーして作られたjQuery2にメソッドは生やさない。

jQueryに生えたメソッドをjQuery2に移し替えても
プラグインはjQuery2ではなくjQueryを参照する。

397 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:02:33.63 ]
まあ実際にjQueryを真似たjsoupというJavaライブラリが存在するしな。
実証されてることをうだうだ言っても意味が無い。

398 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:03:16.21 ]
>>393
>100%同じインターフェースで実装できるわけじゃない
>例えばthisは、クロージャー(Javaでは匿名クラス)の第一引数にすれば良い。

別に昨日が実装できるのは当たり前なんですけど?
あの簡素で柔軟なインターフェースは静的言語では困難って話をしてるんだけど

399 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:03:40.69 ]
gihyo.jp/dev/clip/01/orangenews/vol67/0001


2012年1月27日,XMLをjQuery風に操作できるJavaライブラリ「jOOX 1.0.0」が
リリースされました。jOOXはLukas Eder氏が開発したもので,流れるような
インタフェース(Fluent Interface)(注1)で記述していくことでXMLの走査や
編集が行えます。Java 5から導入されたStatic Importをうまく使っており,
非常に簡潔な記述を実現しています(リスト)。



リスト jOOXを使ったコード
Document doc = $(new File("foo.xml")).document();
Match m = $(doc).find("book").filter(ids("book1", "book2"));

400 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:04:18.51 ]
>>398
> あの簡素で柔軟なインターフェースは静的言語では困難って話をしてるんだけど

具体的には?

401 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:04:39.83 ]
>>396
プラグインAでjQueryにメソッドをはやしてから
別名変数にクローンを保存
ブラグインBでjQueryのメソッドを上書き
余裕

402 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:05:30.54 ]
https://code.google.com/p/joox/

// Parse the document from a file
Document document = $(xmlFile).document();

// Wrap the document with the jOOX API
Match x1 = $(document);

// This will get all books (wrapped <book/> DOM Elements)
Match x2 = $(document).find("book");

// This will get all even or odd books
Match x3 = $(document).find("book").filter(even());
Match x4 = $(document).find("book").filter(odd());

// This will get all book ID's
List<String> ids = $(document).find("book").ids();

// This will get all books with ID = 1 or ID = 2
Match x5 = $(document).find("book").filter(ids(1, 2));

// Or, use css-selector syntax:
Match x6 = $(document).find("book#1, book#2");

// This will use XPath to find books with ID = 1 or ID = 2
Match x7 = $(document).xpath("//book[@id = 1 or @id = 2]");



403 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:05:59.81 ]
そのjOOXとやらのプラグインはどうなってるの?
イベント操作は?

404 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:07:39.75 ]
// This will add a new book
$(document).find("books").append("<book id=\"5\"><name>Harry Potter</name></book>");

// But so does this
$(document).find("book").filter(ids(5)).after("<book id=\"6\"/>");

// This will remove book ID = 1
$(document).find("book").filter(ids(1)).remove();

// Or this
$(document).find("book").remove(ids(1));

405 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:08:41.21 ]
>>403
落ち着け
これはXMLをjQuery風に操作できるライブラリ

406 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:08:52.25 ]
>>396
jQueryを読み込んでから各プラグインを読み込む間
いつでも変数弄ったり自由にできるんだけど

JQ=DC(jQuery)
プラグイン1を読み込む
[jQuery1,jQuery]=[jQuery,DC(JQ)]
プラグイン2を読み込む
[jQuery2,jQuery]=[jQuery,DC(JQ)]
プラグイン3を読み込む
[jQuery3,jQuery]=[jQuery,DC(JQ)]

でぜんぶ別々のプラグインが使える

407 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:14:14.18 ]
>>403
イベント? Javaはブラウザじゃないんだが
一体誰がイベントを送信するんだ?

408 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:15:37.17 ]
イベントとブラウザかどうかは関係ないんだが
タイマー、ソケット、エラーとかいろいろ発生源はある

409 名前:デフォルトの名無しさん [2013/05/04(土) 01:17:55.92 ]
>>380
それは汎用性という観点だろうけど、C/C++は別格

汎用性:
C/C++ >>>>>> C#, Java, JVM言語 >>>>>>>>>>>>>>>>>>>> スクリプト言語

プログラミング能力:

Lv6 => C/C++使い
Lv3-5 => C#, Java, JVM言語使い
無能力者〜Lv1 => スクリプト言語使い

410 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:18:22.60 ]
>>408
> タイマー、ソケット、エラーとかいろいろ発生源はある

だからなんでそれをjQuery風ライブラリで扱わないといかんの?

お前が言ってるのはsetTimeoutでできることを
jQueryでやりましょうって言ってるようなもんだよ。

jQueryが扱う対象はDOMのイベント
DOMのイベントはブラウザが発生させる。

411 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:18:39.92 ]
Javaだとメソッドの引数に無名関数渡すようなのはできるのかね
jQueryのメソッドにはそういうのけっこうあるんだが

412 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:19:00.89 ]
イベントループはユーザーの操作とかと関係ない
シングルスレッド、IOフリーのJSと相性がいいだけ



413 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:19:09.33 ]
クラス相当のものも全部単なるオブジェクト
うひょおおおかっこいい
さすがJavascriptすげーw
クラスをコピーしたりできない他の言語とはひと味違うぜw

414 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:19:26.74 ]
>>411
匿名クラスで可能。

415 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:20:27.00 ]
>>414
jOOXの例で書いてみてくれよ

416 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:21:22.65 ]
>>414
無理
真のクロージャじゃない

あと、Javaの場合jsonで渡すのが難しいだろうね
それこそ全部文字列にしないと

417 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:21:23.43 ]
イベントとか言ってる人はXMLとかHTMLとかDOMの区別がつかんのだろう

418 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:21:30.25 ]
>>408
お前が言ってる云々は意味がわからないな
自分は誰がイベントを送信するんだとか
イベントループをまったく理解してない頓珍漢な言葉に反応しただけですが?

419 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:21:34.90 ]
いや最近の静的言語はより安全だしIDEのサポートもあるから難易度は低いよ
スクリプト言語でちゃんとプログラミングするのはC++並みに難しい
まあ、不等号を間抜けに並べる奴に正論は通じないけど

420 名前:デフォルトの名無しさん [2013/05/04(土) 01:23:39.70 ]
まあJavaScriptはスクリプト言語の王様だかな
妬み、文句を付けたがる落ち目な言語開発者の気持ちはわかるw

421 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:23:48.47 ]
>>415
サンプルコードを見たいならテストコードを見るのが一番手っ取り早いぞ。一つ賢くなったね。

https://github.com/jOOQ/jOOX/blob/master/jOOX/src/test/java/org/joox/test/JOOXTest.java

830行
@Test
public void testMap() throws Exception {
assertEquals(
Arrays.asList("1", "2", "3", "4", "1", "3", "1", "2"),
$.find("book").map(JOOX.ids()));

assertEquals(
Arrays.asList("Amazon", "Roesslitor", "Orell Fuessli"),
$.find("library").map(JOOX.attrs("name")));

assertEquals(Arrays.asList(0, 1, 2, 3), $.children().first().find("book").map(new Mapper<Integer>() {
@Override
public Integer map(Context context) {
assertEquals(context.element(), context.match());
assertEquals(context.elementIndex(), context.matchIndex());
assertEquals(context.elementSize(), context.matchSize());

assertEquals(4, context.matchSize());

return context.matchIndex();
}
}));
}

422 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:25:00.06 ]
なにこの
  
  糞

みたいな言語



423 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:25:11.88 ]
>>419
「ちゃんとしたプログラミング」が必要な場面で
スクリプト言語を選ぶのは無能

わざわざ遅い言語で書く必要性がない

424 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:25:40.10 ]
>>421
本当にできるもんだなぁw

425 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:26:16.00 ]
JavaScriptの速度とかJAVA並なんですけど?

426 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:26:28.29 ]
結局プラグインは何一つなしと

427 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:27:20.30 ]
>>421
うひょ〜〜〜w


ワロス

428 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:27:44.41 ]
>>416
> あと、Javaの場合jsonで渡すのが難しいだろうね
> それこそ全部文字列にしないと

ぷっ。当たり前じゃね?
jsonはJavaScriptの文法から生まれたもので、
JavaScript以外じゃ文字列として渡すしかねーよ。

429 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:27:59.77 ]
>>423
なんのためにスレタイを変更したと思う?
今すぐに死んだほうが良い知的障害を寄せ付けないため

430 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:28:03.91 ]
JS厨まだ居座ってるんだな
スレタイからRuby消して最初にJavaScript持って来てるし

431 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:28:50.25 ]
>>426
プラグインはjQueryの設計ミスなんでどうでもいい。

432 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:29:46.37 ]
>>423
JSはasm.jsとかParallels.jsで今年末にはC#並の速度の言語になってるよ
今でもJAVAに勝ったり負けたりするレベルにはきてるし



433 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:30:10.70 ]
>>430
まあ荒らしが続くようならJAVAドカタと同じ道を辿るだけ

434 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:31:08.74 ]
JsonはJavaでも、リフレクションを使って生成すれば何とかなる気がする
プラグイン側がクラスを用意する必要があるがな
ただ、静的言語でこれやるのは破門レベルとされてるから
それをやる奴は出てこないだろうw

435 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:31:12.27 ]
>>433
それが狙いw

436 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:31:15.95 ]
>>428
静的言語でjQueryの代わりを作るのが大変だという話だろ
当たり前でも大変なのは変わりねえよ

437 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:31:41.69 ]
>>431
プラグイン無しのJQueryとか考えられないんだが

438 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:32:53.25 ]
>>434
> JsonはJavaでも、リフレクションを使って生成すれば何とかなる気がする

てんさいがいる気がする。


天災がw
何を考えてるのかさっぱりだね。

439 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:34:07.78 ]
>>432
馬鹿かw
C#並になるわけないわw
JITコンパイルはコードによっては逆に遅くなることもしらない低能JS厨

440 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:34:51.79 ]
>>434
素直にC使えよ
JAVAとか文字列の扱いが一番糞なんだから
jQueryの代わりなんぞできた所で激重で使えるわけない
対抗できるのはCくらいのもんだ

441 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:35:40.80 ]
>437
普通にクラスを作ればいいだけだよ。

普通にjQueryオブジェクトを引数にして
jQueryオブジェクトを返すメソッドを作れば
それがプラグインになる。

メソッドチェーンができないだけ。

442 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:35:43.27 ]
ご存知の通り、JS厨が語る未来は現実を完全に無視したSFだから



443 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:36:42.31 ]
>>439
asm.jsはJITじゃないんですけど?
それにasm.jsはマイクロベンチや物理演算ベンチではすでにC#並になってるの知らないの?

444 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:38:57.03 ]
>>439
JITに限界があるからAOTにするのがasmだろ
知ったか乙

445 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:39:09.76 ]
>>443
JITじゃないならなんなんだよ
AOTコンパイラあるのかよ

446 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:39:34.14 ]
ぶっちゃけメソッドチェーンは糞だと思うが、
Javaでプラグインをメソッドチェーンで使いたいなら

>>421のJavaライブラリを参考に)
$.children().first().find("book").plugin(MyPlugin.class).map( 〜略〜

ってやれば出来るだろうね。

これだとクラス名は名前空間があるから
かぶることはないし。

447 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:41:18.33 ]
>>438

org.apache.commons.lang3.builder.ReflectionToStringBuilder

>>446
よくわからんが、毎回pluginなんちゃら.classとか書かないと駄目なのか?

448 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:42:09.78 ]
>>447
書かなくていいよ。
補完されるw

449 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:42:32.76 ]
>>444
AOTでも型が確定してなければ遅いし

>>443
特定のベンチだけ速くてもいみない
C#並ならソースだしてみろよ

あと「ベンチマークはXより速い」ってのは
実績のない言語のお決まりの宣伝パターンなんだよな
node.js推してる奴もそればっかり言ってたわ

450 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:42:39.16 ]
補完って、見た目変わらんのかw
ワロスw

451 名前:デフォルトの名無しさん [2013/05/04(土) 01:42:39.53 ]
JS厨よお、ちゃんと使い物になってる言語の話はできないのかい?
Googleの天才言語とか普及してないベンチとか大好きだな。頭大丈夫か

452 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:44:37.26 ]
>>449
asm.jsは型が確定してる



453 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:45:38.57 ]
>>443
ある、というか最近出た
まだ完璧ではないけど
一部計算をマルチスレッドでさせるParallels.js(こっちはまだまだ)と合わせて
JAVAのポテンシャルを抜くことは確実

JAVAはプリミティブ型の扱いを中間コードにする仕方が悪いらしく
そこの部分ではもうだめ

>>449
型を確定させる書き方をするんだよ
a = a|0
ならaはintみたいに
ちったあ調べろ
j15r.com/blog/2013/04/25/Box2d_Revisited

454 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:47:25.72 ]
JSが速くなるわけじゃねーじゃん
型を指示する魔改造なんてほかにもある
ただの糞言語

455 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:49:17.92 ]
>>450
ん? pluginってメソッドがそんなに気になる?
これはjQuery UIでも用いられてる方法なんだけど
あっちは.pluginではなく.dialogだけどね。

jQuery UIは機能が多すぎ&似ているため、
jQueryプラグインとしてjQueryオブジェクトにメソッドを生やすと
確実にメソッド名がかぶるだろう。

だから、$( ".selector" ).dialog( "option", { disabled: true } );
のように、.dialogメソッドを介して、.optionメソッドを呼び出している。

自分でjQuery UIのwidgetを作ればわかるよ。
自分で作ったwidgetクラスのメソッドは、このように
dialogメソッドを介して呼び出すことになる。

456 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:49:25.67 ]
C#の型推定の方が万倍マシな件について

457 名前:デフォルトの名無しさん [2013/05/04(土) 01:50:31.14 ]
注目を集めるために実績のない言語が宣伝するのは決まってベンチマーク
そのベンチマークもねつ造でした

d.hatena.ne.jp/skymouse/20130323/1363979203
boaoa 2013/03/23 12:52
asm.js、大変興味あるのですが
現在asm.js用のサンプルコードをChromeで動かすと
普通のコードよりなんと60倍も遅くなりました
+等の演算子がJITに悪影響を与えるみたいです
そして、そのasmコードをnightlyビルドで動かしてみても、
普通に書いた時コードのChromeと全然変わりませんでした


普通のコードよりなんと60倍も遅くなりました
普通のコードよりなんと60倍も遅くなりました
普通のコードよりなんと60倍も遅くなりました

458 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:50:54.69 ]
asm.jsは型を確定させ、GCを止め、仮想メモリを弄らせるという
鬼畜サブセットだから当然速度はC系に追いつく
当然これを全部で使う野郎はいないだろうが
ライブラリ、特に物理演算やゲームエンジンがサポートしたり
関数単位で使えるから「要所」で使うことで劇的にパフォーマンスがよくなる

459 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:52:33.71 ]
JITは面白いが型指定は周回遅れ

460 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:54:29.29 ]
半日でここまで来るとかお前ら暇だな

461 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:55:21.25 ]
JavaScript使いと
それに嫉妬するその他のスレになってるね。

462 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:56:52.81 ]
>>455
とりあえずそれ別にoptionメソッドじゃないだろ
optionセットしてるだけ

Javaでやるならこうか
$( ".selector" ).plugin(Dialog.class).option(new Option().disable("true"))
まあちょっと冗長だが目をつぶれないこともないか



463 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 01:59:00.83 ]
>>457
それ、ガチで俺が書いた
興奮気味に書いたからやや大げさだった

FF22じゃなくて23で試してみたらちゃんと早くなったからそこは大丈夫
V8が対応するまで使う気が起きないのは言うまでもないが
それはどんな新機能でも同じ

まずはFFが実験台となって
Parallels.jsとともに精査してほしい
そしてES.nextとぶつかるようなことにならなければ
比較的V8での実装は早いんじゃないかな?

流石に5倍とか早くなるのは大きい
それを書く前に既にV8グループで挙がってたし
早ければ1年後にはってとこかな?

ES7に入る可能性もなくもないかも
そうなったら逆に遅くなるかな

464 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:01:31.38 ]
JS厨が散々すごいと吹聴してた未来ってこれかよ
互換性のための無理やり感がダサすぎw
もうJS厨のこと何も信じられない(胡散臭すぎてはじめから何も真に受けてないけど

465 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:01:49.13 ]
>>463
5倍速くなると言ってもベンチマーク用に用意した
特殊なシチュエーションでそれだけ速くなるだけだと思う
正直、平均的に見たらもう素のJavascriptが5倍程度で収まる気がする

466 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:03:29.01 ]
なぜJS厨は息をするように嘘をつくのか

467 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:03:53.66 ]
じゃあ他の言語に立派な未来があるのかというと「?」
これはもう嫉妬にしか見えない

468 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:05:49.77 ]
型の指定みたいな言語の根幹にかかわるところは
言語の仕様としてきっちり定義しないとダメにきまってる。
asm.jsのようにライブラリで魔改造して別言語にするアプローチは腐ってる

互換性のないコードが一時的に氾濫するだけ。
その後はだれも使わなくなる。

469 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:07:51.88 ]
>>465
特殊なシチュエーションでいいのよ?
だってJSの速度が気になるのって特殊なシチュエーションだけだし

とくに3D周り
WebGLはなんと行列変換をJSでやらないといけないのよ
気持ち悪いでしょ、なんでネイティブで実装してくれないのって
でもasm.jsは特に型付配列を使った演算が高速になるからまさにぴったし

あと個人的にはJSでボードゲーム作ってるんだけど
ほんと、1%でも早くなって欲しいから期待してる

470 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:08:05.73 ]
>>467
なんでキチガイJS厨の「?」な希望的観測に嫉妬しなきゃならんの?頭大丈夫?

471 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:08:30.85 ]
>>462
少し例が悪かったね。自分も少し間違ったし。
optionはメソッド。これは変わらない。

nbnote.jp/blog/2011/12/jquery-widget-1/
一部抜粋

// ウィジェット定義
$.widget('test.myWidget', {
 // パブリックメソッド
 setContent: function(str) {
  this.options.content = str;
  this._update();
 }
}

この独自作成ウィジットのsetContentメソッドを呼び出す方法はこれ。
$('#myWidget').myWidget('setContent', 'piyo');

× $('#myWidget').setContent('piyo');
こうではない。


$( ".selector" ).dialog( "option", { disabled: true } );
これも同じで、dialogウィジットのoptionメソッドを呼び出す書式。

472 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:10:22.97 ]
JSアンチは自分の言語を誇らしげに語ろうとはしない
なぜ?



473 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:10:57.21 ]
asm.jsのベンチマークのグラフは、素のFFが軒並み素のChromeに大幅に勝ってる時点で
都合のいい状況選んだんだろうな感が満載なんだがw

474 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:11:14.94 ]
単にCと相性が悪い糞仕様を自作の糞言語で尻拭いしてるだけじゃねーか
糞JS固有の問題とかどうでもいいし特に優位性もない

475 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:11:24.93 ]
>>472
叩くのが好きで、叩かれるのは嫌いだからに決まってるだろw

ほら俺の言語を叩いてみろ。何の言語かは教えないけどな!

476 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:12:01.08 ]
>>468
asm.jsはライブラリなんかじゃないよ?
asm.jsという名前がちょっとまぎらわしいかね
言語仕様をきっちり決めた新しい言語で、JSとも互換性があるっていうだけ

477 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:12:54.41 ]
Cソースをemscriptenでasm.js変換したものならかなり有意な効果がある
V8のasm.js対応はわりと簡単そう
これが普及してしまいそうだとAppleとMSはけっこう焦るだろうなあ

478 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:13:15.67 ]
asm.jsはマジキチだが
逆にそれがいいw
ただし現状では、100行を超えるコードのasm化は人間には無理
今はIDEもデバッガも皆無
早急に整備すべし

479 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:13:59.86 ]
>>472
誇らしげに嘘八百を並べる方が理解不能

>>475
さっさとpython叩けよ
あ、関数内関数のスコープがおかしい、でしたっけ?
JSがおかしいだけだったwww

480 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:15:16.88 ]
>>477
> これが普及してしまいそうだとAppleとMSはけっこう焦るだろうなあ
Appleはハード売れなくなるから焦るってのはわかるが、
MSはなんで焦るの?

481 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:15:43.78 ]
asm.jsはできるだけ機械変換するものと思っていたほうがいい
asm.jsを手で書くのはCでasmを書くのと近い

482 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:16:55.81 ]
>>477
簡単そうって何?また希望的妄想ですかw
それしかないな、本当にそれだけ。自分でもそう思うでしょ?
自分の馬鹿さ加減が嫌にならない?



483 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:18:27.03 ]
出たよ。トランスレータがあるからOK
デジャブ感が半端ない

484 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:18:37.80 ]
Pythonは良い言語だから叩かないわ
ブラウザでインタラクティブなことが出来たら良いんだけどね

ちなみにJavascriptの最近のベンチマークな
d.hatena.ne.jp/satosystems/20121228/1356655565

485 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:19:31.05 ]
>>473
マイクロベンチではFFの方が早い
V8はアプリ単位になると早くなる
kripken.github.io/mloc_emscripten_talk/#/27
kripken.github.io/mloc_emscripten_talk/#/28

486 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:20:02.69 ]
>>483
トランスレータがあるからOKなんじゃなくて、
そもそも最初からトランスレーターで変換することを想定してるの
それがasmという名前がついてる理由

487 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:22:39.48 ]
>>484
すごいな

d.hatena.ne.jp/satosystems/20121228/1356655565

さて、ぶっちぎりで速いのが Scheme48 のコンパイルバージョン。
なんと 0.004sec。ただこれはタネがあって、コンパイル時に関数を評価して
フィボナッチ数を算出しているためです。したがって、コンパイルがインタプリタで
実行するのと同程度の時間がかかります。ただ、コンパイル時に評価できる
関数は評価してしまうというアプローチは関数型言語の特性をうまく生かした良い方法だと思います。

Scheme48 を除いたら、Java がトップでした(追記:[2012/12/30] Haskell の
型宣言を指定したら、Jhc に抜かれてしまいました)。JIT が効いているのは当然として、
Java VM の動作や実装を熟知している身としては、よくこんな短時間で
ブートストラップクラスを初期化できるものだと感心してしまいま
Oracle の最新の Java VM を使えば、速くなるんじゃないでしょうか。いやはや。

488 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:23:09.04 ]
メンヘラの妄想に付き合うの疲れるなあ
脱洗脳のカウンセラーとかの辛さがわかる
現実に生きてない。都合の悪い話が聞こえてない
さっさとCのコードをこの場で変換してみせろ!

489 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:23:51.79 ]
C (gcc -O2) 1.18
JavaScript (node.js) 2.62

速いwww
もう下手な静的言語並みになってるw

490 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:24:53.21 ]
たしかV8のグループでは
Node.jsとかが挙がってた

ブラウザの中だけで考えると押しが弱いけど
これからJSは広がっていくし
例えば昨今ではモバイルOSの「ネイティブ」として使われ始めたところを見ると
V8も気にはなると思う

あと、asm.js部分は基本的に特定のエンジンに依存しない形になってるらしい
というか既存のコンパイラの上にasm.jsコンパイラが乗る形
だから多分V8での実装は困難ではないはず

491 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:26:40.56 ]
もう希望的観測はいいから…
お願いだから確認した事実を喋ってくれ、お願いだから…

492 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:27:54.77 ]
確認した事実・・・。

JavaScriptはここまで広く使われている。



493 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:27:55.09 ]
>>489
単純な四則演算はもう十分に早いよ
でも実物になるとまだCの10倍遅い

JITの限界とか、GCとか、メモリアクセスとかがネックになってるらしい
もうここいらで限界みたい
そこを改善して実物でもCの2倍の実行時間で済ませようとするのが
asm.jsサブセット

494 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:29:12.50 ]
長文で妄想垂れ流したいだけならブログでいいと思うよ
デタラメで本人すら確認のしようもない、再現性もないことで議論とか無理だし
だからこそいくらでも大きなことが言える。ログが誇大妄想で埋まってる

495 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:29:12.84 ]
>>44
f(i % 2) {

496 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:30:58.35 ]
嘘をついているという自覚がないっぽいのが本当に怖い

497 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:31:10.91 ]
確認した事実 ↓
Python (CPython) 53.651

498 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:32:07.97 ]
C言語というJavaScriptとは全く違った文法から
asm.jsの力を借りてブラウザで実行するコードを生成できる

ということは、JavaScriptを改良した言語から
asm.jsの力を借りてブラウザで実行するコードを生成できるということでもある。

JavaScriptを進化させるのにブラウザのバージョンアップを
またなくて良くなる世界ができつつある。

499 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:33:27.08 ]
でもこれだけJSの高速化が盛んになってくると気軽に書けなくなる

if(i % 2)

if(i % 2 == 1)
ってどのくらい違うのか

でも将来の賢いコンパイラにとってはどちらも同じ意味にとられるかもと考えてしまう
これは大げさな例だけど本当に難しい

500 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:36:29.15 ]
昔はVBが一世を風靡していたとき、
GUIは作るのが簡単なVBで
速度が必要な場合はC++でDLLを作る。
という手法が使われていた。

それと同じ構図がブラウザの世界にもできつつある。
JavaScriptはブラウザで動くGUIを作るのが簡単である。
だからJavaScriptでの開発というのはこれからもメインになるだろう。
そして速度が必要な場合のみ、他の言語で開発することもある。

501 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:38:33.70 ]
>>493
単純な四則演算ではない実物ってのがよくわからない
再帰のフィボナッチはスタック使いまくりだよね
スタック領域のアクセスは良いけどヒープが駄目ってこと?

502 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:39:23.21 ]
V8の登場以降からブラックボックス度は高まりつつあるよね

今では内部的にintを使うとか当たり前だし
それを考えると

for(i=2^31-1; i>=0; ++i) //iはfloat型と推論される

for(i=2^31; i>=0; ++i) //iはint型と推論される
の違いとかきになる

あとなんかfor文は結構書き方によって最適化されてるらしい
iが0からじゃなくて10からとかだと特別な意味があるのではと思われるという「噂」もあるくらい



503 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:40:28.29 ]
まーた始まった。無知が自分に酔いしれて一人妄想を語る
テキトー言うだけならブログでやれよキチガイ

504 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:41:51.85 ]
もうスレ半分使っちまったのかw

505 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:42:16.55 ]
>>500には言葉が通じず対話が不可能で一切の意味のあるレスをしないから害悪でしかない

506 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:44:57.13 ]
>>501
すまん、正直にいうと詳細はわからん

でもこの手のマイクロベンチだといつも2,3倍だが
大きなベンチになるとCの十数倍になるのを多く見てきた

kripken.github.io/mloc_emscripten_talk/#/27
kripken.github.io/mloc_emscripten_talk/#/28

asm.jsの説明によると
型チェックやGCが遅くしてる原因らしい
それでたしかasmはMath関数にも手を入れたり追加してるんだっけか
そのあたりがネックなんだと思う

あとasmでは型付配列をよく使う
そこもいくらか最適化されてるらしい

507 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:45:55.49 ]
もう嘘しか言わないキチガイJS厨の相手をするのはよそう。時間の無駄だ
中身は空っぽの荒らしスクリプトなんだから。もちろんJSで記述されててバグがてんこ盛り

508 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:48:02.13 ]
@A = 1..10;
@x = map {$_ * 2}
     grep{$_ % 2 == 0} @A;

509 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:49:07.77 ]
確かに>>500はちょっと間違ってるな
VBは遅かったが、Javascriptは十分に速い
速度が必要な場合にもJavascriptを使うことが多くなる
他の言語で書くようになるとか妄想はブログでやって欲しい

510 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:49:18.23 ]
JSの話をやめた所で他の言語の話をする奴がいなさそうなんだが……

511 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:51:50.40 ]
>>507
> もう嘘しか言わないキチガイJS厨の相手をするのはよそう。時間の無駄だ

消える宣言した以上、ちゃんと消えろよな。

レスなんかしたら見苦しいぞ。



よし、キチガイが消えたw

512 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:51:58.75 ]
JavaScriptはあとはメモリアクセスだよなあ
せめてピットボードを用意して欲しい
その辺が自由になれば巨大数の問題とか解決できるのに
あとは演算子オーバーロードだな



513 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:53:38.99 ]
>>510
別に無理に伸ばす必要ない
JS厨が荒らすだけのスレならJSスレに行ってくれ。邪魔
特にブラウザの話しかできないやつ見ると明らかに他のスクリプト言語から浮いてる
というかWebは板違いじゃね。日常で使うスクリプトという話は皆無
もういいよJSの話は。次スレから外して問題ない
イキイキと荒らす馬鹿が目障り

514 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:54:47.54 ]
ピットボード?
さっきのボードゲーム作ってる奴でビットボードと間違えたとか?

515 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:55:07.15 ]
スクリプト言語からWebやWebサーバーを取ったら……

516 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:55:14.34 ]
>>508
@A=1..10;
@x=map{$_ %2 ? () : $_*2} @A;

再帰や遅延評価を使うまでもないリスト処理は面白くないんだよね…

517 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:55:57.32 ]
Webはちゃんと板があるし
ブラウザは共通の話題ないし比較もできない

518 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:56:16.36 ]
>>513
> JS厨が荒らすだけのスレならJSスレに行ってくれ。邪魔

毎回思うんだけど、そんなこと言っても
いうこと聞くわけ無いだろう?

519 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:57:08.98 ]
>>513を苦しませるには
JSの話題をどんどんやったほうがよさそうだw
自分からやられて嫌なことを語るなんて
馬鹿だなぁ。

520 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:57:27.51 ]
>>518
そうだよ。JS厨は死ぬまで己の馬鹿を晒し続ける

521 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:57:35.07 ]
すまんww
ビットボードと入力してもピットボードになってしまう
GoogleIME

522 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:57:58.03 ]
>>513
普通に言語の速度とか、node.jsとか、科学計算とか、クロージャとか
内包表記とか、Javaの話とかPythonの話とか
ブラウザ以外の話も豊富じゃん



523 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:59:45.56 ]
>>522
奴には見えてないのですよ。
標的意外なにもね。

524 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 02:59:51.38 ]
>>519
論破されたから悪意を持って荒らすだけのゴミになったんだよね
ゴミすぎる自分をどう評価してる?いきる価値ないと思うよね。死んで良いよ

525 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:01:02.15 ]
というか他の言語って何が原因で遅くなってるの?
ただ高速化の需要が少ないだけ?
JSでエンジン作った方が早そうな勢いなんだけど

526 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:01:08.04 ]
>>524
死んでいいよと言われても死ぬわけないしw

お前の願い、死んでほしい?

残念、お前の願いは棄却されましたぁぁぁw

527 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:01:51.39 ]
>>523
本当に妄想以外で議論が出来るなら、JS厨はなんで嘘で荒らし続けるわけ?
どうせJSのことも何も知らないんだろ。幻想を語るだけなら黙ってろ

528 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:02:16.46 ]
>>524
端から見てるとお前も悪意持ってて怖いわw
今までJS厨は人の中傷はあまりしてなかったが、519の人が
やり始めたな

529 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:02:28.00 ]
お前が嘘だというのが
間違いなだけだろ。
冷静になれよ。

530 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:04:04.81 ]
d.hatena.ne.jp/satosystems/20121228/1356655565
とかみるとPerlがこんなに、PHPよりも遅いのが意外
Perlと言えば歴史ある言語だし
その正規表現は今なお他の言語(JSも)に影響を与えている
素晴らしい言語なのになぜ計算は遅いのか?

531 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:05:24.12 ]
>>530
だって開発者がPerl6なんてやってて
Perl5は放置状態だもの。

532 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:06:00.32 ]
>>529
そうだな、嘘でも本当でもない、不確定のゴミ情報
というかお前の存在自体がゴミ。1つもまともな情報を出さずにオナニーしてるだけ
醜すぎるわ。反論できる?



533 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:06:22.45 ]
>>530
何かどうでもいい話
性能なら別の手段つかうさ

534 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:07:28.74 ]
>>532
面倒くさいやつだなw

お前はキチガイ。反論できる?

535 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:07:44.25 ]
>>525
他の言語も頑張ってる
V8作ったGoogleが天才すぎるだけ

536 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:10:20.95 ]
>>534
できないね。お前みたいなゴミカス荒らしに唯一構ってるんだからな
普通の人間はヤバいキチガイを見たら邪魔だなあ、早くどっか行けと思いつつ関わらない
お前はそう思われてるんだよ。分かるか?なんで荒らすんだ。妄想なら他所でやればいいじゃないか

537 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:11:18.10 ]
Googleが頑張ってほかの言語エンジンも改良すれば世界が良くなるな

538 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:11:53.35 ]
>>536
残念、またしても
お前の願いは叶えられなかったw

539 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:12:10.97 ]
V8の開発してるのは以前はSunでJavaのJITのVMの開発で活躍してた人だと思った
JIT関連のノウハウで圧倒的に先行してるんだろう

540 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:12:54.30 ]
>>536
ならスルーしろよ
というか、Google天才とか言ってるのはそいつじゃねーからw
お前が誰彼構わずアタックするからこうなっちゃんたんだぞ

541 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:13:46.51 ]
>>536
北風と太陽

よそにいけといえば言うほど
このスレにいることになる。

逆にここにいろと言ったほうがいいよ。

そう言ったとしてもここにいるわけだけどなwww

542 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:14:51.46 ]
>>538
俺の願いじゃなくて、みんなの願いね
心配しなくても、お前の願いであるみんなの迷惑になる行為を続けることは毎日叶えられる
良かったな。もう誰もお前がまともなんて思わない
JS厨の詐欺にはかからない



543 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:15:46.09 ]
アンチJS厨が一番うざい。
だからみんな誰もお前にレスしてないんだぞ?

544 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:15:54.79 ]
Goの開発もベル研にいた有名な人たちが参加してるね

545 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:16:24.75 ]
まとも面したJS厨がいかにキチガイか周知できれば十分

546 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:16:30.42 ]
さて、またJavaScriptの話でもしますか。

547 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:19:07.64 ]
最近どんなプラットフォームでも
HTML+CSS+JavaScriptを使うことが標準的になっている。

これらは一例。

Google Chrome add-ons
Mozilla XUL apps and Firefox extensions
Firefox OS apps
Chrome OS apps
Windows 8 Store (“Modern/Metro UI”) apps
BlackBerry 10 WebWorks apps
PhoneGap/Cordova apps
Apple UIWebView class
Microsoft WebBrowser control
node.js (combined with jsdom or similar)

548 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:20:29.60 ]
>>544
各会社から、有名な天才達がGoogleに集まってきているってことだな
Pythonの作者もちょっと前までGoogleだったらしい
今は脱退したようだが

549 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 03:23:46.29 ]
現在広く普及している、スマホ、タブレットはもちろんのこと
テレビでもJavaScriptが動く時代だからな。

550 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 04:19:23.91 ]
例のアンチが消えた途端静かになったなw

551 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 04:25:52.97 ]
なんか寂しいな
俺も寝るか

552 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 04:42:23.52 ]
どんな言語を使おうと避けられないウェブ化によってHTMLが
ユーザーインターフェースになるのは避けられなかったわけで。

jQueryが一番うまくHTMLを扱えたことが
JavaScriptの大ヒットに繋がったんだろうな。



553 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 05:16:59.66 ]
多分Googleのお陰が50%だと思う
やっぱり再注目のきっかけになったのは
検索とかマップのAjaxだし

554 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 07:19:47.60 ]
>>539
そんな奴があんな中二っぽいコード書くのか?

555 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 07:27:41.67 ]
>>554
どんなコード?って聞かれて
答えられないなら、そんなこと言い出すなよ

556 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:13:59.47 ]
>>530
PythonでCython使って書いたら相当速くなった(53.98 -> 2.63)
こんな感じに、Perlにも高速化の手段があるんだろう

ソースコードはこれ

cimport cython

cdef fib(int n):
    if n < 2: return n
    return fib(n - 2) + fib(n - 1)

print(fib(38))



実行結果はこれ(CPython版との比較)

$ time python fib.py
39088169
python fib.py  53.82s user 0.04s system 99% cpu 53.983 total

$ time python fibc.py
39088169
python fibc.py  2.61s user 0.02s system 99% cpu 2.635 total

557 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:16:22.92 ]
さすがに悔しいからってPythonじゃない言語を持ち出されても
「int n」でバレるぞw

558 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:17:55.49 ]
せめてCythonでググれよ……

559 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:22:18.87 ]
wikipediaより
>Cython は、C言語によるPythonの拡張モジュールの作成の労力を軽減することを
>目的として開発されたプログラミング言語である。
>その言語仕様はほとんど Python のものと同じ (上位互換) だが、Cの関数を直接呼び出したり、
>C言語の変数の型やクラスを宣言できるなどの拡張が行われている。

Pythonじゃない別言語じゃん
TypeScriptを持ち出してJavaScriptはええって言ってるようなもん

560 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:22:49.55 ]
CythonはPythonに型注釈を追加したような言語で、
コンパイルしてPythonのC言語拡張を作る事が出来る

Cythonで書かれた関数やクラスはPythonから呼び出す事ができるし
Pythonで書かれた関数やクラスをCythonから呼び出す事もできるよ

561 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:25:31.15 ]
>>559
Pythonの上位互換って書いてあるだろ
ここ遅いから速くしたいなーってなったら型を書けば良い感じ
で、C言語拡張にコンパイルするから、普通のCPython処理系で動く

562 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:48:47.64 ]
>>556で関数の戻り値の型を書くのを忘れてたので、

cdef int fib(int n):

に変えて実行してみたら、もっと速くなった


$ time python fibc2.py
39088169
python fibc2.py  0.08s user 0.01s system 95% cpu 0.098 total



563 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 09:54:22.94 ]
C のコードはどこまで減らせるんだろうね
Python 界隈はそこらへんの問題に極めて意識的だけど

>>559
自分も別言語だと思う。Python のサブセットである RPython ならともかく

564 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:12:13.17 ]
>>560-561
つまりCに変換できるようにしたTypeScriptみたいなもんじゃん
TypeScriptをCやasm.jsに変換したらそりゃ速いよ

>>562
これ最適化でコンパイル時に値を計算したっぽいな

565 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:15:36.41 ]
>>564
> これ最適化でコンパイル時に値を計算したっぽい

print(fib(38))をコンパイルに含めずに
実行時にPython側からfib(38)を呼び出しても同じ

566 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:19:10.38 ]
>>565
良く分からないんだけど、コンパイル時に計算していないのに、
Cの数十倍速いってこと?

ちょっと良く分からない現象だね
何かタネがあるんだろうけど

567 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:26:25.09 ]
>>566
こちらの環境でC(gcc47 -O2)を実行した場合

$ time ./a.out
39088169
./a.out  0.25s user 0.00s system 99% cpu 0.257 total

568 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:27:02.43 ]
>>566
こちらの環境でC(gcc47 -O2)を実行した場合

$ time ./a.out
39088169
./a.out  0.25s user 0.00s system 99% cpu 0.257 total

569 名前:567 mailto:sage [2013/05/04(土) 10:34:54.74 ]
連投すまん
実行環境が違うのか、Cの速度も>>530と全然違うね
同じソースコードを使ったんだが

つまり、CPythonの速度がむちゃくちゃ遅い……?Python3.2なんだけど

570 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 10:51:19.53 ]
最後に、比較用にnode.js(v0.10.4)

$ time node fib.js
39088169
node fib.js  1.06s user 0.03s system 100% cpu 1.080 total

571 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 11:06:43.12 ]
なんだろう
Cの計算自体がすぐ終わりすぎて計測誤差が大きいのかな
何度もループさせないと駄目か

572 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 11:19:59.98 ]
node.jsはCの4倍程度か
たいしてPythonは200倍か
遅すぎワロス



573 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:01:45.29 ]
うちでもやってみた。Cython の使い方間違ってたら指摘してくれると助かる

% cat fib_c.c
#include <stdio.h>
int fib(int n) {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
int main(void) {
printf("%d\n", fib(38));
return 0;
}
% gcc -o fib_c fib_c.c
% time ./fib_c
39088169
./fib_c 1.12s user 0.00s system 99% cpu 1.125 total

つづく

574 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:03:22.85 ]
つづき

% cat fib_py.pyx
cimport cython
cdef fib(int n):
if n < 2: return n
return fib(n - 2) + fib(n - 1)
print(fib(38))

% cat setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("fib_py", ["fib_py.pyx"])]
)

% python setup.py build_ext --inplace
[...]

% time python -c "import fib_py"
39088169
python -c "import fib_py" 3.87s user 0.01s system 99% cpu 3.894 total

575 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:12:14.16 ]
>>562みたいに、戻り値の型を書くともっと速くなる?

576 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:22:55.70 ]
pythonが200倍遅いからって、他の言語に頼るとは、、、
python厨には失望した

577 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:25:49.15 ]
>>575
うっかりしてた。戻り値記述して再トライ

% cat fib2_py.pyx
cimport cython
cdef int fib(int n):
if n < 2: return n
return fib(n - 2) + fib(n - 1)
print(fib(38))

% cat setup2.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("fib2_py", ["fib2_py.pyx"])]
)

% python setup2.py build_ext --inplace
cythoning fib2_py.pyx to fib2_py.c
[...]

% time python -c 'import fib2_py'
39088169
python -c 'import fib2_py' 0.56s user 0.02s system 99% cpu 0.577 total

% cat fib2_py.c
[...]
__pyx_r = (__pyx_f_7fib2_py_fib((__pyx_v_n - 2)) + __pyx_f_7fib2_py_fib((__pyx_v_n - 1)));

578 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 12:57:07.99 ]
常識レベルの話として長いコードをここに貼るな
それがある外部リンクだけで良いから

579 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:01:53.10 ]
node.jsより速いという結果は貼るな
遅かった場合だけ貼れ

580 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:13:35.96 ]
cythonってpythonの拡張モジュール書いたりできるんだろ?
あれ、これってasm.jsという糞言語で高速化したいところを局所的に書けばいい
と言ってたのと同じじゃね。遅れてね?ただの後追いじゃね
で、asm.jsのコードと実行時間は?
なんかこのスレ見ても「できるらしい」とか「できるはず」とかいう胡散臭いレスが目立つけど
実際どうなの?

581 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:24:30.70 ]
>>580
Pyrex が 2002 年でそこからフォークした Cython が 2007 年
後追いではないと思われ

582 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:34:55.32 ]
「今JSが熱い!みんなが熱狂している!薔薇色の未来!」
って、他の言語が数年前に通った道なんだね…
Cに変換するか、Cから変換されるかって違いか。さて、どっちが速いかね



583 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:37:47.14 ]
>>582
JSが熱いってそんなCに変換するだのなんだののくだらない狭い世界の話じゃないんだが
asm.jsを熱弁してる奴がいただけで、JS熱は別次元だよ
node.jsやweb用ライブラリ界隈で起こってる熱狂

584 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:37:56.28 ]
>>582
> 「今JSが熱い!みんなが熱狂している!薔薇色の未来!」
> って、他の言語が数年前に通った道なんだね…

いや、その道は他の言語は通っていない(苦笑)

今の話の流れからは「型つけて速くしましょう」という
道しか通ってないだろう?

585 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:40:09.50 ]
デスクトップアプリがWEB用アプリに置き換わりはじめてるから、
この流れは相当続くね
下手したらスマフォのネイティブアプリの領域も浸食しそうだし(ここはまだ不確定)

586 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:40:31.51 ]
ああ、asm.jsの奴はJS的にもアレなので
あそこまで言うのならコードと実行時間くらい示してほしいが

587 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 13:44:24.21 ]
ん?ちょっとまて
この流れはひょっとしてCythonが最強という事でよろしいか?

588 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:00:56.34 ]
Cythonって静的型付け言語ってことでいいの?

589 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:02:44.37 ]
ハイブリッド

590 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:33:20.50 ]
node.jsって実行速度を自慢する割には、
静的に型付けした場合と比較するとゴミだな……

所詮は、他言語がepollやkqueueを使わない場合という
ハンデをつけた状況に限れば非同期処理が速いってだけのウンコか……

591 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:35:16.37 ]
> node.jsって実行速度を自慢する割には、
またいつもの勘違いさんかw

592 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:45:32.92 ]
静的型付け言語の下位と同じくらいだな
動的型付け言語としては十分自慢できるぐらい速い



593 名前:デフォルトの名無しさん mailto:sage [2013/05/04(土) 14:56:24.24 ]
要するに静的型付け言語が優れてるってことだよ。

スクリプト言語で気軽にかけるといっても
大規模になって、多く使われるようになってくると
結局その複雑度や速度に対応するために
静的型付け言語の機能が取り入れられていく。

JavaScript、Python、Basic(VB)、PHP


www.publickey1.jp/blog/11/phpjithiphop_virtual_machinefacebook.html
HipHop Virtual Machineは、PHPを高速に実行するためにPHPのコードをC/C++に変換して
g++でコンパイルし、バイナリコードにするHiphop compiler(hphpc)と、PHP






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<153KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef