GNOMEでもJavaScriptによるアプリケーション開発を推奨? 88
ストーリー by hylom
選択肢の1つとしては悪くないが 部門より
選択肢の1つとしては悪くないが 部門より
あるAnonymous Coward 曰く、
InfoQの「JavaScriptがGNOMEの第一言語になる」という記事によると、Developer Experience Hackfestで、GNOMEのデスクトップアプリの開発にはJavaScriptが推奨されるとの発表があったそうだ。当然のごとくこの発表は物議を醸している。
HTMLのJavaScriptではJavaScript以外の要素……例えばCSS、HTMLタグ、Canvasなどで高機能なUIを作ることができる。そういったものが無いとC++もJavaScriptも大差ないと思うが、そういった高度なUIライブラリは用意されるのだろうか?
UIコンポーネントをJavaScriptから操作できるようになる、というのは当然可能になるのだろうが、このように宣言されるのはほかの言語の利用者によってはあまり気分のよいものではなさそうだ。
JavaScript は公式 Binding の一つになっています (スコア:5, 参考になる)
JavaScript は、C++ や Python などと並んで GTK+/GNOME の公式 Binding の一つ [gtk.org]になっています。(リストにあるうち足跡マークがついているものが公式 Binding)
私は GTK+ で JavaScript を使った事はありませんが、Hello World チュートリアル [gnome.org]を少し読んでみた限りでは簡単に作れそうな雰囲気です。
ただ Python や Ruby などにあるような便利機能が無いので、それらと比べると JavaScript で書くのはちょっと面倒というか冗長かなぁ・・・。という感があります。慣れの問題かもしれませんし、CoffeeScript とか使えば問題ないのかもしれません。
ちなみに、元記事にもあるように、JavaScript は GNOME Shell を拡張するための言語として採用されていますが(→GnomeShell/Extensions - GNOME Live! [gnome.org])、JavaScript で書かれた GTK+/GNOME のデスクトップアプリケーションというのは見当たりませんでした。
Re:JavaScript は公式 Binding の一つになっています (スコア:3)
現時点でも,
- GNOMEのコアである gnome-shell のGUI部分
- 漢字変換(ibus)のGUI周り
で,かなり javascript が使用されています.
興味がある人はソースコードを読んでみて下さい.拡張子が .js のファイルは全てjavascriptです.
http://git.gnome.org/browse/gnome-shell/tree/js [gnome.org]
Hello Worldチュートリアル (スコア:0)
JavaScriptよりconfigureとかmakeを無くす/簡単にしろよって思った
live.gnome.org/JavaScript見たけどさあ (スコア:0)
* Gjs, based on Mozilla's Spidermonkey engine
* Seed, based on WebKit's JavaScriptCore
いま使えるランタイムがこれってショボすぎないか?
あともう一つ疑問なのは、というかこっちの方が重要なことだけど、Webアプリ以外でJavaScript使いたいと思う?いや、逆に言い換えよう。JavaScriptでアプリを作るのにHTML5じゃなくてGtk+3なんかわざわざ使いたいと思う?
Re: (スコア:0)
WinRTとかUbuntu phoneとかtizenとかqtとかみてgnome/gtkもhtml5とjavascriptを取り入れないと、って流れじゃないかな。
だからって「推奨」とか言っちゃうのはアレだけど、でもそれがgnomeって気もする。
物議を醸す理由は? (スコア:2, すばらしい洞察)
物議を醸す理由がわからない。
プログラマでない人にも分かるように説明して欲しい。
Re:物議を醸す理由は? (スコア:2)
まったく物議をかもしませんね。
S式からjavascriptに変換すればいいのさ〜
#どうせ言語なんて木構造が機械語にどう変わるかの規約程度の違いしか無い
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re: (スコア:0)
例えば今までその企業ではいくつかの言語のうちフランス語が主要言語だったのが今度からドイツ語になるようなもの
宗教に例えてもいい
とは言えGNOMEくらいならCなんかよりもスクリプト言語の方がずっとあってるのは確か
Re:物議を醸す理由は? (スコア:1, 参考になる)
本質的にJavaScriptが欠陥言語だということ。
優れた言語を目指して失敗した言語なので優れた部分はあるが失敗によるダメージが大きい。
JavaScriptで良いコードを書く人なら当然知っている常識。
オライリーからもJavaScript: The Good Partsという人気本が出ているくらいで、この本のタイトルには
「悪い部分は多数あるのは認めるが良い所だけを使おう」という意味が込められている。
もちろんJavaScriptでもまともな人が作法を守って作る限り普通にプログラミングができるが、他の言語ではあり得ない注意をしなければならない。
どんな言語でも注意するべき箇所はあるが、JavaScriptの場合はその注意をプログラマーに要請する論理的な根拠が存在しない。
Re: (スコア:0)
JavaScript自体は良い言語だと思うけどなぁ。
Webで使用された場合に、各ブラウザの互換性(DOM)がアレだったのが悪評の理由に感じる。
Re:物議を醸す理由は? (スコア:1)
本心だとJavaScriptの酷さがわからない奴ってプログラマとして駄目
なんじゃないのと思ってますけどそのまま言うのは大人げないので。
わかってる奴が見ても気分悪いだろうし(言っちゃってるけど)。
Re:物議を醸す理由は? (スコア:1)
「オレもわからないが」ですね。
Re: (スコア:0)
GNOMEって元々言語中立の立場をとっていたからじゃね?コア部分をCで書いているのは言語バインディングを作りやすいから。
Re: (スコア:0)
gtk系統はコード規約やライブラリ特有の型名がひとつの言語と言っても差し支えない。
10年前なら、まだ、環境の差を吸収するためにtypedefしまくるのは当たり前のように行われていた。でも、もう要らないでしょ。Cにしたって"標準化"が進んでいるんだから。
Re: (スコア:0)
UNIXでは伝統的な暗黙ルールとして開発言語はC言語という考えがあった。
まぁ日本人は日本語でしょ。ってな感じ。
そこをJavaScriptでというのは、UNIXにライドオンしたマカーのやりかで、
つまりマカーによる浸食がついにここまで来たのかという驚きの表れなのさ。
Re: (スコア:0)
こういうこと言う人はEmacs好きな"自称"ハッカーだから近づかないのが無難
Re: (スコア:0)
そこをJavaScriptでというのは、UNIXにライドオンしたマカーのやりかで、
つまりマカーによる浸食がついにここまで来たのかという驚きの表れなのさ。
Mac OSデスクトップアプリの主要開発言語がJavaScriptであったことなど、ただの一度もない。
どこがマカーのやり方なのか?
Re:物議を醸す理由は? (スコア:1)
デスクトップアプリはともかく Dashboard ウィジェットはJavascriptだったような。
Re: (スコア:0)
国連が「これからは韓国語を推奨します」と発言した感じ。
事実上、標準となった(プラットホームを作っている)団体が、
長年標準で使われてた言語を差し置いて、
新しく勢いがあるが癖のある新興言語を推奨するって言ったからさあ大変。
ああ、楽○天のことか (スコア:1)
「社内公用語はJava」
GNOMEの尻の軽さは異常 (スコア:1)
元々GNOMEの公用言語はguileだったわけだが、それはさておき
GNOME4はMonoベースになるとかほざいて、それを信じたTomboyはわざわざMonoで作ったのに今じゃボロクソ
ESounDの有用性を説いてaRtsをボロクソ貶してたかと思えば、気がついたらPulseAudio推進
これからはgstreamer、時代はgstreamerとか散々吹聴してたのにABI変わりまくりで、KDE派も嫌気が刺してPhonon分派
標準WindowManagerは変わりまくり、API/ABIなんて常時変わりまくり、UIすらも互換性なく変わりまくり
なのに俺等は悪くねえ、悪いのはカーネル開発者だと責任転嫁
もうな・・・・・・・・
こいつらの言うことは話半分以下で聞いとかないと馬鹿を見るのはこっち
今はJavaScript推奨してても数年後はどうなってるかわかったもんじゃない
Re: (スコア:0)
まあ、趣味の領域だから好きにやればいいがな。
ビジネス的に実害も無いだろうし。
ウィキペディアなら要出典がつけられるレベルだが (スコア:0)
それはさておき
>元々GNOMEの公用言語はguileだったわけだが
あれは未完成すぎてSchemeインタプリタとしても言語中立のランタイム環境としても不十分だったもんね。
>ESounDの有用性を説いてaRtsをボロクソ貶してたかと思えば、気がついたらPulseAudio推進
aRtsの方が後じゃなかったっけ。ABI互換性の問題があったから簡単には捨てられなかったんだと思う。
>これからはgstreamer、時代はgstreamerとか散々吹聴してたのにABI変わりまくりで、KDE派も嫌気が刺してPhonon分派
あれはGNOMEプロジェクトの一部ではなく独立したプロジェクト。標準を目指してfreedesktop.orgでホス
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)
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:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
それは言語というよりIDEの機能では。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:1)
そうですよ。
静的型の言語だとIDEがかなり強力にサポートしてくれるって意味です。
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
静的型の言語か否かと(ほとんど)無関係。
Re: (スコア:0)
無関係ではないです。
静的型だと入力時点でリアルタイムに検出できる誤りが、動的型だと実行時にしか検出できなかったりします。
まあたぶん厳密な意味で「静的型」「動的型」はそうじゃないとか、マイナーな言語ならこういう機能があるとか、そういうツッコミなんでしょうけど、そういうアスペのフリをして相手の話の腰を折るようなことってうれしいんでしょうかね。
Re: (スコア:0)
それはエディタの性能だね
JSは拡張が盛んだから作りにくいだろうけど
Re:Javascript, Ruby, Python, PHP あたりの動的型の言語は普及してほし (スコア:2)
perlならそんな程度のバグは-wやuse strict;を使っておけばコンパイル時に指摘されますが、rubyやpythonではどうなんですかね。
Re: (スコア:0)
PHPにはそういうのありますけど、自分が入るような現場ではまず使われてなくて、一度、自分が作業するときだけでもと思ってこっそり入れてみたら既存のコードから大量に警告がでてまったく使えませんでした。
Re: (スコア:0)
型システムが動的なのと定義されてない変数に寛容なのは別な気が
Re: (スコア:0)
creat/refererェ・・・
Re: (スコア:0)
おれはrust [rust-lang.org]が好きだー
なぜだか (スコア:0)
GNOME 4.0はMonoベースに? [srad.jp]を思い出した
Re: (スコア:0)
MonoはGUIがダメ過ぎてポシャった
Re:なぜだか (スコア:1)
元コメみてRMSが吠えたから [fsf.org]だと勝手に思ってました(´・ω・`)