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

隨筆-341  評論-2670  文章-0  trackbacks-0
    由于Vczh Library++3.0的托管語言ManagedX被設計成編譯到本地語言NativeX,因此山寨一個mscorlib.dll是必不可少的。不過我的mscorlib.dll只包含最低限度的代碼。譬如說string,譬如說數組,譬如說函數類型等等這些本不能用托管語言自己來實現的類(C++是唯一的一個所有東西都可以用類庫來彌補的語言)。因此花費了數日,用ManagedX實現了它的聲明和一些代碼,然后external一些函數。最終,ManagedX寫的mscorlib會被編譯成NativeX,而external的幾個函數自然會用NativeX自己來寫。譬如說如何比較兩個string的大小,這個托管語言自己顯然是搞不定的。

    因此這里就比較麻煩了,需要做一些工程上的麻煩事情。首先,若干個ManagedX文件被編譯成一個單獨的NativeX文件,然后這個生成的NativeX文件跟另一個手寫的NativeX文件再一起被編譯成一個assembly。這就跟把C#編譯成C差不多。

    第一個版本的ManagedX還需要做出一點折衷,譬如說數組的維度不能超過10。這里的維度指的是a[,,,,,,,,,],而不是a[][][][][][][][][][]。譬如說函數類型的參數數量不能超過10(但是函數的參數數量卻可以,這里只針對函數類型)。主要是因為,為了讓ManagedX可以被編譯成NativeX,那么勢必不可能運行的時候才動態生成某個類(模板除外,因為我的NativeX==C+template)。因此一維、二維乃至十維的數組當然是10個不同的類(你可以使用一個二維的十維數組的數組去模擬一個十二維的數組,這毫無問題)。不過為了避免我真的將一批相似的類重復寫10次,我使用了一年多前開發的Fpmacro來做。Fpmacro是一個語法不同的類似C語言宏的擴展,但是沒有C語言的宏的所有陷阱,而且其實是一門函數是語言,帶有類似lambda表達式的東西,每一個函數都被設計成一個返回字符串的函數,參數可以是數組、字符串或者另一個函數。而且語法經過了優化,完全沒有多余的東西。這里給一個例子,譬如說聲明10個Array的Fpmacro代碼:
  1 $$include:Common.fpm
  2 
  3 $$define $DIMENTION_FIELD_NAME($element) dimSize$element
  4 $$define $DIMENTION_PARAMETER_NAME($element) _$element
  5 $$define $DIMENTION_PARAMETER_DEFINITION($element) int $DIMENTION_PARAMETER_NAME($element)
  6 $$define $DIMENTION_PARAMETER_NAME_IN_ARRAY($element) indices[$element]
  7 
  8 $$define $DIMENTION_FIELD($element) $$begin
  9         private int $DIMENTION_FIELD_NAME($element);
 10 $( )
 11 $$end
 12 
 13 $$define $DIMENTION_FIELD_SETTER($element) $$begin
 14             $DIMENTION_FIELD_NAME($element) = $DIMENTION_PARAMETER_NAME($element);
 15 $( )
 16 $$end
 17 
 18 $$define $DIMENTION_SIZE_CASE($element) $$begin
 19                 case $element:
 20                     return $DIMENTION_FIELD_NAME($element);
 21 $( )
 22 $$end
 23 
 24 $$define $DIMENTION_CHECK($element) $$begin
 25             if($DIMENTION_PARAMETER_NAME($element)<0 || $DIMENTION_PARAMETER_NAME($element)>=$DIMENTION_FIELD_NAME($element))
 26                 throw new ArgumentOutOfRangeException($(")$DIMENTION_PARAMETER_NAME($element)$("));
 27 $( )
 28 $$end
 29 
 30 $$define $DIMENTION_SUMMERS($elements) $$begin
 31   $$define $DIMENTION_SUMMER($index) $$begin
 32             sum*=$DIMENTION_FIELD_NAME($sub($sub($elements,1),$index));
 33             index+=sum*$DIMENTION_PARAMETER_NAME($sub($sub($elements,2),$index));
 34 $( )
 35   $$end
 36 $loop($sub($elements,1),0,$DIMENTION_SUMMER)
 37 $$end
 38 
 39 $$define $ARRAY_IMPLEMENTATION($elements) $$begin
 40 $( )
 41     generic<inout T>
 42     public sealed class Array$elements : Array
 43     {
 44 $( )
 45         public constructor($loopsep($elements,0,$DIMENTION_PARAMETER_DEFINITION,$(,) ), Array<T> src=nullbool copy=true)
 46         {
 47 $loop($elements,0,$DIMENTION_FIELD_SETTER)
 48             Initialize(this.Length, src, copy);
 49         }
 50 $( )
 51 $loop($elements,0,$DIMENTION_FIELD)
 52         public override int GetDimCount()
 53         {
 54             return $elements;
 55         }
 56 $( )
 57         public override int GetDimSize(int dim)
 58         {
 59             switch(dim)
 60             {
 61 $loop($elements,0,$DIMENTION_SIZE_CASE)
 62                 default:
 63                     throw new ArgumentOutOfRangeException("dim");
 64             }
 65         }
 66 $( )
 67         public override int Length
 68         {
 69             get
 70             {
 71                 return $loopsep($elements,0,$DIMENTION_FIELD_NAME,$(*));
 72             }
 73         }
 74 $( )
 75         public override int GetStartIndexFromIndices(params int[] indices)
 76         {
 77             if(indices.Length!=$elements)
 78             {
 79                 throw new ArgumentOutOfRangeException("indices");
 80             }
 81             return GetStartIndex[$loopsep($elements,0,$DIMENTION_PARAMETER_NAME_IN_ARRAY,$(,))];
 82         }
 83 $( )
 84         public int GetStartIndex($loopsep($elements,0,$DIMENTION_PARAMETER_DEFINITION,$(,) ))
 85         {
 86 $loop($elements,0,$DIMENTION_CHECK)
 87             int index=$DIMENTION_PARAMETER_NAME($sub($elements,1));
 88             int sum=1;
 89             $DIMENTION_SUMMERS($elements)
 90             return index;
 91         }
 92 $( )
 93         public override T GetElement(params int[] indices)
 94         {
 95             return Get(GetStartIndexFromIndices(indices));
 96         }
 97 $( )
 98         public override void SetElement(T value, params int[] indices)
 99         {
100             Set(value, GetStartIndexFromIndices(indices));
101         }
102 $( )
103         public T operator get[]($loopsep($elements,0,$DIMENTION_PARAMETER_DEFINITION,$(,) ))
104         {
105             return Get($loopsep($elements,0,$DIMENTION_PARAMETER_NAME,$(,) ));
106         }
107 $( )
108         public T operator set[](T value, $loopsep($elements,0,$DIMENTION_PARAMETER_DEFINITION,$(,) ))
109         {
110             return Set(value, $loopsep($elements,0,$DIMENTION_PARAMETER_NAME,$(,) ));
111         }
112 $( )
113     }
114 $$end
115 
116 namespace System
117 {
118     generic<inout T>
119     public abstract class Array : IEnumerable<T>
120     {
121         protected intptr gchandle=0;
122         protected external void Initialize(int size, Array<T> src, bool copy);
123         public external T Get(int position);
124         public external void Set(T value, int position);
125 $( )
126         public external void CopyTo(intptr pointer, int fromStart, int length);
127         public external void CopyTo(Array<T> array, int fromStart, int length, int toStart);
128 $( )
129         public abstract int GetDimCount();
130         public abstract int GetDimSize(int dim);
131         public abstract int Length{get;}
132         public abstract int GetStartIndexFromIndices(params int[] indices);
133         public abstract T GetElement(params int[] indices);
134         public abstract void SetElement(T value, params int[] indices);
135 $( )
136         private class Enumerator : IEnumerator
137         {
138             private Array<T> array;
139             private int index;
140 $( )
141             public constructor(Array<T> array)
142             {
143                 this.array=array;
144                 this.index=-1;
145             }
146 $( )
147             public bool MoveNext()
148             {
149                 if(index==array.Length-1)
150                 {
151                     return false;
152                 }
153                 else
154                 {
155                     index++;
156                     return true;
157                 }
158             }
159 $( )
160             public T Current
161             {
162                 get
163                 {
164                     return array.Get(index);
165                 }
166             }
167 $( )
168             object IEnumerator::Current
169             {
170                 get
171                 {
172                     return array.Get(index);
173                 }
174             }
175         }
176 $( )
177         IEnumerator<T> IEnumerable<T>::GetEnumerator()
178         {
179             return new Enumerator(this);
180         }
181 $( )
182         IEnumerator IEnumerable::GetEnumerator()
183         {
184             return new Enumerator(this);
185         }
186 $( )
187     }
188 $( )
189     generic<inout T>
190     public class ReadonlyArray
191     {
192         private T[] items;
193 $( )
194         public constructor(T[] items)
195         {
196             this.items=items;
197         }
198 $( )
199         public int Length
200         {
201             get
202             {
203                 return this.items.Length;
204             }
205         }
206 $( )
207         public T operator get[](int index)
208         {
209             return this.items[index];
210         }
211     }
212 $loop($MAX_ELEMENT_COUNT(),1,$ARRAY_IMPLEMENTATION)
213 }

    會被擴展成(太長cppblog編輯器性能太爛導致響應速度無法忍受,下載代碼并打開UnitTest\Binary\ScriptCoreLibrary\System.CoreManaged\Array.txt自行閱讀)

    山寨mscorlib.dll的ManagedX部分基本完成,剩下的十幾個函數寫的NativeX則等到編譯成NativeX的部分完成之后再寫。到了這里,一共實現了:
    Array<T>
    Array1<T> .. Array10<T>
    Attribute
    AttributeUsageAttribute
    AutoGeneratedAttribute
    NotInstantiableAttribute
    StructBaseAttribute
    DefaultValueAttribute
    VariadicParameterAttribute
    EnumItemBase
    EnumItemManager
    Exception
    IndexOutOfRangeException
    ArgumentOutOfRangeException
    WrongFormatException
    TypeConversionException
    NotImplementedException
    Delegate
    DelegateTarget
    MethodDelegate
    BroadcastDelegate
    Function<R> .. Function<R, T0 .. T9>
    Procedure, Procedure<T0> .. Procedure<T0 .. T9>
    Event, Event<T0> .. Event<T0 .. T9>
    IEnumerator
    IEnumerable
    IEnumerator<T>
    IEnumerable<T>
    SInt8 .. SInt64
    UInt8 .. UInt64
    Single, Double, Char, Bool, Void
    Object
    String
    Type

    從明天開始就要做ManagedX的語義分析器了。接下來的路還很長。語義分析結束之后,要把ManagedX展開變成一份更長但是包含的東西更少的ManagedX(譬如沒有lambda expression,因為被重寫成了一個內部類),最后編譯成NativeX。
