re: 好玩的Go語言[未登錄] eXile 2010-01-14 21:40
@陳梓瀚(vczh)
google不可憐,可憐的是網民。
re: 好玩的Go語言 eXile 2010-01-14 10:49
@bluegene
這是想借助開源社區的力量,比如現在已經有人在做Windows 的移植,以及數據庫的客戶端,還有人在討論GUI的設計。對于老外來說,開源只會太遲,不會太早。
re: 好玩的Go語言 eXile 2010-01-14 10:43
@陳梓瀚(vczh)
Go接口的實現可能是這樣的,假設函數定義的形參類型為Myinterface,而實際調用的實參類型為A,所編譯器會對A生成一個關于Myinterface的方法表,這樣,實參的值并不是一個簡單的對象指針,而是對象指針再加上方法表的首地址。
re: 好玩的Go語言 eXile 2010-01-13 11:30
吊詭的是,go語言的官方網站我在Windows下不能訪問,但在Linux下可正常訪問
re: 好玩的Go語言 eXile 2010-01-13 11:27
@陳梓瀚(vczh)
1)編譯分析是根據包packege來進行的,一個類的函數必須定義在一個包中,但可以在不同的文件中。
2)interface有顯式繼承,當然也是以嵌入的形式。我也想到了C++的concept,但是Go接口又具有動態特性。
3)Go具有和C一樣的ABI,一樣的類型,一樣的結構布局,所以從Go調用C很容易,但是,因為有GC,所以不支持從C調用Go。
4)超快的編譯速度,無論是Go還是D語言,對c/c++的一個很大的不滿就是編譯太慢,當然不會再出現這個問題。庫是二進制的。Go目前有兩套編譯器,其中一個編譯器gccgo的目標是和gcc二進制兼容。
5)Go語言的庫都是用Go語言來寫的,個人感覺很好讀,代碼量也少得多,每個庫也就是一兩個實現文件,是學習Go的最好途徑。
re: 好玩的Go語言 eXile 2010-01-13 00:09
說到開發效率, 在服務器領域,Go絕對優于Java,C++,就不用提了。
re: 好玩的Go語言 eXile 2010-01-13 00:05
@陳梓瀚(vczh)
不需要提前聲明估計最根本的原因是為了簡化編譯器的開發吧?
不是這么簡單。這是Go語言與其它面向對象語言的最大不同。舉個例子就明白了,
type MyInterface interface { func doIt() } // 接口
type A struct {}
func (self *A) doIt() {} // 指針
type B struct {}
func (b B) doIt() {} //值
type C struct { A } // 嵌入
則A, B,C 都實現了MyInterface接口,也就都是MyInterface類型。沒有繼承,沒有顯式說明,靜態綁定。Go把它稱之為“最令人激動的事情之一” 不是沒有道理的。
re: 好玩的Go語言 eXile 2010-01-12 21:13
關于為什么沒有繼承,官方FAQ是這么說的:它簡化了類之間的關系,不再有復雜的類型體系。接口的隱式風格,使一個類型不需要提前聲明,就可以一次滿足多個接口,同時又沒有傳統的多重繼承的復雜性——“這種風格需要一段時間來適應,但這是Go語言最令人激動的事情之一”。
re: 好玩的Go語言 eXile 2010-01-12 18:04
@陳梓瀚(vczh)
面向對象的兩條重要原則:1.面向接口編程,而不是面向實現編程 2 優先使用組合而不是繼承, 這在別的語言中只不過是口頭約定,而在Go語言中,你則不得不這樣做。
re: 好玩的Go語言 eXile 2010-01-12 17:31
@陳梓瀚(vczh)
如果可能的話,把相同的代碼提取出來,組成一個新類或新函數,再組合進去。或者,使用一個代理類。我覺得利用嵌入還是比較好解決這個問題的。
re: 好玩的Go語言 eXile 2010-01-12 13:16
是的,畢竟Go沒有繼承,沒有虛函數,它沒有子類和父類的概念,所有的指針都視為不同的類型。但是,對于Go語言來說,接口不是指針,這是它和其它語言的不同。如果要多態,就應該使用接口,而不是具體的類。
這里只提出一個實現思路,不再提供源代碼,請各位見諒。
re: 內存池實現 eXile 2009-11-12 12:30
用google的TCMalloc 直接替換malloc實現
re: 如何設計一個應用軟件[未登錄] eXile 2009-10-27 15:08
myuml是作者開發的嗎,似乎還不錯,很輕量,界面也還可以。試用了一下,還是有些需要改進。比如,新建一個方法,過程太繁瑣,其實可以直接輸入:method(arg1:int, arg2:int):int,然后解析出它的參數和返回值,而不需要一個一個控件在那點半天。另外為什么發布的是DEBUG版的?
tr1是支持Express的,不過也是要Express SP1
lambda是個令人欣喜的特性,至于右值引用,可以極大地提高標準庫的效率,但是對一般的程序員沒有什么太大影響,不好理解的話,就當它不存在好了。
re: 類實例能做做模板參數嗎? eXile 2009-05-27 15:43
基本概念錯誤,LZ應該了解一下什么是函數類型,什么是函數指針類型,他們之間的區別和轉化。
Windows下可以,只用于線程的叫critical_section
re: ifstream與CFile的效率 eXile 2009-05-19 12:07
800K的文件,要七秒,286也不至于吧
@螞蟻終結者
BOOST_FOREACH 的那陀實現。。。還是算了吧
@空明流轉
確實,沒有lambda之前,for_each沒什么意思。不過好消息是VC2010將會支持lambda.
@OwnWaterloo
謝謝提醒,RANDOM_VAR的定義確實不對,要改成你說的樣子.
不過你說的加大括號或者foreach_helper加container引用的辦法,是不行的。
至于,為什么使用下劃線開頭,正是因為這種命名方法不常用,所會才會避免偶然和其它變量重名的情況,一般也就是僅限于宏中使用。
re: Boost求數組的大小[未登錄] eXile 2009-05-07 20:54
這個也要用boost?
template <class T,int N>
inline const int array_size(T (&x)[N]) {
return N;
}
在實用主義覆蓋一切角落的國度,人們都會變得鼠目寸光。
re: 智能指針LytPtr eXile 2009-03-21 01:49
bool operator==(_Type* Temp)const
實現中有個小bug
不是做web開發,而是本地桌面應用集成WEB服務。另外,現在很多本地應用實際上都是用網頁來做界面。
re: 智能指針的代碼實例 eXile 2009-03-09 17:18
ICE中的實現吧,這個并沒有解決循環引用的問題。所以他還有一個GCShared
re: 編輯器近況 eXile 2009-02-25 22:12
不錯啊,不過我覺得Notepad++確實挺好用的,SciTE也不錯,更省資源。
字符串匹配我前兩天剛好找了一個正向的boyer moore horspool算法,不過沒有深究。Notepad++是開源的,里面應該有類似實現。
re: wxwidgets使用之后的一些感覺 eXile 2009-02-09 02:21
wx一直標榜的最大的優點就是原生界面,其實我覺得這反而是一個缺點,就拿你說的這個例子,要擴展一個組件就很麻煩。而在QT中,使用MVC架構很容易實現一個復雜的 treelist。
你說的換膚功能,在QT中只需要編寫CSS就可以了,不需要自己編程實現。
另外,使用原生組件并不一定就比自繪組件性能占優,反而有時候在不同的平臺下出現不一樣的界面布局,調整起來也很麻煩。
re: 自己造的一個線程類 eXile 2009-01-19 14:13
Win32最好不要使用CreateThread, 使用 _beginthreadex
re: 用Google Docs寫博客 eXile 2009-01-15 13:43
一個不太好的消息:Google將關閉在線筆記本
筆記本將不再吸收新用戶,現有用戶將只能通過網站訪問,而沒有瀏覽器擴展。
re: 自己設想的一個IM服務器的架構 eXile 2009-01-13 17:42
用戶的在線狀態,簡單一點,直接保存在內存中,復雜一點,保存在共享內存中
re: 可以根據字符串創建類嗎--解決方案 eXile 2009-01-13 13:40
那這個IShape把所有的接口都設計好了,按名創建就行了。
這用不到RTTI。
所謂反射應該是這樣的,有一個公共類Object, 使用如下:
Object* object = createByName(“Circle”);
object->invoke("draw");
re: 可以根據字符串創建類嗎--解決方案 eXile 2009-01-13 13:31
原來你的需求是這樣的,一般的工廠模式解決的就是這個問題。
re: 提問: 可以根據字符串創建類嗎 eXile 2009-01-11 12:35
C++的反射功能是很弱的,一般而言,都是通過序列化來支持數據成員的構造,如果你還要支持成員函數(也就是你說的未知類),那就由強類型系統變成了弱類型系統。這個最好還是結合一個成熟的腳本系統來做吧,比如python等。我推薦Qt, 你可以通QtScript來使用JavaScript,配置文件可以通過Json。
看來確實是這樣的,只有定義,是不會加載內存的,只有在實際使用時,才會加載。編譯優化不太可能。
@飄雪
靜態全局變量是不用的,它的作用域只是該文件,聲明沒有意義
re: 再次批判 裘宗燕 eXile 2009-01-05 21:06
大學教授譯書,都是老家伙掛個名,然后找一幫學生翻的
re: 用ICE實現一個簡單的聊天室 eXile 2009-01-04 14:21
@cppfan
是的,你說的太對了.
re: 動態數組的 C++ 類模板[未登錄] eXile 2008-09-07 14:24
如果使用的是SGI STL或者STLPort,那么這種優化意義不大,因為SGI STL的實現已經考慮了對于POD的優化(通過typetraits來判斷是否為POD,然后使用mem*函數) 。
提高vector性能可從兩方面考慮:
1)使用特定內存池,實現一個Allocator, 利用vector 的第二個模板參數。這也是提高STL容器性能的常規辦法。
2)此處成為性能瓶頸,是不是系統設計方面有什么問題?可以從整個系統優化的角度來考慮。
上面有些錯誤:
QSignalMapper* map = new QSignalMapper(this);
connect(button0, SIGNAL(clicked()), map, SLOT(map()));
connect(button1, SIGNAL(clicked()), map, SLOT(map()));
map->setMapping(button0, 0);
map->setMapping(button1, 1);
connect(map, SIGNAL(mapped(int)), this, SIGNAL(numberClicked(int)));