トップページlinux
246コメント92KB

Valaについて語りませんか

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin2009/07/05(日) 14:31:59ID:IdyQQEIy
C#ライクなGNOMEのプログラミング言語Valaについて語り合いましょう

【GNOME Live!】
Vala
http://live.gnome.org/Vala

Tutorial
http://live.gnome.org/Vala/Tutorial

【SourceForge】
ValaによるGNOMEアプリケーションのプログラミング
http://sourceforge.jp/magazine/08/12/15/0143207
0176login:Penguin2011/06/05(日) 22:26:15.15ID:z8MV5qJg
java( or C#)のように書けて、Cとして出力し、GObjectの恩恵が受けられる
ってのはかなり魅力あると思うんだが、普及するのはまだまだ先なのかなぁ…
0177login:Penguin2011/06/06(月) 01:05:26.08ID:rgr9QUMR
>>175
金を出してくれてた会社から独立したからだけど。
確かにiPhoneとかの方に向かってるけど、iPhoneでMonoを使うメリット
ってあるんだろうか…

>>176
基本的にGLib,GTK+の世界でなきゃ、旨味が少ないんでそれの普及次第だと思う。
GTK+界隈ではそこそこ普及してると思うよ。
dconfエディタとか割と重要なソフトも使うようになったし。
0178login:Penguin2011/06/06(月) 01:48:22.73ID:fOI8aekF
>GTK+の世界でなきゃ
そうだった、あまりの便利さに視野が狭くなってた

ところでValaのクラス変数(static)はJavaのそれと違って少しつまずいた
例えば下のコード

class Hoge {
 static Hoge foo = new Hoge();
static void check_foo {
  assert( foo != null );
 }

 public Hoge(){}
}

Hoge.check_foo() を呼び出しても Hoge.foo は初期化されていないから
Hoge.init() を用意して対処するようにしたんだけど、これでいいのかな
0179login:Penguin2011/06/06(月) 02:02:47.47ID:4QezmLvV
class Hoge {
static Hoge foo = new Hoge();
public static void check_foo() {
assert( foo != null );
print("foo = %p\n", foo);
}

public Hoge(){}
}

void main()
{
var hoge = new Hoge();
hoge.check_foo();
}
これで、問題無く動いたよ => foo = 0x9c2e000
0180login:Penguin2011/06/06(月) 02:08:09.55ID:4QezmLvV
さらに言うと、
class Hoge : Object {
ってしないと、hoge.cにGObjectの代わりに自前のオブジェクト作成
コードを書き出すから、行数が多くなる。
: Object なし→259行 あり→114行
0181login:Penguin2011/06/06(月) 02:28:04.77ID:fOI8aekF
例えが中途半端ですまん、実はインスタンスを作らずにそのまま呼び出したいんだ
X) new Hoge().check_foo()
O) Hoge.check_foo()

普段は理解もせずObjectを継承するようにはしてたんだけど
そういった違いがあったのか

0182login:Penguin2011/06/06(月) 23:59:22.68ID:4QezmLvV
Singleton パターンの事なんだろうけど、その場合は
class Hoge : Object {
static Hoge foo;
public static void check_foo() {
if (foo == null) {
foo = new Hoge();
}
print("foo = %p\n", foo);
}

public Hoge(){}
}
で、いいんじゃない?
0183login:Penguin2011/06/07(火) 00:27:43.45ID:hW4rMpee
使い始めたばかりで vala の慣例とかは分からないけど、libxml の見本にはこんなのがあるね。

// Initialisation, not instantiation since the parser is a static class
Parser.init ();
0184login:Penguin2011/06/07(火) 19:51:30.07ID:KLLer8r/
>>182
こうすると初めて呼び出した時に値を入れてくれるんだけど
初期化するべき変数が多くなると大変そうだと思ってた

>>183
こちらは明示的に呼び出さなければいけない

でもよくよく考えてみると183の場合でも初期化チェックは必要だから
その時ついでに初期化(182と183を併用)もするようにするといいのかも
0185login:Penguin2011/06/07(火) 20:38:29.11ID:KLLer8r/
クラスの動的ロードについて
Javaで言うところのリフレクションっぽいことをValaでやってみたいと思って

