[過去ログ] + JavaScript の質問用スレッド vol.126 + [転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
561
(1): 2015/11/04(水)02:54 ID:??? AAS
> >>557
若干被るかもしれないが、とりあえず書いたから投稿しておく。

> どんなコードでも催促のコードを書くことを目指すべき
違う。常に何のためのコードなのかを考えろということ。
見た目のわかりやすさなのか、速度なのか。安全性ならそれはそれでいい。

> 正規表現エンジンの速度は最適化具合によって異なる
これはその通りだが、通常は軽い仕様の方が速い。(正規表現は色々出来る分遅い)
1つのindexOfとexecで両方が同一箇所でマッチする時、(今回なら\rの検索)
通常はindexOfの方が速い、というか、indexOfの方が遅くなる実装を作ることの方が難しい。
既に書いたが、ヒットしないケースでキャッシュに収まらないほどのテキストを食わされると、
省9
562
(3): 2015/11/04(水)02:54 ID:??? AAS
> 空文字を引数にとる場合、do-while では速度上で問題が出るだろう
> getFirstLine1 に気が向いていたので妥協したが、while 文にした方が速いだろう
何故だ?cau4mx8d/3/とcau4mx8d/4/では速度差は出ないはずだが。(中身は同じだ)
多分ただの勘違いだと思うが、do/whileもショートカット論理で動く。

> ES 仕様で内部的に型変換してくれるのならそれを利用すべきだ
もちろんその通りだが、バグを少なくするコツは「簡単にすること」だ。
だから、単純に「どんな型が来るか分かりません」よりも「必ずstring型が来ます」の方がバグらない。
ポリシーとしては、多分、
α:各関数で型チェック、つまり各関数は複雑になりますが、個々で安全を保証します。
β:入力先頭で型チェック、つまり各関数は型決めうちでシンプル、ただし入力の最初に必ず型保証を入れる必要があります。
省13
563: 2015/11/04(水)03:02 ID:??? AAS
ああすまん、俺のCRとLFが逆だな。これまで全部。
悪いが脳内変換してくれ。まあ分かる範囲だろw
564: 2015/11/04(水)03:20 ID:??? AAS
>>560
cau4mx8d/5/ で俺はいいと思うけどね。

> 「\n がなく、\r がある巨大なテキスト」
昔のMacだけだから問題ない。

> 「\nも\rもない巨大なテキスト」
どの実装でも遅いから問題ない。
565: 547 2015/11/04(水)03:54 ID:pUq54Vxq(4/9) AAS
>>561-562
> 何故だ?cau4mx8d/3/とcau4mx8d/4/では速度差は出ないはずだが。(中身は同じだ)
空文字ならば length が 0 なので charAt を実行する必要はない
do-while なら必ず1回は実行してしまう

> もちろんその通りだが、バグを少なくするコツは「簡単にすること」だ。
だから、RegExp#exec(string) は簡単だろう?

> だから、単純に「どんな型が来るか分かりません」よりも「必ずstring型が来ます」の方がバグらない。
「どんな型でもString型に変換します」は実にシンプルな解だと思うが、何か問題があるのか?
正直、あなたの意見は抽象論が多すぎるので具体性にかけて説得力が弱いのだが

> ただここら辺は本職に確認した方がいい。
省9
566: 547 2015/11/04(水)03:57 ID:pUq54Vxq(5/9) AAS
>>562
> -1の比較回数を減らすのは実は余り効かない。それはループではないから。(関数で1回だから)
それならばループ処理ではない「よくある順」に拘る理由もなくなるはずだろう?
「よくある順」のレベルで拘る人は他にも拘るべきポイントがあると思ったのだが、「よくある順」だけ例外視する理由は何なのだ?

> これな、以前は確かにこの通りだったが結局最適化で何とかなったらしく、
スコープチェーンは ES 仕様の規定内なので最適化で何とかなるレベルではないのだが
速度差が小さくなる事はあっても差がなくなる事はあり得ないので無駄な対策ではない

> String()はイラネーみたいな記事もあって、
「String()はイラネー」は速度以前の問題だと思うが、なぜ「イラネー」なのだ?
567
(1): 2015/11/04(水)04:09 ID:??? AAS
> > だから、単純に「どんな型が来るか分かりません」よりも「必ずstring型が来ます」の方がバグらない。
> 「どんな型でもString型に変換します」は実にシンプルな解だと思うが、何か問題があるのか?

問題はある。一番重要な点「バグらない」が実現できてない。

どんな型でもString型に変換するというルール自体はシンプルだが、
String型に変換した結果、バグってしまったら意味は無い。

「バグらない」を実現するためには、型というより値が想定内でなければならない。
String型であっても、想定外の値であれば、バグってしまう。
だから想定内の値(に変換される型)だけの方がバグらない。
568
(1): 547 2015/11/04(水)04:20 ID:pUq54Vxq(6/9) AAS
>>567
何を持って想定外なのかわからんが、全て想定内だから問題ないのでは?
有体にいえば、getFirstLine1 の仕様を理解していないプログラマが悪い
569
(2): 2015/11/04(水)04:28 ID:??? AAS
>>568
俺は一般的な話をしている。

String型ではない話をしよう。

MyHoge型を扱うコードに、YourHage型を渡したらどうなるか?
エラーにする以外何もできることはない。
570
(1): 547 2015/11/04(水)04:33 ID:pUq54Vxq(7/9) AAS
>>569
俺も一般的な話をしている
あなたは静的型付き言語の仕様を期待しているのだろうが、ECMAScript では異なる型を与えられてもエラーにならないのが一般的だ
型変換では吸収仕切れない場合のみにTypeErrorとなる

/null/.test(null); // true
[].forEach(); // TypeError: undefined is not a function
571
(1): 2015/11/04(水)04:46 ID:??? AAS
>>570
だから、

「エラーにならない」のと「バグにならない」は意味が違う。

一番問題なのは、バグなのに、エラーにならずに
処理が進むことだ。
572
(1): 547 2015/11/04(水)04:52 ID:pUq54Vxq(8/9) AAS
>>571
バグとは想定外の挙動をする事だ
繰り返すが、想定内であれば問題はない
あなたが動的型変換の仕様を想定できていない事がおかしい
573
(1): 2015/11/04(水)04:55 ID:??? AAS
>>572
バグというのは言語仕様ではなくて、アプリの
要求仕様で決まった動き以外をすることだ。

アプリの要求仕様っていうのは、作るシステム毎に
ユーザーや開発者が決めることで
言語仕様で決まっているものは一つもありはしない。

お前の言ってる、挙動が言語仕様で決まってるものであれば
それは、全く関係ない話をしている。
574
(1): 547 2015/11/04(水)06:24 ID:fA0eMUeX(1) AAS
連続投稿規制に引っかかったのでID変わるけど

>>573
> アプリの要求仕様っていうのは、作るシステム毎にユーザーや開発者が決めることで
その通りだ
getFirstLine1 が String 型に変換するのは開発者である私が決めた「仕様」であって「バグ」ではない

> 言語仕様で決まっているものは一つもありはしない。
勿論、決まっているわけではないが、設計思想的な意味ではある程度の制限を受ける
動的型付き言語、プロトタイプベース言語、というような性質は ECMAScript で定められているもので変更できない
自分が書いたコードもその性質に合わせる事で統一感のある挙動を期待できるだろう
逆にESの性質に反する挙動にする場合は統一性を得る為に標準機能を書き換える手間が生まれ、どうにもならない性質の違いに頭を悩ませる事になる
省5
575
(1): 2015/11/04(水)06:37 ID:??? AAS
>>574
どうも根本的な所が間違ってる。

言語開発者じゃないんだよ。
言語ユーザーなんだよ。

言語をどうしたいとかじゃなくて
言語を使う側にとってどうあるべきかを考えよう。
576: 2015/11/04(水)07:11 ID:??? AAS
>>575
脇から見ていると本筋から逃げようとしているようにしか見えんぞ
バグと仕様の区別もつかんのか
577: 2015/11/04(水)07:30 ID:??? AAS
所詮口でギャーギャーいってるやつなんてそんなもん
578
(1): 2015/11/04(水)07:45 ID:??? AAS
>>555
WindowsならPowerShellの、schtasks で、
タスクをスケジュールに登録できる

Linuxなら、cron で登録できる

それと投稿する際は、名前欄に、542と入れておくれ
579
(3): 547 2015/11/04(水)09:11 ID:pUq54Vxq(9/9) AAS
結局、彼の反論は予測の範疇で新しい発見はなかった
アルゴリズムにはそれなりの理解があるが、仕様理解に乏しく、机上の空論をいっている部分も見受けられるのでもう彼にレスするのは止めようと思う

最後にこれまでのコードを計測してみたのだが、予想に反して while 文が最速だった
外部リンク:jsperf.com
懸念していた String#charAt のコストはたいした事がなかった
RegExp#exec は Google Chrome が健闘しているが、Firefox では最下位になり、やはり実装依存の傾向が強いようだ
(String#indexOf は実質的なコストは「String#indexOf x 2 + String#slice」なので判断に迷うところではあったのだが)
思い込みをせずに計測してみる事の重要さを再確認した
580: 2015/11/04(水)14:32 ID:??? AAS
なんでgetFirstLine2がそんなに高速化してるんだ
1-
あと 422 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.015s