Time of Update: 2018-12-08
眾所周知,Reflection.Emit是非常強大的工具,可以在運行時動態產生各種程式集、類型和方法的IL代碼,幾乎無所不能。原先我也是這樣認為的,但是看了某個人的部落格之後我發現想要用Reflection.Emit做一些特殊的事情還是很需要技巧性的。假設你還沒有看過那個人的部落格(暫時先不公開……)可以嘗試一下這個問題。下面的代碼可以用vbc.exe正確編譯(當然等價C#程式也可以經實驗C#編譯器無法處理該邏輯,各位參照VB的行為吧)。。。Class A Implements
Time of Update: 2018-12-08
上回我們說到用Regex來表示詞法分析中的單詞規則。Regex的規則很容易理解,但是Regex並不能直接用來解析字串,我們還要引入一種適合轉化為電腦程式的模型。今天我們引入的這種模型就叫做有窮自動機(finite automation,FA),有時也叫有窮狀態機器(finite state
Time of Update: 2018-12-08
在上一篇部落格中我提出了一個問題:如何用.NET的Reflection.Emit產生等價於下面VB代碼的三個類型:Class A Implements B.IEnd ClassClass B Inherits A Interface I End InterfaceEnd
Time of Update: 2018-12-08
多謝各位的一直以來的支援,我們今天總算走到了實踐的一步。今天我們要用VBF.Compilers的詞法分析庫來開發一個小型語言——miniSharp的詞法分析。miniSharp是C#語言的子集,miniSharp程式的語義就等於把它當做C#的語義。但是miniSharp只支援很少的語言特性,以降低製作編譯器的難度。簡單來說miniSharp有如下特徵:只有一個源檔案,不能引用其他dll(甚至不能引用.NET的類庫)。 沒有命名空間。
Time of Update: 2018-12-08
文章目錄 範例程式碼介紹裝置管理選擇要用的顯卡運行計算著色器DirectCompute中的資源計算著色器(CS)HLSL編程 譯者註:DirectX一直是Windows形和遊戲開發的核心技術。DirectX提供了一種在顯卡上啟動並執行程式——著色器(Shader)。在DirectX 11之前,著色器是與具體的渲染步驟綁定的,例如像素著色器,頂點著色器等等。而從DirectX11開始,DirectX增加了一種計算著色器(Compute
Time of Update: 2018-12-08
SuperSocket內建了支援Flash和Silverlight的用戶端的Socket策略伺服器,其實現代碼在SuperSocket.Facility.dll這個assembly之中。所以要啟用策略伺服器,首先要保證SuperSocket.Facility.dll存在於SuperSocket運行目錄,然後在設定檔中增加相關的節點即可。Flash策略伺服器<socketServer> <servers> <server
Time of Update: 2018-12-08
上回我們說到文法分析使用的上下文無關語言,以及描述上下文無關文法的產生式、產生式推導和文法分析樹等概念。今天我們就來討論實際編寫文法分析器的方法。今天介紹的這種方法叫做遞迴下降(recursive
Time of Update: 2018-12-08
好久沒寫部落格了,一來是自己懶,二來是最近一段時間都沒有做什麼自己認為可以分享的東西。這幾天剛好重拾了一個一直打算做但沒做的編譯器類庫,算是積累了一點小小的經驗吧。本來我已經發到了Github上,也在微博上零星介紹了一些,但是我最終意識到,如果不寫一個詳細的文檔,別人就不能容易地學習、瞭解和使用它。甚至於我自己也可能會把這次研究出來的小小成果給忘了。所以,必須下決心動一動筆頭,也算是對老長時間不些部落格的彌補吧。本篇是系列的第零篇,我首先要介紹一下些這個系列的目的。從很久以來,編譯器的技術就是電
Time of Update: 2018-12-08
前幾天技術大牛Vczh同學開發了一個函數映像繪製程式,可以畫出方程f(x,y)=0的映像。他的原理是用映像上每一點的座標帶入函數f得到針對x和y的兩個方程,再用牛頓迭代法求解得到一組點集,然後畫到映像上。用他的程式可以畫出各種各樣令人驚歎的方程圖形。但是他的程式非常慢,因為對每一個點座標都用牛頓迭代法求解是一項很費時的任務,即使採用了Parallel.For,CPU算起來也很吃力。我研究了他的程式之後覺得可以用擅長並行計算的顯卡來加速迭代法求解的過程。用OpenCL來完成這個任務再合適不過了。
Time of Update: 2018-12-08
SuperSocket支援同步模式(Sync)下的傳輸層加密(TLS/SSL)。首先,你需要準備好用於加密的認證檔案(帶私密金鑰)。用於測試的認證可由SuperSocket的CertificateCreator來產生(http://supersocket.codeplex.com/releases/view/59311), 產生之後(*.pfx)匯入到測試伺服器的可信任認證目錄中。生產環境的認證需要向憑證授權單位提交申請之後才能獲得認證檔案,獲得認證之後到電腦的Cert
Time of Update: 2018-12-08
上回我們說到手寫遞迴下降文法分析器。手寫遞迴下降的方式是目前很多編譯器採用的方式,如果你想寫一個商業品質的編譯器,這是首選的方法。但是,一個完善的遞迴下降解析器需要的代碼量也不少,如果要進行錯誤報表、錯誤恢複等等那代碼量就更大了。作為懶人,我們有時想要一些小型語言的解析器,最好寫起來像直接寫文法的產生式一樣,最好連錯誤報表和錯誤恢複也一併自動解決,可能嗎?在過去很長一段時間,人們採用的方法是使用解析器產生器(parser
Time of Update: 2018-12-08
本系列的第一篇,我想概述一下編譯器的構造,同時協助大家瞭解編譯器中各個組成部分的用途。想必大家看別的編譯原理書籍,大都在第一章或者序言之類的地方,將編譯器分成許多模組,然後每一個模組負責編譯的特定階段,最後串起來組成完整的編譯器。比如下面這張圖就是虎書(Modern Compiler by Andrew W.
Time of Update: 2018-12-08
WebSocket4Net的作者發布了該軟體的0.5版本,此版本的WebSocket4Net修複了一些小的缺陷,還增加了一些新的設定選項。修複了wss的預設連接埠的缺陷改進了JsonWebSocket為Silverlight版本新增了支援設這用戶端存取原則協議修複了Silverlight版本握手的缺陷修複了握手請求中"Host"欄位在請求連接埠不為預設連接埠是不包含連接埠號碼的缺陷新增了握手時傳入"Origin"參數的支援新增了對伺服器端的Ping命令的相應修複了一個在資料發送中的缺陷修複了一個
Time of Update: 2018-12-08
從今天這一篇起,我們就來正式揭開編譯器的奧秘。首先我們接觸到的模組是詞法分析器,也叫詞法掃描器,代碼裡我常常叫它Scanner。昨天我稍微解釋了一下為什麼需要將詞法分析單獨分離出來,今天來回顧一下這個問題。請看下面這段C#代碼: string str = "Hello World"; 即使沒有文法高亮,這段代碼也可以很明顯地分成好幾部分。首先是關鍵字string,之後是變數名str,然後是等號=,接下來是一個字串字面常量”Hello
Time of Update: 2018-12-08
SuperWebSocket 0.5 發布了,作者在該版本中做了一些比較重要的改動,使得SuperWebSocket協議相容性得到了大大提升,API也變得更加友好。包含在此版本中的改動:新增關閉串連握手隊列檢查功能改進JSON子協議實現新增從伺服器端向用戶端發送Ping的支援修複了一個發送不帶文字描述的關閉握手的缺陷重構代碼以改進協議相容性修複了一個在Mono上無法載入子協議配置的缺陷改進BasicSubProtocol新增JsonWebSocketSession支援:
Time of Update: 2018-12-08
SuperSocket 1.4 SP1修複了幾個在1.4的第一個穩定版本中存在的幾個bug,還增加了幾個實用的小功能: 修複了發送大資料量資料到用戶端無法完整發送的缺陷修複了策略伺服器中擷取策略檔案路徑在某些情況下不正確的缺陷給類ArraySegementList增加了方法TrimEnd(int trimSize)給Socket會話增加了新方法SendResponse(byte[] data, int offset, int length);改進UDP
Time of Update: 2018-12-08
上回我們已經學習了文法分析第一階段——詞法分析的原理和工具,介紹了Regex、正則語言和DFA等工具。今次我們要開始涉及編譯器前端最重要的階段——文法分析。簡單而言,這一步就要完整地分析整個程式設計語言的文法結構。上回說到詞法分析的結果是將輸入的字串分解成一個個的單詞流,也就是諸如關鍵字、標識符這樣有特定意義的單詞。一種完整的程式設計語言,必須在此基礎上定義出各種聲明、語句和運算式的文法規則。觀察我們所熟悉的程式設計語言,其文法大都有某種遞迴的性質。例如四則運算與括弧的運算式,其每個運算子的兩邊
Time of Update: 2018-12-08
為便於管理,SuperSocket的測試版發布將不再單獨發博文,而是直接以最新在前的順序匯總在此博文之中。SuperSocket/SuperWebSocket/WebSocket4Net QQ 技術交流群: 135969383SuperSocket 1.5.3 發布 2013-05-28http://www.oschina.net/news/40884/supersocket-1-5-3 SuperSocket 1.6 beta 1
Time of Update: 2018-12-08
SuperWebSocket在發布了8個drop版本之後,SuperWebSocket 0.1誕生了, 停止發布drop轉而發布正式的測試版的原因是SuperWebSocket最近相容了rfc6455 (通過IETF獲批准的標準協議),而以前的drop版本只支援草案版本的websocket協議。這樣的改進對代碼的改動很小,但對RFC6455這樣一個標準協議的相容也是具有標誌意義的。SuperWebSocket 0.1
Time of Update: 2018-12-08
A Telnet ExampleImplement your AppServer and AppSessionStart SuperSocket by ConfigurationSuperSocket Basic ConfigurationBuilt-in command line protocolImplement your own communication protocol with IRequestInfo, IReceiveFilter and etcThe Built-in