青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    根據之前的計劃,讓Vczh Library++3.0的編譯器變成語言的公共后端的同時,開放幾乎所有層的API讓人們可以從各種基礎上開發自己的DSL,所以在做完NativeX之后,接下來的事情就是寫必要程度的庫之后,做一些基礎設施讓托管語言可以被編譯到NativeX上面去。因此現在需要完成的東西有:
    1、內存池,用來實現NativeX的new和delete。這個已經做完了。下一篇文章將詳細描述這個內存池的結構。
    2、線程和同步對象。這個很快就做完了。NativeX的線程不僅需要有基本的功能,還需要做一個內置的消息循環。當一部分線程選擇使用消息循環作為它的結構的時候,其他線程就可以把一些代碼片段發送給這個線程執行了。并且要做到跟C#一樣,當線程被外部強行中止的時候,線程內部會拋出一個異常,然后讓線程自己去處理。
    3、基本的字符串和數學函數庫
    4、垃圾收集器。這個垃圾收集器是不屬于NativeX的語法的。這個垃圾收集器將被開發成一個NativeX的函數庫,用于支持更高層次語言的編譯。

    當然為了完成這個目標,我給NativeX加上了一些無關痛癢但是卻會帶來方便的語法:
    1、#public編譯選項。只要在structure、function或者variable上面標記了#public的話,這個特殊的標志就會被記錄在編譯后的二進制文件的元數據里面。NativeX現在的元數據分為兩種。第一種是運行時元數據。之前的文章提到NativeX的模板函數和其他模板的東西都是可以直接編譯進二進制文件的,因此模板函數的實例化實際上是在運行是的時候做的。不過現在我也實現了一個編譯選項(不屬于NativeX,需要用C++去控制),可以在編譯完所有二進制文件之后,將他們合并成一個大的二進制文件并且預先展開所有需要的模板函數。這一步可以用于加快運行速度,還可以為將來運行時編譯成x86或者x64做準備。當#public被記錄到元數據里面之后,編譯器就可以從編譯好的二進制文件里面重新還原出該二進制文件的頭文件。
    2、sizeof(type)、offsetof(type::member)、typeof(expression)和typeof(type::member)。這個純粹是為了配合內存池和未來的垃圾收集器而做出來的。當你需要alloc一個東西的時候,你顯然需要知道一個類型的尺寸,而這個是會跟隨著不同的情況而變化的,所以就給出了這些東西,讓編譯器幫助你計算各種跟類型相關的數字。
    3、常量定義。這個還沒實現,到時候的語法可能會是constant type name = value;。而且當他被標記上#public之后,就可以在生成頭文件的時候包含該常量了。

    為了讓C++可以給NativeX添加外部函數,我做了一個輔助類用來簡化這個過程。舉個例子,我們需要實現一個叫做MemCreate的創建內存池的函數。首先我們需要在NativeX里面聲明它:
