1 :
login:Penguin :
2009/07/05(日) 14:31:59 ID:IdyQQEIy
2 :
login:Penguin :2009/07/05(日) 14:49:00 ID:IdyQQEIy
【Valaについて - wikipediaより引用】 Vala is a programming language that tries to bring modern language features to C, without additional runtime requirements and with little overhead, by targeting the GObject object system. It was developed by J rg Billeter and Raffaele Sandrini. The syntax borrows heavily from C#. Rather than being compiled directly to assembler or to an intermediate language, Vala is compiled to C which is then compiled with the platform's standard C compiler.
4 :
デムパゆんゆん :2009/07/05(日) 18:00:02 ID:1wMfbkcM
薔薇 愛 それは マライヒマライヒ
gobjectとかgnomeと相性がいいんだっけか でもそれならpython使うしなあ
Cに変換してコンパイルするから、速度と依存関係の少なさが魅力かな?
あ、後他の言語に移植するとき楽になるかもしれない。
Cで無理やり作ったオブジェクトシステムを扱うのは煩雑だから 専用の言語を作ったというのが、GNOMEらしいというか何というか。 エンドユーザーとしてはMonoアプリよりはVM抜きのGtk+アプリを使いたいが 開発者としてはMonoのほうが楽チンかもしれない
デバッガもgdbにはパッチ当てないといけないしな。 でも、cのソースと協調しやすいから、今までの資産がある人には良いんじゃないかな?
PythonライクなGenieってのもあるんだな ValaにしてもGenieにしてもドキュメントが少ないのはなんとかならんのかね? ちょっとやってみたがGtkのメニューバーの作り方がわからん まぁライブラリのソース嫁ってことか?
>>11 ありがとうございます。参考になりました。
ところで
RADツールでなんかオススメないですかね?
今のところgladeを使うのが一番簡単?
gladeしかないだろうね、今のところ。uiファイルの読み込みどうするかっていう問題はあるけど
確か本家サイトのサンプルコードにuiファイルを読み込む方法があったような 今日はもう寝るので後日確認します
GtkBuilderには対応してるみたいだね。 俺はいつもuiファイルの置き場所に悩むよ。てvalaあんまり関係ないけど。
18 :
login:Penguin :2009/07/17(金) 01:40:49 ID:AJJQRc+R
>>17 補足
18で示したサンプルコードとあわせて参考にさせていただきました
>>18 リンク先の説明を参照すると
コールバックメソッドをスタティックメソッドのかわりにインスタンスメソッドに
したいときに[CCode(instance_pos=-1)] を書けってかいてありますね
>>20 APIとかどこみてるんですか?
valadoc.org?
>21 基本的にvaladocだよ。で、ちょっと使い方がわからない部分があったらglibのリファレンス見てる。 #ownedとかの概念が難しいなぁ…
うーんスレのカキコ見てると今んとこはMonoでいいや
素のGObjectは扱いたくないし、monoっていうでかいのに依存したくないっつー 場合だけだろうね、今のところの需要は。 そういえばvaladocがなんか急に賑やかになってた。特にglib-2.0あたり。
>>25 Vala関係ないけどちゃんとドキュメントコメントとか使って偉いな
まあ癖つけとかないと泣きを見るのは自分だからね。
28 :
login:Penguin :2009/08/04(火) 20:28:21 ID:JNFmjrAP
vala-0.7.5あげ。基本的にはバグフィックスだね。 でもいくつか機能追加があるけど。 これはstaticなプロパティが作れて、 プロパティにdelegateが使えるってことなのか。 自分で書いててよく理解してないけど。
GObject をそのまま使うなんて感動的過ぎる。。 これは大化けしそうな予感
vala0.7.5 で valide をビルドしたいけど ctags-vala.hがどうのこうの言って止まってしまいまする
ttp://live.gnome.org/Vala/GTKSample の一番最初のサンプルの gtkmm 版を作って Vala 版と比較してみた。(Fedora11)
バイナリサイズ
gtkmm: 7.5 KB, Vala: 4.9 KB
実行時の使用メモリ
gtkmm: 2.2 MB, Vala: 1.7 MB
依存ライブラリの差
275668 libatkmm-1.6.so
126452 libcairomm-1.0.so
285552 libgdkmm-2.4.so
445116 libgiomm-2.4.so
343012 libglibmm-2.4.so
3547140 libgtkmm-2.4.so
176024 libpangomm-1.4.so
合計 約 5 MB
ソースの可読性
Vala の方がだいぶ(?)読み易い (シグナルの設定なんか特に)
結論としては、GTK+ アプリを作る場合は Vala はかなりのアドバンテージ
があると思われる。
gtkmmじゃなくてGtkで比較してほしいです!
なんとなく意味ない気がするけど比較してみたよ。 C 版と Vala 版の比較です。 バイナリサイズ (-Os でビルド) C: 5060, Vala: 5036 (なんか小さい!) 実行時の使用メモリ C: 1.8 MB, Vala: 1.8 MB (前回より多いけど状況に依存するもんなんで) 依存ライブラリの差 なし ソースの可読性 Vala の方がかなり読み易い (まぁ当然だけど) 結論としては、Vala を使いこなせるスキルがあるならば、あえて C で 組む必要はないと思われる。
かなりC#と似てるけど、むしろ違う所がどこなのか知りたい。 どっかまとまってるとこないかなぁ?
36 :
login:Penguin :2009/09/19(土) 12:56:49 ID:8ZFOHBpR
探してみたけどC#との違いについてまとめてあるページは無かった ところで上の方で専ブラっぽいの作ってる人、できた?
37 :
login:Penguin :2009/09/20(日) 20:32:37 ID:cbNtEzLr
0.7.6リリース上げ
早速新機能のクロージャを-Cで見てみたけど、GObjectのクロージャ(GClosure)は 使ってないな。MLとか見てないから分からないけど、何か問題でもあったのかな。 まぁ、Valaを使うレベルでは内部の実装は何でもいいんだけど。
>36 別に専ブラ作ろうと思ってるわけじゃなく、ちょうど良い解析対象かなって思っただけだよ。 気が向いたら一つのソフトとして作ってみても良いけど、結構大変そう。 >38 クロージャの目的が、"ラムダ関数から外部にある関数のローカル変数を使用したい" らしいんで、GClosureだと実現方法が難しいのかも。GClosure知らないで言ってるけど。
>>31 に自己レス
PKG_CONFIG_PATH を設定してなかっただけでした。お恥ずかしい。
ここまで実用的なのを作れて、ソースは見渡しいいし、これは革命ですね。
個人的な好みを言えば case は break 無しで落下しないようにしてほしい
GClosure は、変数一つ一つに GValue を作成する必要がありそうなんで、 オーバーヘッドが大きそう。 クロージャは散々検討された上での実装だと思うけど、現状だとCのソースが すごく読みづらく(汚なく)なるのが玉にキズだな。
>42 Cソースに関しては、valacデバッグとかやる人が 読めれば良いんじゃね?っていう勢いだよな。まあ個人的にはそれで良いと思うけど。 >43のが結構良いね。しかし95k近くのソース一つってある意味すごいな。
45 :
login:Penguin :2009/09/29(火) 16:01:43 ID:CY4vCafL
0.7.7きてたのでage
>>43 のはgenie?
"string marshalling"っていうことは、stringがバイト列にできるっていうことだよな。 これってstring.to_utf8で良いんだろうか?もうちょっとリリースなりチュートリアルに 説明が欲しいな…
タブレットの筆圧の取得おしえてくれ Gdk.EventMotion の axes フィールドや Gdk.Event.get_axis か Gdk.Device.get_axis が使えそうだけど どうにも使い方が解らない
本当だ。言語としてはまだまだだな。 Cで書くより多少はましなの?
Javaに 似せた Delphi、に似せた C のシンタックスシュガー もうわけわかめ
>47 遅レスだけど、gdkリファレンス見ると、Gdk.Deviceから辿るのが正解かも。 今回の事に限らず、Valaを使う時はValadocだけじゃなくて、 大本のリファレンスも見た方が良さげ。 >49 俺にとっては素のGObjectはIDEとかのサポートがないとマジで無理。
52 :
47 :2009/10/16(金) 00:10:52 ID:6MqmLXIA
53 :
48 :2009/10/16(金) 03:59:17 ID:csATjUPX
>>48 のページをちゃんと見てみたら、Not Available に含まれているのは
(自分にとっては)それほど重要じゃない機能とか、そのうち実装されそうな
ものばかりなんで、Vala は既に十分な機能が実装されていると思っていい
気がする。
ただ、
・No operator or indexer overloading
・No method or constructor overloading
だけはかなり痛いな。
vapiファイルって、C言語のヘッダーファイルから 自動生成出来ないもんでしょうか?
チュートリアルに一部記述が足りないね。 vapiファイルの生成手順の最後にvapigenを実行してるけど、 --pkg=gdk-2.0とか、依存するpkgの指定が必要だね。
>>57 thanks!
$ vapigen --library poppler-glib poppler-glib/poppler-glib.gi --pkg cairo --pkg gtk+-2.0
これでうまく行きました。
あれ?gdbで普通にソースレベルデバッグが出来てるじゃん。 なんかスゲーな
試しに、libgeeをC言語から使ってみたけど、いちいち抽象型とか イテレーター経由でアクセスするのが面倒だな。 ほとんど必須のライブラリなのに、GLibには取り込まれそうにないな。
63 :
login:Penguin :2009/11/06(金) 01:21:47 ID:xHV7v7sp
0.7.8リリースアゲ というか誰か内容を解説してくれ…0.7.7も今一分かってないし
>>64 翻訳は、1.0が出てからで良さそうですね。
遊びで使う分には、十分の品質なので、
ドキュメントがあれば助かります。
66 :
63 :2009/11/07(土) 03:11:53 ID:yhTezjEw
とりあえず、MLをあさったら0.7.8の解説があったんでのせとく。 String templates ---------------- string name = "Vala"; stdout.printf (@"Hello, $name!\n"); stdout.printf (@"2 + 3 = $(2 + 3)\n"); Non-null cast ------------- void main () { string? a = "hello"; string b = (!) a; } Chain-up for gobject-style construction scheme ---------------------------------------------- class MyWindow : Gtk.Window { public MyWindow () { Object (type: WindowType.POPUP); } construct { // ... } }
現状だと小数点末尾だけの更新でも、割と大きな変更をしてくるから、 ドキュメントを書いてもしょうがないかもね。 とりあえず周辺ツールのコンパイルができなくなっているのは 如何なものかと…
う〜ん。vtgがビルドできないのか。困ったな。
gdbのVala対応パッチの流れを追いかけていたら、5月頃に2回目のパッチ を送ったきり音信不通になってるっぽいな。 うまくいけば、7.0に入ったかもしれないのに…残念 ちゃんとマージされるまで面倒見てくれる人が現れてくれ!
cat ../gee/gee.vapi ../ccode/ccode.vapi ../vala/vala.vapi ../codegen/codegen.vapi > vala-1.0.vapi git kara totte kite build suru. sikasi vala build on windows tte dou yatten noka wake wakame...
How to: install recently vala from git repository. $ sudo apt-cache showpkg valac (confarm vala-0.7.0 > valac ...) $ sudo apt-get install valac $ git clone git://git.gnome.org/vala $ cd vala $ ./autogen.sh --prefix=/usr; make; sudo make install
$ valac --version Vala 0.7.6 <= ubuntu 9.10 Vala 0.7.9 <= git repository
ネタ投入 本家のページにCharacter Sampleが追加されたけど、 string は unowned しないと丸ごとコピーされちゃんうんだよね。 int main() { string test = "hoge"; string copy1 = test; unowned string copy2 = test; stdout.printf("%p\n", test); stdout.printf("%p\n", copy1); stdout.printf("%p\n", copy2); return 0; } ↓ 0x9f667d0 0x9f667e0 0x9f667d0 とするとよく分かる。
>>73 $ ./autogen.sh --prefix=/usr --enable-vapigen
$ make
$ make install
Emacs用のValaモードがショボショボなんで改良しようと思ってるけど なかなかムズいのー Semanticにも対応させたいし、まぁぼちぼちやっていくしかないか。
urmpi automake autoconf libtool flex bison make
Vala Releases Vala 0.7.9 released on December 19, 2009 Changes * Support array and string slicing. * Add --symbols commandline option. * Add avahi-gobject bindings (Sebastian Noack). * Add ccss-1 bindings (Ali Sabil). * Add libarchive bindings (Julian Andres Klode). * Add libmagic bindings (Jens Georg). * Add readline bindings (Jukka-Pekka Iivonen). * Add twitter-glib-1.0 bindings (Adrien Bustany). * Many bug fixes and binding updates. git repositoryにはあったようだけれど、 公式?が更新されてWindows版バイナリもDL出来る状態だったので一応報告
相変わらず変更点の解説がないな… * Support array and string slicing. これはどういうことだ?
テストコードが追加されてた // slices t = s[2:4]; assert (t.length == 2); assert (t[0] == 'l'); assert (t[1] == 'l'); っていうことだな。
gtk-button.vala:8.5-8.26: error: The name `connect' does not exist in the contex t of `null' window.destroy.connect (Gtk.main_quit); ^^^^^^^^^^^^^^^^^^^^^^ gtk-button.vala:10.5-10.26: error: The name `connect' does not exist in the cont ext of `null' button.clicked.connect ((source) => { ^^^^^^^^^^^^^^^^^^^^^^ Compilation failed: 2 error(s), 0 warning(s) 0.5.4 でコンパイルしてみたらエラーが出て通らなかた イベントハンドルは += ではなくてなるべく connect を 使うのが推奨されてる…とかどこかで読んだような記憶があるようなないような…
あけおめ。 今年こそ1.0がリリースされますように( ̄人 ̄)
>>86 しかし古いバージョン使ってるな。今の最新は0.7.9なんでそれで
一回コンパイルしてみ。
// helloworld.cs using System; using System.Text.RegularExpressions; class HelloWorld { public static void Main() { System.IO.StreamReader sr = new System.IO.StreamReader(@".\\hello.gs"); //内容をすべて読み込む string gscode = sr.ReadToEnd(); //閉じる sr.Close(); Console.WriteLine(gscode); Regex r = new Regex(@"\(.*?\)", RegexOptions.Singleline); System.Text.RegularExpressions.MatchCollection mc = r.Matches(gscode); foreach (System.Text.RegularExpressions.Match m in mc) { //正規表現に一致したグループを表示 Console.WriteLine(m.Value); string before = m.Value; string after = before.Replace("\r\n", "").Replace(" ", ""); gscode = gscode.Replace(before, after); } Console.WriteLine(gscode); } } >csc hello.cs これと等価なコードって vala だとどう書いたらいいか わからないんだよな…
[indent=4] def foo(arg1: string, arg2: string): string return arg1 + arg2 init print foo( "hello ", "world" ) print foo("hello ", "world") /* EOF */[indent=4] def foo(arg1: string, arg2: string): string return arg1 + arg2 init print foo( "hello ", "world" ) print foo("hello ", "world") /* EOF */ hello.gs はこんなかんじ 空白は半角に置換しないと動かないかも…
なんか張り間違えてるしorz
96 :
login:Penguin :2010/04/02(金) 00:33:45 ID:rvSB9vMK
0.8.0リリース上げ! experimental な機能以外はバグフィックスが主なリリースだな。
98 :
97 :2010/04/16(金) 19:52:41 ID:/6r9tkwK
>>97 ad-hoc rhtml like template is good stuff. ^^;
テキストファイルを読み込んで string を返すようにしようと思ったら、 意外とすっきり書けないな。 一番シンプルに書こうとするとどんな感じになるかな?
自己解決した。 var file = new MappedFile ("hoge.txt", false); var text = (string) file.get_contents (); でいいかな。
ありがと。見たところ読み込みにはMappedFileを使っているみたいだから、 やっぱりMappedFileで良さそうだ。
void main () { int[] a = { }; a += 1; a += 1; } これをCに変換すると static void _vala_array_add1 (gint** array, int* length, int* size, gint value) { if ((*length) == (*size)) { *size = (*size) ? (2 * (*size)) : 4; *array = g_renew (gint, *array, *size); } (*array)[(*length)++] = value; } static void _vala_array_add2 (gint** array, int* length, int* size, gint value) { if ((*length) == (*size)) { *size = (*size) ? (2 * (*size)) : 4; *array = g_renew (gint, *array, *size); } (*array)[(*length)++] = value; } と全く同じ関数が2つ出来るのは無駄過ぎる…。バグだよなぁ。
0.9.1 リリース記念上げ! 今年中に 1.0 のリリースもあるかな。
106 :
login:Penguin :2010/06/22(火) 00:49:34 ID:TjdwcnPd
0.9.2 リリース記念上げ!
107 :
login:Penguin :2010/07/22(木) 10:29:41 ID:14B/bjH4
遅くなったけど、 0.9.3 リリース記念上げ!
108 :
login:Penguin :2010/08/01(日) 23:45:56 ID:9Z4W30qB
0.9.4 リリース記念上げ!
Valaってリファレンスカウント?
110 :
login:Penguin :2010/08/16(月) 13:38:29 ID:+2cG0APL
今までRuby/Gtk2で書いてたけど、Vala結構いいな。
マクロとインライン関数とインラインアセンブラを使いたいっ
112 :
login:Penguin :2010/09/06(月) 23:38:41 ID:me8osAkX
0.9.8 リリース記念上げ!
やっと書き込めるようになったよ…とほほ
>>109 リファレンスカウントだよ。
>>111 インライン関数は、-O3でコンパイルすればコンパイラの判断で小さい関数は
インラインになるから、特別必要ではないかな。
マクロは使わずにジェネリックスを使うべし。
インラインアセンブラもCの関数内に書いて、Valaにインポート(.vapi)するので
いいんじゃない?
>>113 Valaの言語仕様見たら、これでもうC++,C#いらないんじゃない?
>>114 いらなくなるって事はないだろうけど、C++,C#の良いとこ取りで
ある事には違いない。
それに、C++はライブラリを作ってもC++からしか(直接)呼び出せないけど、
Valaでクラスライブラリを作ってもCからも使えるのが最高。
文字コードの変換がうまくできん sjis->utf8で、iconvと同じで〜とかが入ってると死ぬ
Valaって、C++やgtkmmの知識は必要ないの?
>>116 Valaで文字コードの変換をやった事がないんでよく分からん。
まぁ、基本UTF-8だからね…
>>117 まったく必要ないよ。C#にそっくりだけど、C#を知っている必要もないし。
全部単一のソースファイルに書いているうちはいいとして、 複数のファイルにわけたくなった場合の分割コンパイルってどうやるの?
自分はCMake使ってるけど、それがやってる手順は ・必ず valac -C *.vala(全部のValaソース) を実行する valac は内容が同じだと *.c のタイムスタンプを更新しない それに、必ず全Valaソースを valac に掛けないと、ちゃんと*.cが出来ない ・更新された *.c をCコンパイラでコンパイルする その時にヘッダーファイルはいらないようになってる。 (使っているライブラリのはいる) ・で、出来た *.o をリンクする って感じかな。
速くなんのかそれ? 分割コンパイルの意味ほとんどなさそー。
-C は*.cの日付しか比較してないかな。 感覚的には、g++よりはだいぶ早いよ。 だた巨大なプロジェクトだとどうなるか分からん。
配列のソートをやるときにPosix.qsortが出てくるのがださいな。 array.sort(〜); ってやらせてほしい。最新版だとできるのかもしれないけど。
libgeeか。libgeeも標準でついてくればいいのに
まぁ、Vala は余計なランタイムがいらないのが売りだから、 標準でついてくる事はなさそう。 Array がもっと洗練されたインターフェースになれば必要なくなるのに。
盛り上がってきたな。
日本語の情報すくなすぎわろす
ちょっとしたTIPS。 printf にファイル名と行番号を一緒に表示したい時とかあっても、 Vala は __FILE__ や __LINE__ とかが使えない。そこで、 message ("hoge"); ってやれば、 ** Message: hoge.vala:15: hoge みたいに、ファイル名と行番号が表示されるよ。
>>121 今一番デカい Vala 使ったプロジェクトって何か分からないけど、
Vala 自身が結構デカいんで、
>>120 の速度を検証してみた。
vala-0.9.8/vala/ 以下に *.vala が145ファイルあって、全く
依存性のない valacomment.vala を日付だけ変えて make を
したところ、valac に145ファイルを一気に渡してるけど、
その時間が10秒ぐらい掛かってた。(core2 duo 2.16GHz)
その後のビルドは gcc なんで、g++ に比べるとかなり早い。
まぁ、ちゃんと細かくライブラリに分けて valac にあまり
ファイルを渡さないようにするのが吉だな。
>>129 Log.FILEとLog.LINEでおk
誰もきいてないg++との比較を唐突に持ち出して自分を慰めるスレ
134 :
login:Penguin :2010/09/19(日) 08:12:10 ID:bLHejXEb
0.10.0 リリース記念上げ!
>>113 の-O3でのインライン関数は、gccだと同じファイル内にstatic宣言されている
関数だけしか自動的にインラインにならなかった。
だから、インライン関数はやっぱりValaが対応してくれないと駄目だね。
場合によっては、パフォーマンスに大きく影響する所だから早めに対応して欲しいな。
136 :
login:Penguin :2010/10/13(水) 01:01:14 ID:uqtJdPnG
おっと、忘れた。 0.11.0 リリース記念上げ!
137 :
login:Penguin :2010/10/13(水) 17:24:27 ID:yOuawncH
Fedoraに続いてUbuntuでもF-Spotに代わってShotwellが標準に。
>>137 脱mono&.netって流れですな。
こりゃ吉報だ
>>137 おぉ、Valaが少しずつ浸透していってうれしいなぁ。
後はGTK+とWindowsの相性がもっと良くなってくれればいいんだが。
140 :
login:Penguin :2010/10/27(水) 01:52:27 ID:uug/Y6Un
0.11.1 リリース記念上げ! なぜ 0.12 じゃないのか分からん…
リリースノートとか見てないけど、よほど小規模なんだろう。 それかバージョンの上げ方を変えたとか
ん? 0.10.1 リリース記念あ…いや上げない 0.11 が開発ブランチで、0.10 が安定ブランチらしい。 そんで、0.12 が 1.0 になるかもだって。
143 :
login:Penguin :2010/11/10(水) 00:38:44 ID:ygmS3jMN
0.11.2 リリース記念上げ! 基本的にバグフィックスバージョンだけど、 出力されるCのソースが綺麗になった気がする。
string が単なるバイト列になったので utf-8 の日本語を1文字づつ処理する方法。 void main() { string name = "焼肉定食"; for (string utf8 = name; utf8.length > 0; utf8 = utf8.next_char()) { unichar chr = utf8.get_char(); stdout.printf("%s\n", chr.to_string()); } }
今,Shotwell co してるんだけどvala ぽい
それと、
>>144 は unowned を使わないと効率が悪かった。
Cに変換して g_strdup がやたら使われていたら大抵 unowned のし忘れだね。
最近 const も使えるようになったんで使ってみた。
void main()
{
const string name = "焼肉定食";
for (unowned string utf8 = name; utf8.length > 0; utf8 = utf8.next_char()) {
unichar chr = utf8.get_char();
stdout.printf("%s\n", chr.to_string());
}
}
結局吐いたCのソースを眺めてたりするよなw
バイナリファイルの読み書きはこんな感じかな。 namespace Binary { struct Bin { int param0; float param1; } static int main (string[] args) { var bin = Bin (); bin.param0 = 321; bin.param1 = 456.0f; try { // 書き込み FileUtils.set_contents ("data.bin", (string) (&bin), (ssize_t) sizeof (Bin)); // 読み込み var file = new MappedFile ("data.bin", false); Bin* bin_in = (Bin*) file.get_contents (); print ("%d:%.2f\n", bin_in.param0, bin_in.param1); } catch (Error e) { print ("%s\n", e.message); } return 0; } }
GLib の API は使った後に g_free しないといけないものがたくさん あるんで、メモリリークせずにちゃんと書こうとしたらスゲー大変。 (別に GLib が悪いという訳ではない) Vala は C 並の速度でありながらメモリリークを気にしなくていいんで、 それだけでもすんげー便利なんだよね。
151 :
login:Penguin :2011/01/01(土) 00:08:35 ID:I3WGYOP1
あけおめ! 今年も Vala の進化が楽しみだね。
152 :
login:Penguin :2011/01/10(月) 04:18:42 ID:DHLV8UY4
0.11.3 リリース記念上げ! 新機能が追加されなくなってきたんで、1.0のリリースが近いのかも。
153 :
login:Penguin :2011/01/16(日) 10:24:21 ID:8UPlgNHy
0.11.4 が昨日出てた なんとなくだけど、しばらく停滞するんじゃないべか… という希ガス
停滞じゃない安定だ ただ、停滞も安定もして欲しくないけどね
155 :
login:Penguin :2011/02/01(火) 00:53:13 ID:wZrZvTv6
質問だけど、*.vala を *.c にした時にインクルードされるファイルって どうやって決定されるんだ? インクルードして欲しいファイルがインクルードされずにちょっと困ってる…
[CCode (cheader_filename = "nobita/sanno.h")]
>>156 ありがとう。vapiにそれが足りないだけだった。
159 :
login:Penguin :2011/02/16(水) 01:18:26 ID:qQvuhHNh
0.11.6 リリース記念上げ! だいぶ安定してきたなぁ
Valaのfor文をCに変換すると変な書き方になるよなぁ。例えば for (int i = 0; i < 10; ++i) { if (i == 3) { print ("test\n"); } } は gint i; i = 0; { gboolean _tmp0_; _tmp0_ = TRUE; while (TRUE) { if (!_tmp0_) { i = i + 1; } _tmp0_ = FALSE; if (!(i < 10)) { break; } if (i == 3) { g_print ("test\n"); } } } となるけど、アセンブラにするとほぼ同じになる。
>>161 Valaのお陰で他のオブジェクトシステムと簡単に比較出来るようになったんで
GObjectの重さが露呈されてきたと思う。
やっぱりベースの部分なんで、どんどんチューニングして欲しいもんだ。
valaを知ってから心の勃起が収まらない。 けど、シンタックスだけ同じでベースがgobjectじゃないvalaっぽい言語が欲っしいなっ。
>>163 Dova profileってのがあるよ。
Valaだけを使って、glib、gobjectを再実装している。
それはそうと、Genericsが未完成過ぎて泣けてくる…
いつの間にか可変個引数使えるようになってた。
genieって日本語使えないの?valaをもっと簡潔表現した言語のように 感じてます。
なんか、ちゃんとsetlocaleしないと日本語が表示されなくなった… これはValaもGenieも同じ。 [indent=4] init Intl.setlocale (LocaleCategory.ALL, "") var f = new Foo () print f.bar ("世界") class Foo : Object def static bar (name : string) : string return "こんにちわ " + name
> return "こんにちわ " + name じゃなくて > return "こんにちは " + name だった…
169 :
login:Penguin :2011/03/18(金) 09:16:24.29 ID:7nzfGrJF
0.11.7 リリース記念上げ!
ttp://live.gnome.org/Vala/ValaForCSharpProgrammers#Not_Available で、C# にあって Vala にない機能一覧があるけど、それぞれ私見を書いてみた。
Not Available
* No LINQ (not planned for 1.0, maybe later)
-> 実装待ち
* No operator overloading (vala-list)
-> あって欲しい…。ただ、[](インデクサー)は追加出来る
* No method or constructor overloading (use different method names / named constructors instead, as described above)
-> 別名関数とオプショナル引数を使う事で問題無し
どうしてもというなら、method overloading は GValue を使うことで可能 (
http://mail.gnome.org/archives/vala-list/2008-July/msg00017.html )
* No extension methods
-> 通常使うべきでない機能 (
http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_05/csharp30_05_01.html )
* No constraints on generic type parameters (i.e. no where)
-> あって欲しい…
* No generic delegates
-> 現状で使用可能 (0.9.3 で追加)
* No generators (yield return, planned)
-> 実装待ち
* No variable length argument lists (params, planned), for C-Bindings already possible, e.g. stdout.printf(string format, ...)
-> 現状で使用可能
* No conversion operators (i.e. no explicit and implicit)
-> あった方がいいが、obj.to_hoge() を都度追加するようにすれば問題無し
* No partial classes and methods
-> 通常使うべきでない機能 (Vala のソースを自動生成するツールには必要かもしれないけど)
続き * No sealed classes (planned) -> 実装待ち (無くても問題ないけど) * No static classes (use nested namespaces instead. Vala supports namespace methods, they are implicitly static) -> ネームスペースを使えば問題無し * No goto, no labeled statements -> 特に問題なし。goto はエラー処理で便利だが、例外を使えばいい * No constructor initializers -> base が使えるので問題無いはずだが… * No bounds checking for arrays (optional support planned) -> 実装待ち (これに頼らず、ちゃんと assert を仕込むべき) * No checked, unchecked, fixed, stackalloc, readonly -> checked, unchecked は特殊用途でしか不要なはず -> fixed はガベージコレクションの方法が違うので、そもそも不要 -> stackalloc は大体同じ事がより直感的に可能なので不要 -> readonly はプロパティを使えば可能だが、オーバーヘッドはデカいのであった方がいい機能 実装予定機能 * LINQ (1.0 以降) * generators * sealed classes * bounds checking for arrays 実装して欲しい機能 * operator overloading * constraints on generic type parameters
172 :
170 :2011/03/21(月) 08:55:03.50 ID:qRJv0v7y
> -> readonly はプロパティを使えば可能だが、オーバーヘッドはデカいのであった方がいい機能 これは > -> readonly はプロパティを使えば可能 (若干オーバーヘッドが大きい) だね。間接参照が入るだけなんで、デカいという程じゃなかった。 実装予定機能 * LINQ (1.0 以降) → これは実装されるとは思えん… * generators → これもC言語の兼ね合いで難しいと思うけど、どう実装されるか楽しみ * sealed classes → これは主にライブラリ向けの機能だけど、GObject との兼ね合いで実装は無理だね * bounds checking for arrays → これも必要な所に assert を仕込めばいいけど、それを自動化してくれれば助かる 実装して欲しい機能 * operator overloading → 有用なのは行列演算だけなんだけど… * constraints on generic type parameters → これがないと Generics がかなり不便な気がするんだけど…
173 :
login:Penguin :2011/04/05(火) 00:35:52.41 ID:7KO6Qhrh
0.12.0 リリース記念上げ!
>>147 を0.12.0の新機能で実装すると以下のようにシンプルに書ける。
void main()
{
const string name = "焼肉定食";
int index = 0;
unichar c;
while (name.get_next_char(ref index, out c)) {
stdout.printf("%s\n", c.to_string());
}
}
0.12.1 リリース記念上げ! MonoもQtも先行き不安な状態だけど、ValaとGTK+はマイペースに進化してるかな。
>先行き不安 kwsk Monoはモバイルの方に向かってるんだっけ?
java( or C#)のように書けて、Cとして出力し、GObjectの恩恵が受けられる ってのはかなり魅力あると思うんだが、普及するのはまだまだ先なのかなぁ…
>>175 金を出してくれてた会社から独立したからだけど。
確かにiPhoneとかの方に向かってるけど、iPhoneでMonoを使うメリット
ってあるんだろうか…
>>176 基本的にGLib,GTK+の世界でなきゃ、旨味が少ないんでそれの普及次第だと思う。
GTK+界隈ではそこそこ普及してると思うよ。
dconfエディタとか割と重要なソフトも使うようになったし。
>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() を用意して対処するようにしたんだけど、これでいいのかな
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
さらに言うと、 class Hoge : Object { ってしないと、hoge.cにGObjectの代わりに自前のオブジェクト作成 コードを書き出すから、行数が多くなる。 : Object なし→259行 あり→114行
例えが中途半端ですまん、実はインスタンスを作らずにそのまま呼び出したいんだ X) new Hoge().check_foo() O) Hoge.check_foo() 普段は理解もせずObjectを継承するようにはしてたんだけど そういった違いがあったのか
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(){} } で、いいんじゃない?
使い始めたばかりで vala の慣例とかは分からないけど、libxml の見本にはこんなのがあるね。 // Initialisation, not instantiation since the parser is a static class Parser.init ();
>>182 こうすると初めて呼び出した時に値を入れてくれるんだけど
初期化するべき変数が多くなると大変そうだと思ってた
>>183 こちらは明示的に呼び出さなければいけない
でもよくよく考えてみると183の場合でも初期化チェックは必要だから
その時ついでに初期化(182と183を併用)もするようにするといいのかも
クラスの動的ロードについて
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の方でクラスのアンロードができればいいのかもしれないが、その方法がわからない
>>185 試してみたらエラーを起こせなかった。エラーになるコードを見てみたい。
クラスのアンロードの仕方も分からんなぁ。
確かに、未知(といってもGObjectシステム使用)の.soからインターフェースを
探し出してコールするような事をしたいけど、多分無理っぽい。
その為に、.gir(GObject Introspection)があるんだろうけど。
>>186 とりあえずエラー出すにはサンプル中のmain内の処理を複数回行わせる
void main(string[] args) {
for (int i = 0; i < 2; i++) {
...
}}
188 :
187 :2011/06/10(金) 02:05:48.82 ID:mbXsAFUH
サンプルの方法で作成したモジュール(ライブラリ)をリロードできないかと思ったけど サンプル元となったRygelのソースを流し読みしても一度だけ読み込んでるみたい Javaの場合はクラスローダを複数持つことで、同一のクラスをローダ毎に 別物として利用できるから、あたかもそのクラスをリロードしているように見せることは出来てた
189 :
login:Penguin :2011/06/19(日) 01:12:10.73 ID:rodl4lLJ
0.13.0 リリース記念上げ! これといった新機能はないな。
趣味でプログラミングを覚えようと思っているものです。 C,C++.Java、シェルスクリプトなどの入門書は一通り読んで、 その後ScalaやLISP入門本に挑戦するもワケワカラン状態に。 ネットでポチポチ情報を探っていたらValaに行きあたったのですが 入門本か、プログラム初心者向けに何処か良いValaの解説サイトは ないでしょうか? 英語のサイトでも問題ないです。
>>188 > GLib-GObject-WARNING **: cannot register existing type
Vala は g_type_register_static でしか GType を登録しないからアンロード
出来ないんだな。
アンロードするには g_type_register_dynamic を使わない駄目らしいけど、
Vala を使って限りは無理っぽい
>>192 そうなのか
でも新しいクラスを作りさえしなければ何度でもロードできるから、使い方によっては役立つかも
ソフトを再起動せずとも実行中に修正を適用できたらいいなくらいに考えてたので
諦めて本来のプラグイン・モジュールとして使うようにするよ
195 :
190 :2011/06/24(金) 09:46:37.22 ID:SGhe/7yN
>191 MS独自路線はあまり好きではないので(Monoも今ひとつ元気無いし) C#は避けていたのですが、そう言えばValaの文体とC#はかなり 似ているらしいですね。 食べず嫌いはやめてC#の入門本も読んでみます。 あとVala本家ですね。 ありがとうございました。 >194 上の二つ、こと細かく書いてあって分かりやすそうですね。 時間を掛けてよく読んでみます、ありがとうございます。 3番目のValadocというのが何に付いて書かれてるのか よく分らないのですが、これは一体、、、? パット見、.debや.rpmパッケージの依存関係を解説している ページによく似ている気がするのですが。
ValadocはJavadocみたいなもの
で、なんかプログラム作っている人いるの?
いちおう でもまだ公開はしてない
SDLのOpenGLのコードを使えばGTK+3.0用のOpenGLWidgetを作れるかな。 ValaだとGtkDrawingAreaのカスタムウィジェット作るの簡単だし。 ちょっとやってみるか。
ちょっと苦労したけど、とりあえずGTK+3.0用のOpenGLWidgetを作れた。 X用だけどWindows上でGTK+3.0が動けばWIN32版も作りたいね。
201 :
login:Penguin :2011/08/17(水) 07:23:40.68 ID:IAr+wEqa
0.13.2 リリース記念上げ! gtk-3.0.vapi とかは既に .gir から自動生成してるんだな。 glib-2.0.vapi は未だに手で修正しているっぽいけど、こっちは 簡単に変換出来ない何かがあるんだろうな。
202 :
login:Penguin :2011/08/23(火) 01:39:44.91 ID:2RMnbvfu
0.13.3 リリース記念上げ! 6日でのリリースだが、そんな急ぐ理由があったのか…
1.0の予感!
gir に切り替えるのもいいけど色々レグレッション 必要な段階に来てるとは思う…
valadocのトップページがちょっと変わってた /references.htmlのページがなくなったと思たらトップページが整理されてた
207 :
login:Penguin :2011/09/08(木) 01:48:01.64 ID:w55NPGf2
0.13.4 リリース記念上げ! valadoc のトップページは意味不明だったからなぁ、改善されて良かった。
今まで、オープンソースの世界でコンポーネントモデルっていうと、 XPCOM(Mozilla) Bonobo(Gnome) UNO(OpenOffice) があったけど、どれも全然普及してない。 GObject-Introspectionは新しいコンポーネントモデルとして普及するんじゃ ないかっていう予感はある!
209 :
login:Penguin :2011/09/19(月) 01:17:06.82 ID:2Lj/CBBV
0.14.0 リリース記念上げ! そろそろ、1.0っていっちゃってもいい気がする。
valaは最高に使いやすいんだけど、それでもやっぱりマルチスレッドで落ちないもの作ろうとすると難しい とりあえずMutex多様でその場を凌いでたんだけど、ある程度のスペックがあるPCで動かすとたまに落ちる Mutexって使いすぎると良くなかったりするの?
単にプログラムがまずくてrace conditionがあるってだけだろ
全然余裕で半分位の行数で書けるよ。 ちょっと時間が取れないけど、書いて見せるよ。 ちなみに、GObject流のオブジェクト指向なんて最初は考える必要ないよ。 最適なコードを書こうとしたら気にする必要はあるけど。
>>211 それはよく理解してる
どうやら自前で用意したMutexじゃなく
Gdk.threads_leave()の使い方が悪かったのが原因だったのかも
216 :
login:Penguin :2011/12/12(月) 17:52:40.22 ID:smhjypxV
いつのまにかMath関係のDSOエラーが出たからどうしたもんかと思ったけど リンクのときに-lmが必要だったのね ついでに遅いけど 0.15.0 リリースアゲ
>>216 0.81くらいの時からそのフラグは必要だったかと思われるw
今回から配布形式が xz 圧縮になっててちょっと驚いた。
tar jxvf vala-0.14.1.tar,bz2
tar xvf vala-0.15.9.tar.xz
jを付けなくても大丈夫と憶えておくことにする…
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
>>217 -lm なしでも動いてたから気づかなかったw
2009年ごろのBugzillaの回答に助けられた
Gtk-3.0.girにはAPIとかにちゃんとドキュメントがあるのに gtk+-3.0.vapiではドキュメントが完全に抜け落ちてる… Gtk-3.0.girからVala用にドキュメント込みのHTMLを掃き出す ツールがないもんかなぁ。
221 :
login:Penguin :2012/01/27(金) 13:13:36.83 ID:MJrNQhDK
0.15.1出てます
0.14.2も出たけど、安定版と開発版を分ける意味あるか?
>>226 Valaに関係しているglibの結果を見ると速からず遅からずだな…
C++テンプレート系が全般的に速い。C++の存在価値ってこういうところにあるよな。
228 :
login:Penguin :2012/04/30(月) 13:23:23.77 ID:BcoIzs2r
0.17.0 リリース記念上げ! 2ヶ月前の 0.15.2 からのコミット数が20程度だ… 突然開発速度ががた落ちしたみたいだけど、どうしたんだろうか?
230 :
login:Penguin :2012/08/08(水) 01:47:09.88 ID:ompgOWg2
Vala 0.17.4 リリース記念上げ! ・Drop Dova profile. ・Drop POSIX profile. うーん、やっぱり GObject 一本で行くんだな。
来年夏にはGNOMEはほぼ解散状態に陥るのでどうでもよい
何かあったの?
DebianにまでGnomeデスクトップが愛想を尽かされた件じゃない?
愛想尽かすっつーかデフォルトを変えるだよ。
>>235 >Debian GNU/Linux 7.0 "Wheezy" ではXfceが標準のデスクトップ環境になるとPhoronixが伝えている。
なんとなく振り返って呼んでみたら相変わらず Phoronix いい加減の風説撒いててワロタ
今日日実機に投入するなら usbインストールが主流だろうにサイズはそれほど
以前より気にしなくても良くなったか
239 :
login:Penguin :2013/03/18(月) 21:36:56.23 ID:3uMtrQaR
Valaしばらく使ってるけど、Genericsでは型消去するってことでいいのかな? CILだし、何となくそんな気がするんだけど、確証がないし、Cコードを本気で追う気概もなく・・・ 誰か分かる人いませんか?
>>239 型がなくなる。要するにC#じゃなくてJavaのGenericsと同じ。
なんでやれることがかなり限られる。
>>241 あれ?そのコメント欄では共変じゃないっていってるね。
それと、Vala開発者の弁護をする訳じゃないけど、Valaは関数名のオーバーロード
をしない方針だから、型を消去せざるを得なかったんじゃないかと思われる。
しかし、
public static G Max<G>(G a, G b) { return a > b ? a : b; }
がエラーになるんだから、役に立たないとも言える…
>>242 コメントは要約するとこんな感じ?(英語間違ってたらすんません)
読み書きできる配列とかコレクションは不変であるべき前提があるから、
共変なJavaの配列はクソだったな、一応例外で対応してるけど。
(しかし、Genericsでの同様の問題への対応は理にかなってた。)
同じ轍を踏むValaの開発者は以下略。
型変数について境界が定義できないから、具象メソッドに対するGenericsは使えないよね実質。
(抽象メソッドではまぁ使えるだろうけど)
うーむ使いどころが難しい。
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すれば直るのね
245 :
login:Penguin :2013/09/14(土) 18:31:29.39 ID:Lj5ZFryQ
246 :
login:Penguin :
2013/09/26(木) 02:09:02.75 ID:EPJ3SFEj