Plugin Sample (GLib Samples)
ttp://live.gnome.org/Vala/TypeModules
ここを参考にして、サンプルはうまくいったんだけど
モジュールをリロードしようと思って同じ名前のクラスを2度typeofすると失敗する

GLib-GObject-WARNING **: cannot register existing type
GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed
GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed

未知(ライブラリ内)のクラスを使用しなければ失敗しない
Valaの方でクラスのアンロードができればいいのかもしれないが、その方法がわからない
0186login:Penguin2011/06/08(水) 01:58:53.41ID:PE72PAWT
>>185
試してみたらエラーを起こせなかった。エラーになるコードを見てみたい。
クラスのアンロードの仕方も分からんなぁ。
確かに、未知(といってもGObjectシステム使用)の.soからインターフェースを
探し出してコールするような事をしたいけど、多分無理っぽい。
その為に、.gir(GObject Introspection)があるんだろうけど。
0187login:Penguin2011/06/10(金) 01:44:00.49ID:mbXsAFUH
>>186 とりあえずエラー出すにはサンプル中のmain内の処理を複数回行わせる
void main(string[] args) {
 for (int i = 0; i < 2; i++) {
  ...
}}
01881872011/06/10(金) 02:05:48.82ID:mbXsAFUH
サンプルの方法で作成したモジュール(ライブラリ)をリロードできないかと思ったけど
サンプル元となったRygelのソースを流し読みしても一度だけ読み込んでるみたい

Javaの場合はクラスローダを複数持つことで、同一のクラスをローダ毎に
別物として利用できるから、あたかもそのクラスをリロードしているように見せることは出来てた
0189login:Penguin2011/06/19(日) 01:12:10.73ID:rodl4lLJ
0.13.0 リリース記念上げ!

これといった新機能はないな。
0190login:Penguin2011/06/23(木) 21:53:19.16ID:vfxUH1FB
趣味でプログラミングを覚えようと思っているものです。
C,C++.Java、シェルスクリプトなどの入門書は一通り読んで、
その後ScalaやLISP入門本に挑戦するもワケワカラン状態に。

ネットでポチポチ情報を探っていたらValaに行きあたったのですが
入門本か、プログラム初心者向けに何処か良いValaの解説サイトは
ないでしょうか?  英語のサイトでも問題ないです。 
0191login:Penguin2011/06/24(金) 00:04:59.68ID:4b2cB/Ua
>>190
一通りの中にC#が無いけど、Valaやる前にC#やってるといいかも。
英語でもいいなら入門には本家サイトが一番いいよ。
ttp://live.gnome.org/Vala
↑このサイトの↓このチュートリアルが良くできてる。
ttp://live.gnome.org/Vala/Tutorial
あとは何かあったらここで聞けばいいよ。
0192login:Penguin2011/06/24(金) 00:49:48.92ID:4b2cB/Ua
>>188
> GLib-GObject-WARNING **: cannot register existing type
Vala は g_type_register_static でしか GType を登録しないからアンロード
出来ないんだな。
アンロードするには g_type_register_dynamic を使わない駄目らしいけど、
Vala を使って限りは無理っぽい
0193login:Penguin2011/06/24(金) 06:02:20.22ID:bAUjSQpP
>>192 そうなのか
でも新しいクラスを作りさえしなければ何度でもロードできるから、使い方によっては役立つかも

ソフトを再起動せずとも実行中に修正を適用できたらいいなくらいに考えてたので
諦めて本来のプラグイン・モジュールとして使うようにするよ
0194login:Penguin2011/06/24(金) 06:12:19.14ID:bAUjSQpP
>>190 Javaを知ってるんであればここも
ttp://live.gnome.org/Vala/ValaForJavaProgrammers
C#を知らなくても一応参考になるのでここも
http://live.gnome.org/Vala/ValaForCSharpProgrammers
Valadoc はほぼ必須
ttp://valadoc.org/references.html