1 structure __ForeignHandle
2 {
3 }
4 
5 foreign function __ForeignHandle* __MemCreate()
6     alias SystemCoreForeignFunctions.MemCreate;

    這里的alias后面的一大串是外部函數的名稱,而__MemCreate則是他對于NativeX的名稱。接下來我們就得在C++實現這個函數了:
  1 #include "ScriptingUtilityForeignFunctions.h"
  2 #include "..\Languages\LanguageRuntime.h"
  3 #include "..\..\Entity\GeneralObjectPoolEntity.h"
  4 #include "..\..\Threading.h"
  5 
  6 namespace vl
  7 {
  8     namespace scripting
  9     {
 10         namespace utility
 11         {
 12             using namespace basicil;
 13             using namespace entities;
 14             using namespace collections;
 15 
 16             class SystemCoreMemoryManagerPlugin : public LanguagePlugin
 17             {
 18             public:
 19                 struct PoolPackage
 20                 {
 21                     GeneralObjectPool                    pool;
 22                     CriticalSection                        cs;
 23 
 24                     PoolPackage(vint poolUnitSize, vint poolUnitCount)
 25                         :pool(poolUnitSize, poolUnitCount)
 26                     {
 27                     }
 28                 };
 29 
 30                 List<Ptr<PoolPackage>>                    pools;
 31                 CriticalSection                            pluginCs;
 32 
 33                 class MemCreate : public Object, public IBasicILForeignFunction
 34                 {
 35                 protected:
 36                     SystemCoreMemoryManagerPlugin*        plugin;
 37                 public:
 38                     MemCreate(SystemCoreMemoryManagerPlugin* _plugin)
 39                         :plugin(_plugin)
 40                     {
 41                     }
 42 
 43                     void Invoke(BasicILInterpretor* interpretor, BasicILStack* stack, void* result, void* arguments)
 44                     {
 45                         LanguageArgumentReader reader(result, arguments, stack);
 46                         Ptr<PoolPackage> pool=new PoolPackage(1048576256);
 47 
 48                         CriticalSection::Scope scope(plugin->pluginCs);
 49                         plugin->pools.Add(pool);
 50                         reader.Result<PoolPackage*>()=pool.Obj();
 51                     }
 52                 };
 53 
 54                 static vint MemAlloc(void* result, void* arguments)
 55                 {
 56                     LanguageArgumentReader reader(result, arguments);
 57                     PoolPackage* pool=reader.NextArgument<PoolPackage*>();
 58                     vint size=reader.NextArgument<vint>();
 59 
 60                     CriticalSection::Scope scope(pool->cs);
 61                     reader.Result<char*>()=pool->pool.Alloc(size);
 62                     return reader.BytesToPop();
 63                 }
 64 
 65                 static vint MemFree(void* result, void* arguments)
 66                 {
 67                     LanguageArgumentReader reader(result, arguments);
 68                     PoolPackage* pool=reader.NextArgument<PoolPackage*>();
 69                     char* pointer=reader.NextArgument<char*>();
 70                     
 71                     CriticalSection::Scope scope(pool->cs);
 72                     reader.Result<bool>()=pool->pool.Free(pointer);
 73                     return reader.BytesToPop();
 74                 }
 75 
 76                 static vint MemIsValidHandle(void* result, void* arguments)
 77                 {
 78                     LanguageArgumentReader reader(result, arguments);
 79                     PoolPackage* pool=reader.NextArgument<PoolPackage*>();
 80                     char* pointer=reader.NextArgument<char*>();
 81                     
 82                     CriticalSection::Scope scope(pool->cs);
 83                     reader.Result<bool>()=pool->pool.IsValid(pointer);
 84                     return reader.BytesToPop();
 85                 }
 86 
 87                 static vint MemGetHandleSize(void* result, void* arguments)
 88                 {
 89                     LanguageArgumentReader reader(result, arguments);
 90                     PoolPackage* pool=reader.NextArgument<PoolPackage*>();
 91                     char* pointer=reader.NextArgument<char*>();
 92                     
 93                     CriticalSection::Scope scope(pool->cs);
 94                     reader.Result<vint>()=pool->pool.GetSize(pointer);
 95                     return reader.BytesToPop();
 96                 }
 97 
 98                 static vint MemGetOwnerHandle(void* result, void* arguments)
 99                 {
100                     LanguageArgumentReader reader(result, arguments);
101                     PoolPackage* pool=reader.NextArgument<PoolPackage*>();
102                     char* pointer=reader.NextArgument<char*>();
103                     
104                     CriticalSection::Scope scope(pool->cs);
105                     reader.Result<char*>()=pool->pool.GetHandle(pointer);
106                     return reader.BytesToPop();
107                 }
108             protected:
109                 bool RegisterForeignFunctions(BasicILRuntimeSymbol* symbol)
110                 {
111                     return
112                         symbol->RegisterForeignFunction(L"SystemCoreForeignFunctions", L"MemCreate"new MemCreate(this)) &&
113                         symbol->RegisterLightFunction(L"SystemCoreForeignFunctions", L"MemAlloc", MemAlloc) &&
114                         symbol->RegisterLightFunction(L"SystemCoreForeignFunctions", L"MemFree", MemFree) &&
115                         symbol->RegisterLightFunction(L"SystemCoreForeignFunctions", L"MemIsValidHandle", MemIsValidHandle) &&
116                         symbol->RegisterLightFunction(L"SystemCoreForeignFunctions", L"MemGetHandleSize", MemGetHandleSize) &&
117                         symbol->RegisterLightFunction(L"SystemCoreForeignFunctions", L"MemGetOwnerHandle", MemGetOwnerHandle);
118                 }
119             };
120 
121             Ptr<LanguagePlugin> CreateMemoryManagerPlugin()
122             {
123                 return new SystemCoreMemoryManagerPlugin();
124             }
125         }
126     }
127 }

    外部函數分兩種,一種是需要全局狀態的,而另一種不需要。在不需要的時候,我提供了一個不會跟虛函數打交道的接口來加快(雖然其實可以忽略,只是為了滿足那些有畸形性能欲望的人的心理而已)運行時的性能。

    就先說到這里了。NativeX函數庫的測試用例已經開始在做了,可以去Vczh Library++3.0下載最新代碼之后,在下面的目錄找到:
    Library\Scripting\Utility\:這里是外部函數的實現。
    UnitTest\Binary\ScriptCoreLibrary\:這里是NativeX將外部函數簡單的封裝起來之后的函數庫,以及他們的測試用例。我為NativeX實現了一個簡單的單元測試框架。
    UnitTest\UnitTest\TestScripting_Utility_System_CoreNative.cpp:這個是NativeX單元測試框架的host。
