アカウント名:
パスワード:
バグってるからデバッガで追いかけてみたら、maxLengthのスペルミスでmaxlengthだったとか、そんなのが多くていやになるわ。世の中動的型の言語のファンが多いけど、こういうアホなミスをするのって俺だけなのか。最近はサーバーサイドまでjavascriptを使おうって動きがあるみたいだけど、ほんとうにかんべんしてほしい。
> maxLengthのスペルミスでmaxlengthだったとか、そんなのが多くていやになるわ。
そういうケアレスミスは言語に関係なくあるよ
コンパイルエラーになるか、ランタイムエラーになるかの違いは、大きいと思うんだ。動的言語の場合、エラーにさえならないことがあって、よりたちが悪い。
動的言語の場合、エラーにさえならないことがあって、よりたちが悪い。
run-timeよりまえにバリデーションしたいなら、例えばjavascriptだったらjavascript lintにかければよいと思います。eclipseでjavascript lintをつかって事前validationしていた経験があります。https://www.google.co.jp/search?q=javascript+lint [google.co.jp]
compilerやlinkerがエラーを出すのは原則的にはプログラマーのためでなく自分たちの(タスクが完了できない)ためで、その作業自体がないインタプリタ言語では。。。
# インタプリタ言語の場合、run-timeと対になる意味でのcompile-timeってなんていうんだろ。。。
必ずしもそうではないし、インタプリタ言語もいまどきはJITコンパイルですよ。
これはコンパイルの有無じゃなくて動的かどうかってことです。静的なら実行前に、その変数がどのクラスのオブジェクトか決まっていて、呼び出したメソッドがあるかどうかは実行前に決定されてるけれど、動的だとクラスは決まってないし、違うクラスでも実行時にメソッド追加されるかもしれないしで、実行時でないとそのメソッドの呼び出しがエラーかどうかがわからない。つまり言語仕様として許されているかどうかです。その意味ではプログラマのためではなくタスクが完了できない(許されない)ためではありますが。で、変数宣言とバグの話とかヌルポとかと同じく長所短所があって、lintで言語仕様以上に厳しく見たり怪しいところを探したりするのが有用なのはごもっとも。
perlはコンパイルフェーズって言ってます。pythonは特に名前なさそうですが、コンパイルフェーズ・コンパイルタイムどっちでも意味通るんじゃないかな。
"コンパイルエラー"に対する発言ということで静的型付けだけで書いてたのでご指摘thxです。おっしゃるとおり、動的型付け言語ではrun-timeでしかつかまえられない、逆にrun-timeでしか、しかも動作する条件が揃わないと発見し得ないエラーが存在しますね。。。そういったrun-time errorに関して静的解析ツールもあるにはありますが、あたりまえですが一般的なコンディションしかチェックできませんし、結果的にはUnitTest的な解決法が無難かもです。(UnitTestで条件抽出の網羅性とか頑張る必要は当然あります)
コメありがとうございます。やっぱりコンパイルと言うんですね。勉強になります。
あたりまえですが一般的なコンディションしかチェックできませんし、結果的にはUnitTest的な解決法が無難かもです。(UnitTestで条件抽出の網羅性とか頑張る必要は当然あります)
で、大規模開発だと強制されなければ品質が保てない。過度に動的なのはバグの元、ってのと、静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのとjava vs LLでよくあるパターン
ま、用途ですよね。ちょっとしたアプレットやスキンとかの類ならpythonやjavascriptが合うだろうし、大きなアプリならやっぱりC++じゃないかと。現状がそうであるように。
>静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのとアジャイル開発と動的言語とは関係ないと思うが。たぶんアジャイル開発のことをよく分かって無い人の発言と思われ。
そもそも静的だから開発速度が落ちるかというと、むしろ逆のことの方が多いかな。なにしろ動的言語だと、タイプ量は減ってもそれ以上にデバッグに時間がかかるから。規模が大きくなればなるほど致命的になる.
大規模開発だと強制されなければ品質が保てない。過度に動的なのはバグの元、ってのと、静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのとjava vs LLでよくあるパターン
全くもってそのとおりです(´・ω・`)最近ではbakeしろだの、CIUnitつかえだの言われながら、前述のトレードオフの狭間で揺れ動くσ(゚∀゚ )オレ的な日常でございます。結局は両極端でなく現実解としてよい落とし所をみつけないといけないですね。。。# そういえば昔C++でUnitTest超マジメに組んだらほんと一生楽しめそうな雰囲気でした
別AC(#2330722)ですが一言コメントします。
アジャイル開発と動的言語とは関係ないと思うが。
もちろんそれぞれの要素は独立していますが、動的言語=lightweight languageと仮定すれば、軽量かつ高速開発を意図したagile developmentと方向性は合致していると思います。そういう意味で、agileでLLを使う頻度は静的型付けのものと比べて高いものとおもいますので、無理な発言ではないと私は考えました。
そもそも静的だから開発速度が落ちるかというと、むしろ逆のことの方が多いかな。なにしろ動的言語だと、タイプ量は
V8はとか一部のJSエンジンは事前JITコンパイルで明らかに使われてない変数とかあった場合はちゃんとエラーを出すことができるよただブラウザ上では新しいスクリプトが読み込まれたりevalが急に使われる(アドレスバー等で)からOFFになってるだけ
function f(x) { x.maxlength;}
↑それはxにmaxlengthに存在するか、実行しなくても静的解析で分かるってことですかね。せめて未初期化のプロパティや変数を参照したら実行時にでもエラーになるようになればだいぶ楽なんだけど。
なりますよ。
Firefoxだと、about:configで"javascript.options.strict"を有効にすれば"エラー"ではなく"警告"がバンバン出ます。もしかしたら"javascript.options.showInConsole"も必要かもしれませんが。
ちなみに、これを使うと、Gooogle等のサイトはいかに汚いコードを使っているかがよくわかります。そして、それはMozillaの公式サイトですら例外ではありません。こういうみそっかすをきちんと直しておけば、世界中のPCで使用される電力量が減って幸せな社会になると思うんですけどねぇ。
フリーのサービスを享受しつつ内幕の作りをクソミソに言うような人は、幸せな社会があってもそれを知覚できないでしょう。
x.mixlength = 0;
も検知できるならすごいな。
> "警告"がバンバン出ます。
この時点で何かおかしいと思わないのだろうか
それは何が問題なんだ?xがundefinedなら当然警告出るが
コンパイル時どころかソースを入力してる最中に教えてくれる言語もありますが。
それは言語というよりIDEの機能では。
そうですよ。静的型の言語だとIDEがかなり強力にサポートしてくれるって意味です。
静的型の言語か否かと(ほとんど)無関係。
無関係ではないです。静的型だと入力時点でリアルタイムに検出できる誤りが、動的型だと実行時にしか検出できなかったりします。
まあたぶん厳密な意味で「静的型」「動的型」はそうじゃないとか、マイナーな言語ならこういう機能があるとか、そういうツッコミなんでしょうけど、そういうアスペのフリをして相手の話の腰を折るようなことってうれしいんでしょうかね。
無関係な訳無いだろ。
涙拭けよ
いやいや、型が動的とか静的とかはたいした問題じゃないよ
話の中心点がずれてるな動的型言語で型に関するエラーがでるのならそれはもはや動的型言語じゃないしw
そういう話じゃなくてプロパティ名とかの事前間違い診断は非コンパイル言語のJSでも十分可能ということ
LL言語をEclipse や NetBeans で書いてるとガッカリしますよね。vi でいいや、みたいな。
そりゃEclipseとかNetBeansみたいな糞IDE使ってるせいだろjetBrainsのIDE使えば良い
サーバー側とクライアント側と一緒にデバッグできるデバッガ機能があるIDEを無償配布してくれるならいくら言語体系が糞でもそっちに移行するわ。無論DBMSと連携できるやつな。
ああ、それはほしいですね。デバッガが優秀だと楽ですもん。
それはエディタの性能だねJSは拡張が盛んだから作りにくいだろうけど
バグってるからデバッガで追いかけてみたら、maxLengthのスペルミスでmaxlengthだったとか、そんなのが多くていやになるわ。
perlならそんな程度のバグは-wやuse strict;を使っておけばコンパイル時に指摘されますが、rubyやpythonではどうなんですかね。
PHPにはそういうのありますけど、自分が入るような現場ではまず使われてなくて、一度、自分が作業するときだけでもと思ってこっそり入れてみたら既存のコードから大量に警告がでてまったく使えませんでした。
コンパイル??
ruby?今はコンパイルしてると思ったが?#phpは知らんけど
スクリプト言語の多くは最近は実行時にJITコンパイルされるケースがほとんど。
型システムが動的なのと定義されてない変数に寛容なのは別な気が
creat/refererェ・・・
おれはrust [rust-lang.org]が好きだー
TypeScript [srad.jp]でよろしくとか?# JavaScriptのスーパーセットでやりやすいし幸せになれるかも?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほしくない (スコア:0)
バグってるからデバッガで追いかけてみたら、maxLengthのスペルミスでmaxlengthだったとか、そんなのが多くていやになるわ。
世の中動的型の言語のファンが多いけど、こういうアホなミスをするのって俺だけなのか。
最近はサーバーサイドまでjavascriptを使おうって動きがあるみたいだけど、ほんとうにかんべんしてほしい。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:3)
> maxLengthのスペルミスでmaxlengthだったとか、そんなのが多くていやになるわ。
そういうケアレスミスは言語に関係なくあるよ
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
コンパイルエラーになるか、ランタイムエラーになるかの違いは、大きいと思うんだ。
動的言語の場合、エラーにさえならないことがあって、よりたちが悪い。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
動的言語の場合、エラーにさえならないことがあって、よりたちが悪い。
run-timeよりまえにバリデーションしたいなら、例えばjavascriptだったらjavascript lintにかければよいと思います。eclipseでjavascript lintをつかって事前validationしていた経験があります。
https://www.google.co.jp/search?q=javascript+lint [google.co.jp]
compilerやlinkerがエラーを出すのは原則的にはプログラマーのためでなく自分たちの(タスクが完了できない)ためで、その作業自体がないインタプリタ言語では。。。
# インタプリタ言語の場合、run-timeと対になる意味でのcompile-timeってなんていうんだろ。。。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
compilerやlinkerがエラーを出すのは原則的にはプログラマーのためでなく自分たちの(タスクが完了できない)ためで、その作業自体がないインタプリタ言語では。。。
必ずしもそうではないし、インタプリタ言語もいまどきはJITコンパイルですよ。
これはコンパイルの有無じゃなくて動的かどうかってことです。
静的なら実行前に、その変数がどのクラスのオブジェクトか決まっていて、呼び出したメソッドがあるかどうかは実行前に決定されてるけれど、動的だとクラスは決まってないし、違うクラスでも実行時にメソッド追加されるかもしれないしで、実行時でないとそのメソッドの呼び出しがエラーかどうかがわからない。
つまり言語仕様として許されているかどうかです。その意味ではプログラマのためではなくタスクが完了できない(許されない)ためではありますが。
で、変数宣言とバグの話とかヌルポとかと同じく長所短所があって、lintで言語仕様以上に厳しく見たり怪しいところを探したりするのが有用なのはごもっとも。
# インタプリタ言語の場合、run-timeと対になる意味でのcompile-timeってなんていうんだろ。。。
perlはコンパイルフェーズって言ってます。
pythonは特に名前なさそうですが、コンパイルフェーズ・コンパイルタイムどっちでも意味通るんじゃないかな。
Re: (スコア:0)
"コンパイルエラー"に対する発言ということで静的型付けだけで書いてたのでご指摘thxです。
おっしゃるとおり、動的型付け言語ではrun-timeでしかつかまえられない、逆にrun-timeでしか、しかも動作する条件が揃わないと発見し得ないエラーが存在しますね。。。そういったrun-time errorに関して静的解析ツールもあるにはありますが、あたりまえですが一般的なコンディションしかチェックできませんし、結果的にはUnitTest的な解決法が無難かもです。(UnitTestで条件抽出の網羅性とか頑張る必要は当然あります)
perlはコンパイルフェーズって言ってます。
pythonは特に名前なさそうですが、コンパイルフェーズ・コンパイルタイムどっちでも意味通るんじゃないかな。
コメありがとうございます。やっぱりコンパイルと言うんですね。勉強になります。
Re: (スコア:0)
あたりまえですが一般的なコンディションしかチェックできませんし、結果的にはUnitTest的な解決法が無難かもです。(UnitTestで条件抽出の網羅性とか頑張る必要は当然あります)
で、
大規模開発だと強制されなければ品質が保てない。過度に動的なのはバグの元、ってのと、
静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのと
java vs LLでよくあるパターン
ま、用途ですよね。
ちょっとしたアプレットやスキンとかの類ならpythonやjavascriptが合うだろうし、
大きなアプリならやっぱりC++じゃないかと。現状がそうであるように。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
>静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのと
アジャイル開発と動的言語とは関係ないと思うが。
たぶんアジャイル開発のことをよく分かって無い人の発言と思われ。
そもそも静的だから開発速度が落ちるかというと、むしろ逆のことの方が多いかな。
なにしろ動的言語だと、タイプ量は減ってもそれ以上にデバッグに時間がかかるから。
規模が大きくなればなるほど致命的になる.
Re: (スコア:0)
大規模開発だと強制されなければ品質が保てない。過度に動的なのはバグの元、ってのと、
静的だと柔軟性が損なわれ開発スピードが損なわれる。時代はアジャイル、ってのと
java vs LLでよくあるパターン
全くもってそのとおりです(´・ω・`)
最近ではbakeしろだの、CIUnitつかえだの言われながら、前述のトレードオフの狭間で揺れ動くσ(゚∀゚ )オレ的な日常でございます。
結局は両極端でなく現実解としてよい落とし所をみつけないといけないですね。。。
# そういえば昔C++でUnitTest超マジメに組んだらほんと一生楽しめそうな雰囲気でした
Re: (スコア:0)
別AC(#2330722)ですが一言コメントします。
アジャイル開発と動的言語とは関係ないと思うが。
もちろんそれぞれの要素は独立していますが、動的言語=lightweight languageと仮定すれば、軽量かつ高速開発を意図したagile developmentと方向性は合致していると思います。
そういう意味で、agileでLLを使う頻度は静的型付けのものと比べて高いものとおもいますので、無理な発言ではないと私は考えました。
そもそも静的だから開発速度が落ちるかというと、むしろ逆のことの方が多いかな。
なにしろ動的言語だと、タイプ量は
Re: (スコア:0)
V8はとか一部のJSエンジンは事前JITコンパイルで明らかに使われてない変数とかあった場合はちゃんとエラーを出すことができるよ
ただブラウザ上では新しいスクリプトが読み込まれたりevalが急に使われる(アドレスバー等で)からOFFになってるだけ
Re: (スコア:0)
function f(x) {
x.maxlength;
}
↑
それはxにmaxlengthに存在するか、実行しなくても静的解析で分かるってことですかね。
せめて未初期化のプロパティや変数を参照したら実行時にでもエラーになるようになればだいぶ楽なんだけど。
Re: (スコア:0)
なりますよ。
Firefoxだと、about:configで"javascript.options.strict"を有効にすれば"エラー"ではなく"警告"がバンバン出ます。もしかしたら"javascript.options.showInConsole"も必要かもしれませんが。
ちなみに、これを使うと、Gooogle等のサイトはいかに汚いコードを使っているかがよくわかります。そして、それはMozillaの公式サイトですら例外ではありません。こういうみそっかすをきちんと直しておけば、世界中のPCで使用される電力量が減って幸せな社会になると思うんですけどねぇ。
Re: (スコア:0)
フリーのサービスを享受しつつ内幕の作りをクソミソに言うような人は、幸せな社会があってもそれを知覚できないでしょう。
Re: (スコア:0)
x.mixlength = 0;
も検知できるならすごいな。
Re: (スコア:0)
> "警告"がバンバン出ます。
この時点で何かおかしいと思わないのだろうか
Re: (スコア:0)
それは何が問題なんだ?xがundefinedなら当然警告出るが
Re: (スコア:0)
コンパイル時どころかソースを入力してる最中に教えてくれる言語もありますが。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
それは言語というよりIDEの機能では。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
そうですよ。
静的型の言語だとIDEがかなり強力にサポートしてくれるって意味です。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
静的型の言語か否かと(ほとんど)無関係。
Re: (スコア:0)
無関係ではないです。
静的型だと入力時点でリアルタイムに検出できる誤りが、動的型だと実行時にしか検出できなかったりします。
まあたぶん厳密な意味で「静的型」「動的型」はそうじゃないとか、マイナーな言語ならこういう機能があるとか、そういうツッコミなんでしょうけど、そういうアスペのフリをして相手の話の腰を折るようなことってうれしいんでしょうかね。
Re: (スコア:0)
無関係な訳無いだろ。
Re: (スコア:0)
涙拭けよ
Re: (スコア:0)
いやいや、型が動的とか静的とかはたいした問題じゃないよ
Re: (スコア:0)
話の中心点がずれてるな
動的型言語で型に関するエラーがでるのならそれはもはや動的型言語じゃないしw
そういう話じゃなくて
プロパティ名とかの事前間違い診断は非コンパイル言語のJSでも十分可能ということ
Re: (スコア:0)
LL言語をEclipse や NetBeans で書いてるとガッカリしますよね。vi でいいや、みたいな。
Re: (スコア:0)
そりゃEclipseとかNetBeansみたいな糞IDE使ってるせいだろ
jetBrainsのIDE使えば良い
Re: (スコア:0)
サーバー側とクライアント側と一緒にデバッグできるデバッガ機能があるIDEを無償配布してくれるならいくら言語体系が糞でもそっちに移行するわ。
無論DBMSと連携できるやつな。
Re: (スコア:0)
ああ、それはほしいですね。
デバッガが優秀だと楽ですもん。
Re: (スコア:0)
それはエディタの性能だね
JSは拡張が盛んだから作りにくいだろうけど
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
perlならそんな程度のバグは-wやuse strict;を使っておけばコンパイル時に指摘されますが、rubyやpythonではどうなんですかね。
Re: (スコア:0)
PHPにはそういうのありますけど、自分が入るような現場ではまず使われてなくて、一度、自分が作業するときだけでもと思ってこっそり入れてみたら既存のコードから大量に警告がでてまったく使えませんでした。
Re: (スコア:0)
コンパイル??
Re: (スコア:0)
ruby?今はコンパイルしてると思ったが?
#phpは知らんけど
Re: (スコア:0)
スクリプト言語の多くは最近は実行時にJITコンパイルされるケースがほとんど。
Re: (スコア:0)
型システムが動的なのと定義されてない変数に寛容なのは別な気が
Re: (スコア:0)
creat/refererェ・・・
Re: (スコア:0)
おれはrust [rust-lang.org]が好きだー
Re: (スコア:0)
TypeScript [srad.jp]でよろしくとか?
# JavaScriptのスーパーセットでやりやすいし幸せになれるかも?