ValaはExampleがそれなりに揃っててとても助かる、
とりあえず何か動かしたいならExample読むといいかも
01951902011/06/24(金) 09:46:37.22ID:SGhe/7yN
>191
MS独自路線はあまり好きではないので(Monoも今ひとつ元気無いし)
C#は避けていたのですが、そう言えばValaの文体とC#はかなり
似ているらしいですね。
食べず嫌いはやめてC#の入門本も読んでみます。 
あとVala本家ですね。  ありがとうございました。

>194
上の二つ、こと細かく書いてあって分かりやすそうですね。 
時間を掛けてよく読んでみます、ありがとうございます。  

3番目のValadocというのが何に付いて書かれてるのか
よく分らないのですが、これは一体、、、?
パット見、.debや.rpmパッケージの依存関係を解説している
ページによく似ている気がするのですが。
0196login:Penguin2011/06/24(金) 23:54:37.48ID:bAUjSQpP
ValadocはJavadocみたいなもの
0197 忍法帖【Lv=10,xxxPT】 2011/06/25(土) 23:30:41.07ID:yL71M0xJ
で、なんかプログラム作っている人いるの?
0198 忍法帖【Lv=3,xxxP】 2011/06/25(土) 23:45:04.07ID:SHIFsneI
いちおう
でもまだ公開はしてない
0199login:Penguin2011/07/25(月) 01:35:05.68ID:SVfj8Y1F
SDLのOpenGLのコードを使えばGTK+3.0用のOpenGLWidgetを作れるかな。
ValaだとGtkDrawingAreaのカスタムウィジェット作るの簡単だし。
ちょっとやってみるか。
0200login:Penguin2011/08/05(金) 01:36:02.05ID:mOp4Az75
ちょっと苦労したけど、とりあえずGTK+3.0用のOpenGLWidgetを作れた。
X用だけどWindows上でGTK+3.0が動けばWIN32版も作りたいね。
0201login:Penguin2011/08/17(水) 07:23:40.68ID:IAr+wEqa
0.13.2 リリース記念上げ!

gtk-3.0.vapi とかは既に .gir から自動生成してるんだな。
glib-2.0.vapi は未だに手で修正しているっぽいけど、こっちは
簡単に変換出来ない何かがあるんだろうな。
0202login:Penguin2011/08/23(火) 01:39:44.91ID:2RMnbvfu
0.13.3 リリース記念上げ!

6日でのリリースだが、そんな急ぐ理由があったのか…
0203login:Penguin2011/08/23(火) 01:42:59.59ID:GlyC9g/F
1.0の予感!
0204login:Penguin2011/08/23(火) 02:07:17.68ID:2RMnbvfu
まじか…
Bugzillaみると結構バグも多いけど、まぁ仕様的には安定してるかな。

それと、↓でValaでクラスライブラリを作ってjavascriptから使うサンプルが追加された!
https://live.gnome.org/Vala/SharedLibSample
Valaで高速なクラスライブラリを作って、javascriptから使うってのが最高。
0205login:Penguin2011/08/24(水) 22:36:35.49ID:F4ZYMrc3
gir に切り替えるのもいいけど色々レグレッション
必要な段階に来てるとは思う…
0206login:Penguin2011/09/07(水) 16:52:22.85ID:cRi4WQwr
valadocのトップページがちょっと変わってた
/references.htmlのページがなくなったと思たらトップページが整理されてた
0207login:Penguin2011/09/08(木) 01:48:01.64ID:w55NPGf2
0.13.4 リリース記念上げ!

valadoc のトップページは意味不明だったからなぁ、改善されて良かった。
0208login:Penguin2011/09/13(火) 01:33:56.14ID:A6fJhWpF
今まで、オープンソースの世界でコンポーネントモデルっていうと、
XPCOM(Mozilla)
Bonobo(Gnome)
UNO(OpenOffice)
があったけど、どれも全然普及してない。
GObject-Introspectionは新しいコンポーネントモデルとして普及するんじゃ
ないかっていう予感はある!
0209login:Penguin2011/09/19(月) 01:17:06.82ID:2Lj/CBBV
0.14.0 リリース記念上げ!