posted on 2011-01-01 05:14 陳梓瀚(vczh) 閱讀(3918) 評論(7)  編輯 收藏 引用 所屬分類: VL++3.0開發紀事

評論:
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-01 17:04 | mm
LZ 強大  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-01 17:55 | kongque
你的博客我看了不少,一直看不明白你搞得這些東西。

只能佩服啦。

另:新年快樂!  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-02 01:42 | 陳梓瀚(vczh)
@kongque
要學哈,編譯原理什么的,本科必修課來的  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-02 01:50 | mm
新年快樂,茁壯成長~~  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-02 03:26 | lwch
新年快樂,再出好文章~~  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-02 05:11 | kongque
@陳梓瀚(vczh)

我不是計算機專業科班出身,本科沒有這個課..........


  回復  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-03 01:17 | 空明流轉
V5。火速去MSRA,然后我也跟去。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久综合精品竹菊| 亚洲一区久久久| 99国产精品久久久久老师| 国内精品福利| 国产亚洲综合性久久久影院| 国产色综合久久| 一区二区亚洲精品| 亚洲人成在线观看网站高清| 一区二区三区高清不卡| 亚洲在线免费| 久久久久久欧美| 亚洲大片精品永久免费| 欧美成人伊人久久综合网| 欧美激情一区二区三区四区| 亚洲乱码国产乱码精品精| 亚洲午夜在线观看视频在线| 久久成人人人人精品欧| 欧美福利精品| 国产欧美一区二区三区在线看蜜臀 | 亚洲乱码国产乱码精品精天堂 | 日韩视频免费看| 午夜精品福利电影| 欧美成人亚洲| 亚洲欧美在线一区二区| 欧美高清视频一区二区三区在线观看| 国产精品久久久久久妇女6080 | 欧美激情在线免费观看| 国产美女一区| 一本一本久久a久久精品综合麻豆| 午夜精品三级视频福利| 欧美激情网友自拍| 午夜精品999| 欧美精品日韩一本| 狠狠色综合色综合网络| 亚洲在线视频观看| 欧美国产日韩一区二区| 午夜精品久久99蜜桃的功能介绍| 免费中文字幕日韩欧美| 国产欧美另类| 亚洲欧美日韩精品一区二区| 亚洲成人中文| 久久香蕉国产线看观看av| 国产精品免费久久久久久| 日韩亚洲精品电影| 欧美高清在线播放| 久久久久久999| 国产婷婷一区二区| 欧美亚洲一级片| 99在线观看免费视频精品观看| 久久精品一区二区国产| 国产伦精品一区二区三区免费 | 99视频精品全部免费在线| 欧美www在线| 在线观看成人av电影| 久久久噜久噜久久综合| 亚洲欧洲99久久| 国产精品久久久久久亚洲调教 | 老司机一区二区| 伊人春色精品| 牛牛国产精品| 欧美a级大片| 亚洲日本中文| 亚洲国产精品一区二区尤物区| 蜜桃久久精品乱码一区二区| 欧美一站二站| 久久综合久久久久88| 亚洲精品视频一区二区三区| 欧美www在线| 亚洲国产欧洲综合997久久| 久久婷婷久久| 久久久九九九九| 在线播放亚洲| 亚洲第一在线综合在线| 欧美第一黄色网| 一区二区三区不卡视频在线观看 | 一区二区高清视频| 在线综合+亚洲+欧美中文字幕| 欧美日本一区二区视频在线观看| 亚洲精品乱码久久久久久| 亚洲激情校园春色| 欧美性大战久久久久久久蜜臀| 午夜精品福利电影| 久久久久久久久一区二区| 亚洲国产毛片完整版| 亚洲美女免费视频| 国产精品久久久久免费a∨大胸| 欧美一区免费视频| 久久深夜福利| 亚洲午夜精品久久久久久app| 亚洲一区在线观看视频| 黑人巨大精品欧美一区二区小视频 | 欧美成人一区二免费视频软件| 欧美成人有码| 午夜精品美女自拍福到在线 | 日韩视频永久免费| 国产亚洲一区二区三区| 欧美成年人在线观看| 欧美日韩视频在线一区二区观看视频 | 久久频这里精品99香蕉| 99视频一区二区三区| 欧美一级理论性理论a| 日韩午夜在线观看视频| 久久激五月天综合精品| 亚洲图片激情小说| 美女精品视频一区| 久久99伊人| 欧美日韩精品在线观看| 美女福利精品视频| 国产女人18毛片水18精品| 亚洲电影在线| 好看不卡的中文字幕| 亚洲视频综合在线| 亚洲精品视频二区| 久久精品国产亚洲高清剧情介绍| a4yy欧美一区二区三区| 久久这里有精品视频| 欧美一站二站| 国产精品美女999| 国产精品国产三级国产a| 欧美激情久久久| 欧美日韩一区二区视频在线 | 欧美一区二区三区免费在线看| 亚洲人成高清| 久久综合亚洲社区| 另类春色校园亚洲| 国产一区二区久久| 亚洲视频综合在线| 亚洲伊人网站| 欧美日韩国产欧| 亚洲美女在线看| 99精品黄色片免费大全| 免费av成人在线| 亚洲电影一级黄| 亚洲毛片在线观看| 欧美好吊妞视频| 亚洲人成网站999久久久综合| 亚洲欧洲一区二区在线观看| 噜噜噜噜噜久久久久久91| 免费在线视频一区| 尤物九九久久国产精品的特点| 欧美专区在线播放| 久久精品盗摄| 黄页网站一区| 免费日韩成人| 亚洲精品韩国| 亚洲伊人一本大道中文字幕| 国产精品婷婷| 久久99在线观看| 欧美91精品| 亚洲免费观看| 欧美午夜精品久久久久久浪潮| 一本色道久久综合一区| 亚洲一区图片| 国产亚洲激情视频在线| 久久久国产精品亚洲一区| 欧美国产精品中文字幕| 99国产麻豆精品| 国产精品美女久久| 久久精品人人爽| 91久久精品网| 性做久久久久久久免费看| 韩日精品中文字幕| 欧美精品一区二区三区视频| 中文在线一区| 免费欧美日韩| 亚洲一区3d动漫同人无遮挡| 国产欧美91| 欧美激情91| 欧美影院成年免费版| 亚洲黄色影院| 久久久av网站| 99av国产精品欲麻豆| 国产欧美日韩视频一区二区| 快射av在线播放一区| 一区二区冒白浆视频| 久久免费99精品久久久久久| 日韩亚洲精品在线| 国产在线视频欧美| 欧美日韩欧美一区二区| 久久久久久久性| 亚洲天堂av高清| 亚洲高清免费在线| 久久精品视频在线| 一区二区三区偷拍| 亚洲高清免费| 国产日韩欧美另类| 欧美日韩岛国| 久久一区二区三区四区| 国产中文一区二区| 欧美日韩精品一本二本三本| 久久精品男女| 亚洲专区一区| 99国产精品| 亚洲第一页在线| 久久久亚洲影院你懂的| 亚洲综合色视频| 99精品国产一区二区青青牛奶| 伊人影院久久| 国产午夜精品全部视频播放| 欧美日韩精品伦理作品在线免费观看 |