posted on 2011-06-26 09:15 陳梓瀚(vczh) 閱讀(4025) 評論(17)  編輯 收藏 引用 所屬分類: VL++3.0開發紀事

評論:
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 16:47 | 空明流轉
樓主威武!(別刪我留言。。。)  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 17:42 | clayui
才知道樓主是這么一個牛人,也非常感謝樓主能去clayui踢館,所以,我今天,不是來踢館的:)我只有1個問題,我想用樓主的東西,不知道效率如何,跟adobe的AVM2比起來怎么樣?  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:04 | 戰魂小筑
為啥不用Live Writer呢,編輯起來多方便  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:18 | lwch
完全看不懂這是神馬玩意...  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:24 | 空明流轉
@clayui
完全不是一個性質的玩意兒。
它的那個東西更像是C#。一門Pure JIT的語言。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:27 | 陳梓瀚(vczh)
@lwch
你只要想象一下string是如何寫出來的,就知道了……為什么M¥要提供C++/CLI,基本上就是為了這個。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:29 | 陳梓瀚(vczh)
@clayui
嗯,我還是在山寨C#。不過距離能用還很遠……倒是再主頁上置頂了一個freescript,是一門動態語言,你可以試試。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 18:33 | Error
雖然現在還不知道樓主在說什么,但是依然覺得樓主V6、樓主牛鞭,,,  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 19:36 | clayui
@陳梓瀚(vczh)
試試freescript,這是一個現實的問題,而現實是比較殘酷的,那么freescript與V8相比有什么優點?我的意思是如果別人用V8,而我用freescript,那么我是否比別人更有優勢?  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 19:38 | clayui
@空明流轉
我的確不是很懂這個,所以可能會說出讓你笑掉大牙的話,呵呵,那么,我看介紹說的是“通用多語言腳本平臺”,AVM2是一個腳本引擎,這2者究竟有何區別呢?望賜教。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 19:47 | 陳梓瀚(vczh)
@clayui
這世界上任何一門動態語言都不會比其他動態語言更有優勢——如果你拿他當腳本用的話。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 19:51 | 陳梓瀚(vczh)
@clayui
這個嘛,我的初始目的是想做一個公共的后端,讓以后拿新的語法做實驗會變得非常容易,并且把結構拆散有利于別人學習編譯原理,最后順便實現把動態語言編譯成本低代碼的夢想。想要做到最后一步根據現在的速度,估計還得有幾年的時間。