そろそろ、1.0っていっちゃってもいい気がする。
0210login:Penguin2011/09/19(月) 01:42:40.20ID:irh3P1pj
valaは最高に使いやすいんだけど、それでもやっぱりマルチスレッドで落ちないもの作ろうとすると難しい
とりあえずMutex多様でその場を凌いでたんだけど、ある程度のスペックがあるPCで動かすとたまに落ちる
Mutexって使いすぎると良くなかったりするの?
0211login:Penguin2011/09/20(火) 14:53:23.27ID:MMAW0itu
単にプログラムがまずくてrace conditionがあるってだけだろ
0212login:Penguin2011/09/20(火) 18:26:46.63ID:YoJil555
http://zetcode.com/tutorials/cairographicstutorial/customgtkwidget/

これを vala で書き直してみたらどれくらい短くなるか気になるが
いまいち gobject 流の object 思考みたいなのが俺の理解を阻むのだったorz

…正直サンプルコードを所望したい。しかしなかなかvalaユーザーがいない
のであった…
0213login:Penguin2011/09/22(木) 02:30:50.75ID:A2s9TBnR
全然余裕で半分位の行数で書けるよ。
ちょっと時間が取れないけど、書いて見せるよ。
ちなみに、GObject流のオブジェクト指向なんて最初は考える必要ないよ。
最適なコードを書こうとしたら気にする必要はあるけど。
0214login:Penguin2011/10/07(金) 19:40:44.50ID:w8hYPxTz
>>211 それはよく理解してる

どうやら自前で用意したMutexじゃなく
Gdk.threads_leave()の使い方が悪かったのが原因だったのかも
0215login:Penguin2011/10/28(金) 09:21:51.84ID:pOl/xLje
https://bugzilla.gnome.org/show_bug.cgi?id=580385

それなりにまとまりつつあるのかなとか思ってると
積み残してる部分もあって何か意外だった

なんとなく code attribute で切り抜けるんだろうか…
0216login:Penguin2011/12/12(月) 17:52:40.22ID:smhjypxV
いつのまにかMath関係のDSOエラーが出たからどうしたもんかと思ったけど
リンクのときに-lmが必要だったのね

ついでに遅いけど 0.15.0 リリースアゲ
0217login:Penguin2011/12/13(火) 16:58:36.27ID:ZlpJ2MLL
>>216
0.81くらいの時からそのフラグは必要だったかと思われるw
今回から配布形式が xz 圧縮になっててちょっと驚いた。

tar jxvf vala-0.14.1.tar,bz2
tar xvf vala-0.15.9.tar.xz

jを付けなくても大丈夫と憶えておくことにする…
0218login:Penguin2011/12/13(火) 17:02:05.37ID:ZlpJ2MLL
tar jxvf vala-0.14.0.tar.bz2 (stable)
tar xvf vala-0.14.1.tar.xz (準stable)
tar xvf vala-0.15.0.tar.xz (development)

だった…ミスタイプ多すぎてすまない…orz
0219login:Penguin2011/12/18(日) 22:49:36.73ID:gpLS8xC5
>>217
-lm なしでも動いてたから気づかなかったw
2009年ごろのBugzillaの回答に助けられた
0220login:Penguin2012/01/03(火) 08:08:05.71ID:zVTeR0hG
Gtk-3.0.girにはAPIとかにちゃんとドキュメントがあるのに
gtk+-3.0.vapiではドキュメントが完全に抜け落ちてる…
Gtk-3.0.girからVala用にドキュメント込みのHTMLを掃き出す
ツールがないもんかなぁ。
0221login:Penguin2012/01/27(金) 13:13:36.83ID:MJrNQhDK
0.15.1出てます
0222login:Penguin2012/02/03(金) 02:09:34.04ID:FNUAY58f
0.14.2も出たけど、安定版と開発版を分ける意味あるか?
0223login:Penguin2012/02/08(水) 16:13:29.32ID:kiy50TeI
http://mail-archives.apache.org/mod_mbox/incubator-lucy-dev/201201.mbox/browser
https://svn.apache.org/repos/asf/incubator/lucy/trunk/clownfish/
http://stackoverflow.com/questions/8456599/is-it-possible-to-compile-and-use-xapian-clucene-or-lucy-on-ios
https://github.com/zeitgeist-project/activity-log-manager

