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

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

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

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

    這里的alias后面的一大串是外部函數(shù)的名稱,而__MemCreate則是他對于NativeX的名稱。接下來我們就得在C++實(shí)現(xiàn)這個(gè)函數(shù)了:
  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 }

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

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

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

只能佩服啦。

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

我不是計(jì)算機(jī)專業(yè)科班出身,本科沒有這個(gè)課..........


  回復(fù)  更多評論
  
# re: 開始為Vczh Library++3.0的NativeX寫庫 2011-01-03 01:17 | 空明流轉(zhuǎn)
V5。火速去MSRA,然后我也跟去。  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久国产一区二区三区四区| 国产精品视频一区二区高潮| 一区二区三区 在线观看视| 欧美成人国产| 欧美福利电影在线观看| 国产精品手机在线| 国产精品日韩欧美综合| 国产精品视频| 狠狠色狠狠色综合日日五| 尤物yw午夜国产精品视频明星| 亚洲大胆人体在线| 一本大道久久a久久精二百| 一本色道久久综合亚洲精品高清 | 香蕉成人啪国产精品视频综合网| 亚洲欧美一区二区激情| 久久久久久一区二区| 欧美剧在线免费观看网站| 国产精品久在线观看| 亚洲成人资源| 亚洲欧美日韩国产精品 | 99riav久久精品riav| 性欧美xxxx视频在线观看| 欧美jizzhd精品欧美巨大免费| 日韩视频永久免费| 久久久久久久成人| 国产精品日韩欧美一区二区三区| 亚洲高清视频在线观看| 亚洲欧美www| 亚洲韩国一区二区三区| 99亚洲一区二区| 久久久亚洲国产天美传媒修理工| 亚洲黄色天堂| 欧美福利电影在线观看| 欧美日本精品一区二区三区| 国产欧美日本在线| 99亚洲一区二区| 欧美+亚洲+精品+三区| 亚洲一级一区| 欧美日韩精选| 亚洲精品影视| 麻豆免费精品视频| 欧美伊人久久| 国产精品爽黄69| 亚洲一卡二卡三卡四卡五卡| 亚洲成色777777在线观看影院| 亚洲女同同性videoxma| 欧美精品播放| 亚洲日本va在线观看| 久久久久国产精品一区二区| 一区二区三区四区精品| 欧美日韩国产综合一区二区| 亚洲国产欧美一区二区三区同亚洲| 欧美在线在线| 在线亚洲伦理| 欧美高清在线| 女仆av观看一区| 亚洲丶国产丶欧美一区二区三区| 久久久一二三| 久久精品人人爽| 狠狠色丁香婷综合久久| 久久精品日产第一区二区三区| 亚洲一品av免费观看| 国产精品久久久久av| 亚洲欧美日韩综合| 亚洲在线一区二区| 国产欧美一区二区三区久久| 午夜视频一区| 亚洲综合日韩在线| 国产亚洲欧美aaaa| 欧美大片18| 欧美精品午夜| 亚洲综合精品四区| 午夜精品福利视频| 狠狠色丁香久久婷婷综合_中| 久热成人在线视频| 免费观看在线综合色| 亚洲另类春色国产| 一区二区久久久久| 国产区二精品视| 欧美成人午夜免费视在线看片| 老牛嫩草一区二区三区日本| 日韩视频在线观看国产| 亚洲少妇自拍| 国产综合一区二区| 欧美国产日韩二区| 欧美日韩福利| 午夜亚洲激情| 美女性感视频久久久| 亚洲女人小视频在线观看| 欧美在线|欧美| 亚洲精品国产无天堂网2021| 一区二区免费在线视频| 久久国产精品电影| 亚洲日本成人女熟在线观看| 亚洲午夜一区| 亚洲精品一级| 欧美在线欧美在线| 一本色道**综合亚洲精品蜜桃冫| 亚洲免费网址| 日韩视频专区| 久久久久成人精品| 亚洲你懂的在线视频| 巨胸喷奶水www久久久免费动漫| 亚洲人成在线观看一区二区| 亚洲小说欧美另类婷婷| 亚洲日本乱码在线观看| 欧美一级淫片播放口| 在线综合亚洲欧美在线视频| 久久国产精品一区二区| 亚洲一区二区成人| 欧美高清在线观看| 欧美一区二区黄| 久久综合电影一区| 国产精品人人做人人爽人人添| 欧美成人午夜77777| 国产欧美日韩亚洲一区二区三区| 亚洲日本va午夜在线电影| 国产欧美日韩91| 99精品欧美一区二区三区| 亚洲黄色视屏| 久久天天狠狠| 久久久久久久久久久久久久一区| 国产精品v欧美精品v日韩精品 | 亚洲天堂av图片| 免费日韩av| 麻豆视频一区二区| 伊人久久综合| 久久国产精品72免费观看| 欧美一区亚洲一区| 欧美午夜精品理论片a级按摩| 亚洲国产精品嫩草影院| 亚洲国产91| 久久亚洲私人国产精品va| 久久久www成人免费无遮挡大片 | 国产精品日韩电影| 宅男精品导航| 亚洲一区二区三区精品动漫| 欧美日韩国产在线播放网站| 亚洲激情视频网站| 日韩视频永久免费| 欧美三级特黄| 亚洲一区二区三区四区中文| 欧美一二三区精品| 激情文学综合丁香| 久久亚洲精品网站| 亚洲福利视频三区| 国产精品99久久久久久www| 欧美日本中文| 这里只有精品视频在线| 午夜精品视频| 国产一区自拍视频| 久久精品一区二区| 亚洲福利免费| 亚洲一区在线观看免费观看电影高清| 欧美日韩中文精品| 亚洲欧美精品一区| 午夜日韩激情| 狠狠入ady亚洲精品经典电影| 亚洲欧美另类国产| 久久精品一本久久99精品| 激情成人综合| 欧美顶级少妇做爰| 在线亚洲自拍| 麻豆精品视频在线观看视频| 91久久在线视频| 欧美色区777第一页| 亚洲一区二区免费| 国产日产欧产精品推荐色| 久久久久久日产精品| 亚洲日本欧美天堂| 欧美一级成年大片在线观看| 加勒比av一区二区| 国产精品v日韩精品| 欧美专区第一页| 亚洲国产精品小视频| 亚洲永久免费| 欧美日韩一区二区国产| 亚洲精品久久久久久久久久久久| 在线中文字幕一区| 亚洲美女精品久久| 欧美成人资源网| 夜夜嗨av一区二区三区| 亚洲风情亚aⅴ在线发布| 麻豆精品视频在线观看| 91久久久久| 亚洲精品乱码| 国产精品福利在线观看| 亚洲美女福利视频网站| 亚洲美女av电影| 欧美日韩在线第一页| 亚洲欧美精品中文字幕在线| 亚洲人午夜精品免费| 在线 亚洲欧美在线综合一区| 一区二区三区久久久| 欧美阿v一级看视频| 亚洲欧美日本在线| 亚洲电影观看| 欧美在线播放高清精品| 亚洲先锋成人| 亚洲伦理在线免费看|