Crest-大家都來山寨一個GObject吧
感謝園子的兩位博友給我們帶來了和GObject相關的知識(參看《使用C語言進行面向對象的開發--GObject入門》系列和《玩玩 Vala》),受到他們的啟發,決定也來仿造一個類似GObject的系統,用流行的話,就叫“山寨”了。希望bigtall這次也能做一個物美價廉質優輕便的“山寨”產品。
這次行動的目的有如下的幾個:
- 揭開所謂“面向對象”編程語言的神秘面紗,帶領大家到編程語言的深處旅游一下。
- 試探一下C語言在承載新語言特性方面的水深
- 展示一下C系列語言宏定義(Macro)的強大功效和不足
- 如果萬一bigtall設計的新特性比原來的GObject要好些,說不定也能有些用場
首先bigtall要給我的“山寨”特性起一個合適的名字。嗯,我覺得“山寨”這個名字其實還是不錯的,不過要翻譯成英文可就不容易了,山寨==山頂別墅?首先看山頂,有解釋說knap=the crest of a hill,看到crest比較順眼,看看意思:“冠狀物,(頭盔上的)羽飾,(尤指山的)頂部”。不錯!就是Crest了。
其次,我們要列出我們的需求,也就是要實現的“面向對象”特性的清單,不過bigtall也不知道到底我們能實現幾個,我們“騎驢看唱本--走著瞧”吧。
- 類(含duck type)
- 接口
- 類和接口的繼承(包括類的單繼承、類的多繼承,接口的實現和繼承,prototype繼承)
- 成員函數調用(包括普通成員、虛函數、純虛函數)
- 屬性
- 類型的檢查和轉換
- 對象的創建和銷毀(構造函數、析構函數)
- 對象的內存分配和釋放機制(new、delete)
- 消息message、事件event、信號signal機制
- 閉包Closure
- 反射Reflection
- 調試支持
- 多線程
因為bigtall對函數式語言不熟悉,所以如果還有其他什么比較好玩的特性,請大家踴躍提供,因為我們這是屬于研究探討形式,所以也不必拘泥于能否最終實現。而且這個文章應該會寫一個系列,bigtall希望展現一個完整的“設計、妥協、平衡”的完整過程給大家。
在進入正題之前,bigtall還想多說兩句。在使用C語言的時候,我們一定要注意它的特點之一就是“沒有異常處理”(setjump也許算)。這個特點帶來的歡笑就是任何一個函數的出口都是設計好的,不會有異常Exception突然throw來中斷代碼的運行,簡單;壞處就是判斷出口代碼會煩得要人命。
下一篇: Crest簡單對象的設計

公眾號:老翅寒暑
浙公網安備 33010602011771號