cht電腦資訊Language
adm Find login register

[比較] C, ruby, python

caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
1subject: [比較] C, ruby, pythonPromote 0 Bookmark 02008-05-31quote  

用三種語言寫了最精簡版的 VTE terminal emulator。

覺得還是學 C 就好,沒有比較難,效能又很好。

C
#include <vte/vte.h>
main(){
gtk_init(0,0);
GtkWidget *w=gtk_window_new(0);
GtkWidget *t=vte_terminal_new();
vte_terminal_fork_command(t,"sh",0,0,"/",0,0,0);
gtk_container_add(w,t);
gtk_widget_show_all(w);
gtk_main();
}

ruby
#!/usr/bin/ruby
require 'gtk2'
require 'vte'
w=Gtk::Window.new
t=Vte::Terminal.new
t.fork_command
w.add(t)
w.show_all
Gtk.main

python
#!/usr/bin/python
import gtk
import vte
w=gtk.Window()
t=vte.Terminal()
t.fork_command()
w.add(t)
w.show_all()
gtk.main()

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
2subject: Promote 0 Bookmark 02008-05-31quote  

程式大了就會覺得 C 比較難。:)

GUI 程式,還是用 C 比較好,用 script 程式複雜點就慢下來了。 

不過,我倒是不知道 ruby 有 vte binding 說。


本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
3subject: Promote 0 Bookmark 02008-05-31quote  

使用 script 的好處是他包了許多糖衣,例如字串處理,這個部份要用 C 寫,就麻煩多了。

簡單的 GUI, 用 script 是還好,大一點的就不合適了。如果是才剛開始學程式語言,我是比較建議學 C,先習慣程式語言如何抽象化,將來要學什麼都好說。

程式語言有兩大難題,1. 抽象化,2. 結構演算。初學,是 1. 比較困難。有一定程度的是 2. 比較困難。

以上是我的簡單學習經驗,供大家參考(因為不小心,這三種我都曾學過 XD)。


qrtt1

joined: 2007-10-02
posted: 82
promoted: 18
bookmarked: 5
藍星
4subject: Promote 0 Bookmark 02008-06-01quote  

 

舉了有元件可以用的例子並不太公平啊 :P

如果要舉內嵌 asm 的例子,同時也對另外二者不公平了

(不公平並不是說做不到的意思 :D)

並不是所有的用途都能讓三者的實作難度那麼平均的

所以這樣的比較實在沒有參考性啊 >"< 

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
5subject: Promote 0 Bookmark 02008-06-01quote  

管他黑貓白貓,會抓老鼠的就是好貓!大笑

不過,script 的發展會吸引一堆人,總是有他的好處。C 一直維持不墜的地位,也當然有他一定的道理。最好當然就是兩個都會,針對要解決的問題評估後看要用哪一種。只是我長期觀察的結果,業餘用途的話,你會用哪一種就是那一種吧!想太多就天亮了,不如趕快動手才是真的。XD


edited: 1
qrtt1

joined: 2007-10-02
posted: 82
promoted: 18
bookmarked: 5
藍星
6subject: Promote 0 Bookmark 02008-06-01quote  
LGJ

只是我長期觀察的結果,業餘用途的話,你會用哪一種就是那一種吧!想太多就天亮了,不如趕快動手才是真的。XD

 

所以姿勢有空再學, 先動手才是真的。因為想太多就天亮了 (逃) 

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
7subject: Promote 0 Bookmark 12008-06-01quote  
qrtt1

 

所以姿勢有空再學, 先動手才是真的。因為想太多就天亮了 (逃) 

那些都不重要,小q 萌主最重要的是先找一個可以動手的對象。XD
 


caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
8subject: Promote 0 Bookmark 02009-10-27quote  

letoh 從 demo.c 轉的 Reva Forth code: 

Reva Forth

" libvte.so" lib libvte
libvte not [IF] ." load libvte failed..." cr -1 throw [THEN]
 
0 func: vte_terminal_new
8 func: vte_terminal_fork_command
 
needs ui/gtk2
~gtk2
 
: =exit callback gtk_main_quit ;
: main ( -- ) init
    GTK_WINDOW_TOPLEVEL gtk_window_new dup dup
    vte_terminal_new
    dup 0 0 0 0 0 0 0 vte_terminal_fork_command drop
    2dup _add
    z" child-exited" ['] =exit _connect drop
    z" delete-event" ['] =exit _connect drop
    gtk_widget_show_all gtk_main ;
 
1 [IF]
~sys
' main is appstart
exit~
save test_vte
 
[ELSE]
 
main
 
[THEN]
 
bye

edited: 3
本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
9subject: Promote 0 Bookmark 02009-10-27quote  

現在用 forth 的是稀有動物了吧!吐舌頭


caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
10subject: Promote 0 Bookmark 02009-11-15quote  

http://live.gnome.org/Vala

Vala
// valac --pkg vte demo.vala -o demo
using Gtk;
using Vte;
void main(string[] args){
Gtk.init(ref args);
Window m=new Window(Gtk.WindowType.TOPLEVEL);
Terminal v=new Terminal();
v.fork_command(null,null,null,null,false,false,false);
m.add(v);
m.show_all();
Gtk.main();
}

edited: 1
caleb
joined: 2007-09-22
posted: 630
promoted: 134
bookmarked: 90
11subject: Promote 0 Bookmark 02009-11-16quote  
C++
// g++ demo.cpp -o demo `pkg-config --cflags --libs libvtemm`
#include <libvtemm.h>
main(){
Gtk::Main kit(0,0);
Gtk::Window::Window m;
Gnome::Vte::Terminal v;
v.fork_command();
m.add(v);
m.show_all_children();
Gtk::Main::run(m);
}
edited: 1

cht電腦資訊Language
adm Find login register
views:34791