いろいろ鳥によってスタンスの取り方みたいな所で違いは
あるので保守やらforkやらportを考えると已むを得ないの
ではないか…
0224login:Penguin2012/02/26(日) 07:06:43.37ID:PAr0/0x1
http://fantom.org/doc/examples/index.html#js
http://fantom.org/sidewalk/topic/1785

fantom 1.0.62 リリース。言語内で初めから javascript support を持たしてみる
試みはなかなか面白いのではないか…
0225login:Penguin2012/02/28(火) 07:11:22.67ID:mZ/Mt96V
http://unstable.valadoc.org/#!wiki=gdk-3.0/index
http://www.valadoc.org/gdk-3.0/index.htm

WindowWindowClass の列挙体を調べたいとかいう時
0.15系列だと新しいほうのvala-docでないと引けないのが不便かも
あとajaxで描画してるので読み込みが完了するまでスクロールバー
が出るのがちょっともたつく印象だった
0226login:Penguin2012/03/09(金) 20:12:26.04ID:lPqxBLod
Benchmark of Dictionary Structures
http://lh3lh3.users.sourceforge.net/udb.shtml
Benchmark of Regex Libraries
http://lh3lh3.users.sourceforge.net/reb.shtml
0227login:Penguin2012/03/10(土) 07:18:13.94ID:+NjTrdll
>>226
Valaに関係しているglibの結果を見ると速からず遅からずだな…
C++テンプレート系が全般的に速い。C++の存在価値ってこういうところにあるよな。
0228login:Penguin2012/04/30(月) 13:23:23.77ID:BcoIzs2r
0.17.0 リリース記念上げ!

2ヶ月前の 0.15.2 からのコミット数が20程度だ…
突然開発速度ががた落ちしたみたいだけど、どうしたんだろうか?
0229login:Penguin2012/05/05(土) 00:29:24.84ID:wOchO1VT
http://blog.gmane.org/gmane.comp.programming.vala

基本機能は2009年あたりからあんまり変わってないかな
binding周りでgobject-introspectionとgirの実装と
vapiのメンテが開発の主眼みたいな印象

12.04からvtgとvalenciaがパッケージになったので
sudo apt-get install gedit-valatoys-plugin
sudo apt-get install gedit-valencia-plugin
で前よりは開発しやすくはなりそうだけど…(12.4におけるVala本体のstableラインは0.14.2)

codeblockとsublime text2などpluginはこんなかんじで
http://forums.codeblocks.org/index.php?topic=10383.0
http://joshbenham.net/69/sublime-text-2-and-the-vala-programming-language-on-elementary-os/