而一個腳本引擎,就是做來給你用的,目的很單純。

這里的區別就是,倘若我在后面那幾年把我想做的優化都做完的話,那以后想支持什么新語言(眾口難調啊),都做到這個后端上去,那就變成一個parser的工作,而不是一個腳本引擎整個的工作了。譬如說javascript,譬如說python,譬如說ruby,雖然語法看上去差很遠,但其實都沒什么區別,不需要每一門都單獨重做一次  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 20:14 | clayui
@陳梓瀚(vczh)
基本上明白了,呵呵,謝謝,我想我要的應該就是你優化后的東西吧,希望幾年后我還能用上你的腳本語言。根據我的理解,你應該是想要實現一個統一的parser引擎?如果這個能做好,說不定可以成為所有腳本語言進行parser的一個工業標準?恩,假如是這樣,那么,真的很有意思,呵呵。  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-26 21:36 | 陳梓瀚(vczh)
@clayui
不是統一的parser,parser沒什么好統一的,只是another CLR/llvm/其他什么的罷了……  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-06-27 06:15 | 千暮(zblc)
- -bnr 兩個美元符號真惡心  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-07-06 01:11 | 蔣楓亦
寫編譯器的工作量實在很大,各種考慮,這還是在用了工具的情況下,要是沒有ANTLR ,LLVM等等這些工具的話,估計我們公司的編譯器開發完成要猴年馬月了。即時這樣天天小問題還不斷,目前在做怎么支持直接到android平臺運行,android這個平臺還真是復雜,關sdk工具命令就N多。樓主加油!  回復  更多評論
  