ぼちぼち整備はされてゆきそうだけど(dockyチームとか使ってるだいぶ安定してきた
https://launchpad.net/plank
普及はどうだろう…
0230login:Penguin2012/08/08(水) 01:47:09.88ID:ompgOWg2
Vala 0.17.4 リリース記念上げ!

・Drop Dova profile.
・Drop POSIX profile.

うーん、やっぱり GObject 一本で行くんだな。
0231login:Penguin2012/08/10(金) 20:30:42.21ID:43zh3y1N
来年夏にはGNOMEはほぼ解散状態に陥るのでどうでもよい
0232login:Penguin2012/08/10(金) 21:28:24.78ID:DHRq1UuF
何かあったの?
0233login:Penguin2012/08/11(土) 10:14:07.93ID:o2WkcCjB
DebianにまでGnomeデスクトップが愛想を尽かされた件じゃない?
0234login:Penguin2012/08/11(土) 10:15:40.62ID:gKZ/yEbd
愛想尽かすっつーかデフォルトを変えるだよ。
0235login:Penguin2012/08/11(土) 10:17:30.50ID:gKZ/yEbd
まだ全然確定じゃないし。
http://linux.slashdot.jp/comments.pl?sid=576009&cid=2210177
0236login:Penguin2012/08/23(木) 11:58:59.07ID:wT8qBt1h
http://blog.xfce.org/

glibとgobjectがあればそれはそれで何とかなるしWMはまた別だね > じぶんopenbox使ってる…

https://github.com/KCVC/libafrodite/blob/master/Makefile
https://bugs.launchpad.net/ubuntu/+source/valatoys/+bug/832760
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=635121

https://gitorious.org/vala-toys/vala-toys/commit/1454d36/diffs
glib-assert.vapi が見つからないとか云われてテストで失敗する
/usr/share/vala-0.18/vapi に上記のvapiを入れてやれば大丈夫。

http://esite.ch/2012/06/26/writing-tests-for-vala/
http://bazaar.launchpad.net/~diodon-team/diodon/trunk/view/head:/tests/test-text-clipboard-item.vala
0237login:Penguin2013/03/13(水) 22:14:22.25ID:MwIyXkJL
http://sourceforge.net/projects/manjarodev/files/users/philm/live-installer/
http://blog.developpez.com/rsharp/p11820/mono/monodevelop-4-0-ubuntu

すごい久しぶりの書き込み
流れ流れて xfce に落ち着きそうだわ…
0238login:Penguin2013/03/13(水) 22:26:12.25ID:MwIyXkJL
>>235
>Debian GNU/Linux 7.0 "Wheezy" ではXfceが標準のデスクトップ環境になるとPhoronixが伝えている。

なんとなく振り返って呼んでみたら相変わらず Phoronix いい加減の風説撒いててワロタ
今日日実機に投入するなら usbインストールが主流だろうにサイズはそれほど
以前より気にしなくても良くなったか
0239login:Penguin2013/03/18(月) 21:36:56.23ID:3uMtrQaR
Valaしばらく使ってるけど、Genericsでは型消去するってことでいいのかな?
CILだし、何となくそんな気がするんだけど、確証がないし、Cコードを本気で追う気概もなく・・・
誰か分かる人いませんか?
0240login:Penguin2013/03/19(火) 09:41:02.82ID:o8+57GQ8
>>239
型がなくなる。要するにC#じゃなくてJavaのGenericsと同じ。
なんでやれることがかなり限られる。
0241login:Penguin2013/03/22(金) 22:18:34.75ID:g5+oWlz9
>>240
おお、素早い返答ありがとう。

型消去されるとして、色々サンプルコード書いてみたけど
valaのGenericsって型制約無しで、全て共変なんだね。
これだと、メソッドの引数で型安全が守れなくなるから、大きな欠陥なわけね。

参考
ttp://supersoftcafe.com/2011/07/vala-generics
コメント欄がかなり過激。
0242login:Penguin2013/03/23(土) 14:57:50.34ID:Ot8//svX
>>241
あれ?そのコメント欄では共変じゃないっていってるね。

それと、Vala開発者の弁護をする訳じゃないけど、Valaは関数名のオーバーロード
をしない方針だから、型を消去せざるを得なかったんじゃないかと思われる。

しかし、
public static G Max<G>(G a, G b) { return a > b ? a : b; }
がエラーになるんだから、役に立たないとも言える…
0243login:Penguin2013/03/25(月) 13:46:13.82ID:1YB0HppF
>>242
コメントは要約するとこんな感じ?(英語間違ってたらすんません)

 読み書きできる配列とかコレクションは不変であるべき前提があるから、
 共変なJavaの配列はクソだったな、一応例外で対応してるけど。
 (しかし、Genericsでの同様の問題への対応は理にかなってた。)
 同じ轍を踏むValaの開発者は以下略。

型変数について境界が定義できないから、具象メソッドに対するGenericsは使えないよね実質。
(抽象メソッドではまぁ使えるだろうけど)

うーむ使いどころが難しい。
0244login:Penguin2013/08/05(月) NY:AN:NY.ANID:B/E1B7xa
Vala 0.21.1リリースage
自分でmakeしてvalac起動時に
valac: error while loading shared libraries: libvala-0.22.so.0: cannot open shared object file: No such file or directory
とエラーメッセージが出たんだけどsudo ldconfigすれば直るのね
0245login:Penguin2013/09/14(土) 18:31:29.39ID:Lj5ZFryQ
Vala 0.21.2 リリース age
ttps://mail.gnome.org/archives/vala-list/2013-September/msg00022.html
0246login:Penguin2013/09/26(木) 02:09:02.75ID:EPJ3SFEj
Vala 0.22.0 リリース age
ttps://mail.gnome.org/archives/vala-list/2013-September/msg00034.html
■ このスレッドは過去ログ倉庫に格納されています