# re: Vczh Library++3.0之山寨mscorlib.dll 2011-07-08 08:04 | 陳梓瀚(vczh)
@蔣楓亦
嗯,我在嘗試山寨一個后端,ANTLR那樣子的前端我已經搞定了。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区精品| 亚洲国产cao| 在线日本高清免费不卡| 国产精品国产福利国产秒拍| 美乳少妇欧美精品| 欧美不卡高清| 欧美视频日韩视频在线观看| 国产精品av一区二区| 国产精品免费区二区三区观看| 国产精品久久久久久一区二区三区 | 日韩午夜剧场| 中国日韩欧美久久久久久久久| 亚洲在线电影| 久久久久久久久久久久久女国产乱| 久久人人精品| 欧美精品在线观看| 国产欧美日韩精品一区| 蜜臀av一级做a爰片久久| 在线亚洲激情| 久久精品视频一| 欧美电影专区| 夜夜嗨av一区二区三区网站四季av | 一本一道久久综合狠狠老精东影业| 亚洲男人的天堂在线aⅴ视频| 久久久久久有精品国产| 亚洲国产成人久久综合一区| 一级日韩一区在线观看| 久久久www| 国产精品久久99| 亚洲欧洲精品一区二区三区 | 久久久久久久激情视频| 亚洲精品国产系列| 久久精品国产99国产精品澳门| 欧美成人精品激情在线观看| 国产精品夜色7777狼人| 亚洲乱码一区二区| 久久综合网hezyo| 午夜国产欧美理论在线播放| 欧美激情亚洲国产| 在线观看欧美日韩| 久久精品国产69国产精品亚洲| 亚洲精品黄色| 免费日韩一区二区| 韩国免费一区| 欧美在线综合| 亚洲图片欧美午夜| 欧美图区在线视频| 9人人澡人人爽人人精品| 奶水喷射视频一区| 久久青草久久| 黄色另类av| 久久久人成影片一区二区三区观看| 中文av字幕一区| 欧美日韩一区免费| 一区二区高清在线观看| 亚洲黄页视频免费观看| 巨胸喷奶水www久久久免费动漫| 国产在线不卡精品| 欧美在线亚洲| 欧美一区综合| 一区二区在线观看av| 久久亚洲综合色一区二区三区| 欧美一二三区精品| 国产一区视频网站| 久久一区二区三区四区| 久久久久免费视频| 亚洲激情第一区| 亚洲精品久久| 国产精品h在线观看| 午夜精品一区二区三区在线播放| 亚洲一区二区精品视频| 欧美精品日韩一区| 欧美 日韩 国产在线| 亚洲大片av| 亚洲国产精品久久久久婷婷884 | 亚洲人成亚洲人成在线观看| 欧美国产日韩一区二区在线观看 | 久久精品在线免费观看| 久久精品理论片| 最新日韩中文字幕| 99视频热这里只有精品免费| 国产精品日韩欧美一区二区三区 | 国产精品免费一区二区三区在线观看 | 老色鬼精品视频在线观看播放| 久久视频在线视频| 亚洲精品之草原avav久久| 99国产精品久久久久老师| 国产精品你懂的在线欣赏| 久久久久久夜| 欧美极品色图| 久久精品国产久精国产一老狼| 久久网站热最新地址| 国产精品99久久久久久有的能看| 亚洲欧美不卡| 亚洲精品自在在线观看| 亚洲综合色自拍一区| 亚洲黄色有码视频| 亚洲欧美中文日韩v在线观看| 亚洲日本成人| 性色av一区二区怡红| 夜夜嗨av色综合久久久综合网| 香港成人在线视频| 在线综合亚洲欧美在线视频| 久久成人免费电影| 亚洲一区二区三| 免费在线播放第一区高清av| 欧美亚洲免费高清在线观看| 欧美成人免费大片| 久久久亚洲高清| 国产精品日韩高清| 亚洲精品在线免费观看视频| 尤物精品在线| 久久超碰97人人做人人爱| 在线视频你懂得一区 | 黄网站免费久久| 亚洲一区二区影院| 一区二区三区视频在线| 免费亚洲一区| 麻豆成人av| 国产婷婷成人久久av免费高清| 最新日韩中文字幕| 欧美一区在线看| 欧美日韩三级电影在线| 亚洲国产综合在线| 亚洲国产精品久久久久婷婷老年| 欧美在线观看视频在线| 欧美中文字幕在线视频| 国产精品久久二区二区| 一本一本久久a久久精品综合麻豆| 91久久午夜| 欧美成人四级电影| 欧美高清视频在线| 亚洲黄色天堂| 欧美风情在线观看| 亚洲福利专区| 日韩亚洲在线观看| 欧美啪啪成人vr| 亚洲高清视频一区| 99国产精品久久久久久久久久| 欧美成人高清| 亚洲国产精品一区二区久| 亚洲三级电影在线观看| 欧美激情视频一区二区三区在线播放| 亚洲国产欧美一区二区三区久久| 亚洲伦理在线免费看| 欧美日韩mp4| 亚洲一区二区三区精品在线观看| 亚洲欧美日韩精品久久亚洲区 | 久久久综合精品| 免费久久99精品国产| 在线日韩一区二区| 欧美激情女人20p| 亚洲天堂av在线免费| 欧美亚洲免费高清在线观看| 国产丝袜美腿一区二区三区| 久久国产精品亚洲va麻豆| 欧美a级片网站| 宅男精品视频| 国产一区二区三区久久久| 久久久久一区二区三区| 最近看过的日韩成人| 亚洲影院色无极综合| 国产一区二区三区四区老人| 免费欧美在线| 亚洲综合色丁香婷婷六月图片| 久久一区二区三区av| 亚洲乱码国产乱码精品精| 国产精品欧美日韩| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精品在线二区| 久久久久免费视频| 一区二区三区|亚洲午夜| 国产欧美日韩精品一区| 女女同性精品视频| 亚洲直播在线一区| 亚洲电影免费观看高清| 亚洲欧美在线网| 最新中文字幕亚洲| 国产欧美日韩在线视频| 欧美精品18+| 久久国产精品久久久久久久久久| 亚洲精品免费一二三区| 久久久久久有精品国产| 欧美日韩中文字幕在线视频| 久久精品道一区二区三区| 99re热精品| 欧美国产极速在线| 久久久www成人免费精品| 亚洲午夜国产成人av电影男同| 亚洲欧美电影院| 中文国产成人精品久久一| 国内成+人亚洲+欧美+综合在线| 欧美精品一区三区在线观看| 久久精品av麻豆的观看方式 | 国产精品99久久久久久有的能看 | 欧美在线免费观看视频| 亚洲一二三区精品| 日韩视频―中文字幕| 亚洲成色最大综合在线| 巨乳诱惑日韩免费av|