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

隨筆-341  評論-2670  文章-0  trackbacks-0
    在寫這篇文章的時候,我正在嘗試自己開發一個我自己認為能拿出去見人的IDE。當然此時此刻我只開展了一點點工作。所以這篇文章沒有什么最終的指導性,而是在記錄我開發IDE的思考過程。當然我覺得之前寫了那么多東西除了開了源之后介紹了我的作品讓大家可以更好的理解并學習以外,其實也沒有什么大的效果(除了幾篇置頂的教程我個人覺得還是有點效果的……)。因此我嘗試做一下改變,把我的思考過程描述出來。一方面我自己可以從一個更高的高度來審視我自己,第二個就是如果你們想從我這里拿走什么,或者想教我什么,請自便哈。

    其實以前并不是沒有開發過IDE,只是那個IDE除了語法高亮以外什么都沒有,因此其實并沒有什么大的用處。個人認為IDE要提供給你的功能有三點:智能提示、集成調試、輔助部署。當然在我眼中最厲害的IDE當屬VisualStudio了,各種功能真是非常人性化,而且也跟我的觀點比較一致:我只是想開發個編譯器然后開發個makefile系統讓別人可以方便一點用我的編譯器而已,為什么我一定要用makefile來組織我的編譯器源代碼啊,一點都不方便(噗

    是個程序員都是這么想的哈。

    IDE還是好東西。前幾天我在vlpp.codeplex.com上面checkin了一份我開發的語法高亮編輯器的雛形(下載后打開Candidate\CodeBoxControl\CodeBoxControl.sln),完全用C#寫。我的Demo也是用的C#,外掛了一個可以分析C#的關鍵字、字符串和注釋的代碼著色器,在我的機器上(雖然我覺得比較強大,不過我的程序也是單核的,因此其實也只有2.7G的頻率)著色一個將近10萬行的程序只需要半秒鐘。其實大家大可不必覺得C#很慢,其實是很快的,慢的是你的內心。

    當然我也做了一點優化,全文著色要半秒,不過其實你在編輯的時候是不需要總是全文著色的。所以我的著色器接口做了一點小限制:
    1、你必須用狀態及實現,而且狀態及的狀態只能用int類型來表達。
    2、著色必須是上下文無關的。

    對于2可能比較難理解。首先C#那個可以檢查出一個ID是不是一個類型然后變色其實根本不是著色器的任務(根據我的設計,你可以在另一個地方臨時更改顏色,也能實現)。其次對于一個給定的任意字符串前綴,其著色效果不能跟前綴之后的任何字符有關系。

    因此我只需要記下每一行的末尾著色器當時的狀態,就可以從任意位置開始到任意位置結束進行部分著色了。因此這里就有很多的優化空間。有了這些優化之后,我用我的Demo編輯一個將近10萬行的C#文件的時候,那個運行在UI線程里面的著色算法絲毫沒有讓我覺得有延遲,只有在少數情況下(瞬間貼了好幾萬行代碼,然后按ctrl+end跳到全文最后,我不得不對你貼進去的東西立刻著色)才會讓你感覺到有小于半秒鐘的延遲。所以我覺得這個設計已經可以達到我的要求了,因為我自己寫的代碼一般單個文件都沒有超過1萬行,所以偶爾給我一個小于0.05秒的延遲其實也是無所謂的……

    為什么可以進行優化呢。你可以想一下,如果我正在對某一行進行編輯,而且這一行后面的代碼都已經被著色過了,那么如果你的改動都沒有讓行末尾的著色器狀態發生變化,那么這一行后面的所有字符都不需要更改他的著色,因此我就可以只對你當前編輯的一行進行著色(唯一修改的其實也就只有那種多行注釋,你一般也不會寫很多這種多行注釋的,都用的單行……)。一百來個字符的著色基本上可以忽略,因此無論你的文件有多大,其實著色速度是跟你平均每行的長度有關系,只有在極少數情況下才會跟你的行數有關系。這個時候你可以看到著色器兩個限制的強大威力了吧。

    那么,當我們對一行代碼進行斷點的時候,代碼顏色的修改是如何做的呢?為了這個東西去影響著色器那個強到可以忽略的效率實屬殺雞取卵,所以答案就是:外掛一個控制面板接口,讓你可以在顯示某一行的時候臨時修改那一行每個字符顏色。聽起來好像很影響效率,不過我們要相信,一行代碼也就只有那么幾十到一百來個字符,一屏幕的代碼最多也就一兩千個字符。任何語言無論多慢,對一個一兩千那么長的數組賦值,也是奇快無比的,何況是C#這么快的語言……

    因此我們剩下的問題就是如何實現一個可以修改文字顏色的普通文本框了哈。經過我的3此研究,結論就是,不要用RichTextBox,你自己自繪從頭寫一個。第二個結論,凡是GUI最好都別用C++,無論GUI類庫多么好,一個沒有內存管理器就足以讓你覺得很麻煩了,當然對于編譯器本身我還是推薦C++的,因為編譯器雖然算法復雜,不過結構簡單,所有的內存分配都是可以預測的,因此delete起來非常有信心。

    最近一兩個星期都在糾結如何實現一個簡單的上下文有關的智能提示功能(至少按個"."會有個列表什么的)。這個明天再寫了,今天只有一點點頭緒,還沒完全成型。
posted on 2010-09-15 08:19 陳梓瀚(vczh) 閱讀(27361) 評論(28)  編輯 收藏 引用 所屬分類: 開發自己的IDE

評論:
# re: 開發自己的IDE(一)[未登錄] 2010-09-15 17:28 | mad
期待啊 呵呵  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 17:58 | Zxjay
思考過程描述出來
不錯  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 18:33 | 叫我老王吧
來支持一下樓主   回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 18:58 | pengwang
參考下龍書,著色什么的就是個語法分析,難的應該不在這個地方。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 19:17 | 陳梓瀚(vczh)
@pengwang
嗯,根據文中的描述,著色器其實是IDE里面最容易做的一部分。目前覺得難的是intellisense,你需要對一個編輯中的錯誤的程序進行盡可能正確的快速的語法分析,可能需要很多龍書里面沒提到的技巧。所以在這個角度上龍書其實沒什么用。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 22:30 | 空明流轉
師祖,您太謙虛了。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 22:30 | 空明流轉
@pengwang
樓主的語法分析就不用教導了。。。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 23:27 | 陳梓瀚(vczh)
@空明流轉
已經有半年多沒有這么高難度的問題出現了……  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-15 23:30 | 小小
最近在看YACC和lex
不知道vczh 和 yacc lex 比有什么優勢?
從四則運算那例子中,我感覺不到太大的優勢  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 00:27 | 陳梓瀚(vczh)
@小小
優勢就是我是一個C++類庫所以你可以充分利用IDE的各種高級功能去調試你的人類可讀的代碼。yacc不行的,不僅難以調試,而且生成的代碼還沒法看。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 03:05 | ....
就是在扯淡  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 03:58 | megax
不用開發了,直接用我的吧,呵呵  回復  更多評論
  
# re: 開發自己的IDE(一)[未登錄] 2010-09-16 06:20 | foxtail
你的還沒放出來挖@megax
  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 06:24 | 陳昱(CY)
期待+圍觀  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 09:48 | 溪流
膜拜+期待  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 10:02 | 陳梓瀚(vczh)
@溪流
在cppblog上也混了兩年多了,我從現在開始會假設所有的讀者都不是菜鳥。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 10:03 | 陳梓瀚(vczh)
@megax
我喜歡C#開發東西除了編譯器以外的所有程序哈,你的就不合適了……  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 18:50 | 溪流
@陳梓瀚(vczh)
這么說以前是假設讀者中有相當一部分菜鳥的咯?當讀者是菜鳥好啊,字里行間會散發出一種無形的霸氣,讀的時候讓人覺得是在看一個有價值的東西,是別人深思熟慮總結出來的、某種程度上無可挑剔的,并且講得又相對淺顯。哈哈。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 21:42 | JFFO
樓主有什么參考資料和書籍推薦嗎?
最近我也正好也有這個打算,平時用的Notepad++實在太簡單了點
沒法滿足目前的需求;)  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 22:32 | 空明流轉
樓主之前都把博客園的大牛們當成我這樣的徒孫了。  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-16 23:43 | 溪流
@空明流轉
作為徒孫的你的氣場總是比lz還要猛烈嘛~  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-17 07:15 | 陳梓瀚(vczh)
@JFFO
用Visual Studio 2010  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-18 00:14 | JFFO
@陳梓瀚(vczh)
能用當然用,主要是不能用;(  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-18 05:43 | 陳梓瀚(vczh)
@JFFO
那就沒辦法了  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-09-20 01:40 | mm
頂頂頂,頂LZ!!!  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-10-08 17:06 | 王廣
你打算用C++做編譯器,C#做GUI嗎?  回復  更多評論
  
# re: 開發自己的IDE(一) 2010-10-12 21:20 | Kenny Yuan
IDE我倒是做過,絕對的苦差事,挺累,不過也有些地方會很好玩,呵呵  回復  更多評論
  
# re: 開發自己的IDE(一) 2015-02-14 22:02 | czfshine
在知乎被你吸引過來的。。。。 不過有錯別字啊啊啊啊啊啊!!!!

倒數第二段 “經過我的3此研究,結論就是,不要用RichTextBox。。。”

應該是3次吧0.0  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美专区在线观看| 欧美午夜宅男影院在线观看| 亚洲春色另类小说| 久久综合福利| 亚洲风情在线资源站| 欧美激情一区二区三区蜜桃视频| 免费成人黄色片| 91久久午夜| 亚洲专区免费| 永久免费视频成人| 欧美美女bb生活片| 国产精品国产馆在线真实露脸| 欧美午夜不卡在线观看免费| 国产伦理精品不卡| 国模精品一区二区三区| 亚洲三级视频| 亚洲欧美日韩综合| 欧美成人午夜激情在线| aⅴ色国产欧美| 久久久人成影片一区二区三区观看 | 国产欧美日韩一区二区三区在线观看 | 久久夜色精品| 欧美日韩一区精品| 国内精品伊人久久久久av一坑 | 欧美在线观看视频在线| 毛片基地黄久久久久久天堂| 日韩图片一区| 麻豆精品传媒视频| 国产啪精品视频| 亚洲美女黄色| 蜜桃久久av一区| 午夜视频一区在线观看| 欧美激情第六页| 国产主播在线一区| 亚洲午夜久久久| 亚洲第一色中文字幕| 午夜视频精品| 国产精品视频久久久| 亚洲免费观看高清完整版在线观看熊| 欧美综合国产精品久久丁香| 亚洲毛片av| 欧美成人a∨高清免费观看| 国产精品一级二级三级| 洋洋av久久久久久久一区| 欧美成年人视频网站欧美| 欧美在线观看视频一区二区| 欧美视频一区在线观看| 亚洲精品亚洲人成人网| 另类国产ts人妖高潮视频| 亚洲欧美国产视频| 国产精品美女久久久| 亚洲一区二区在| 日韩一本二本av| 欧美高清视频在线播放| 亚洲三级免费电影| 噜噜噜在线观看免费视频日韩| 亚洲午夜电影| 欧美午夜a级限制福利片| 亚洲午夜av电影| 99成人在线| 欧美视频一二三区| 亚洲一区三区电影在线观看| av成人手机在线| 欧美日韩在线视频观看| 亚洲亚洲精品在线观看| 99热这里只有成人精品国产| 欧美日韩国产一区精品一区| 日韩视频中文| 在线一区二区日韩| 国产精品无人区| 欧美综合77777色婷婷| 欧美综合国产| 亚洲高清一区二| 亚洲国产精品传媒在线观看| 欧美黄色一区| 亚洲一区在线看| 香蕉久久夜色精品国产| 国内在线观看一区二区三区| 免费成人在线观看视频| 欧美风情在线观看| 亚洲一区免费在线观看| 欧美一区二区三区在线| 亚洲欧洲日本国产| 亚洲网站在线看| 亚洲黄色在线| 亚洲图片欧美午夜| 国产亚洲毛片在线| 欧美黄在线观看| 欧美性感一类影片在线播放| 午夜一级在线看亚洲| 久久久精彩视频| 在线视频欧美精品| 久久精品女人天堂| 一区二区欧美日韩| 久久精品国产免费| 在线视频一区观看| 久久久久久一区二区三区| 99精品视频一区二区三区| 亚洲视频免费看| 亚洲国产精品成人va在线观看| 一卡二卡3卡四卡高清精品视频| 国产一区二区三区四区五区美女| 亚洲第一黄网| 国产亚洲美州欧州综合国| 亚洲日本成人网| 国模私拍视频一区| 在线视频免费在线观看一区二区| 国内一区二区三区在线视频| 9l国产精品久久久久麻豆| 在线看欧美视频| 亚洲欧美日韩中文播放| 99热免费精品在线观看| 久久久久综合网| 久久精品动漫| 欧美日韩黄色大片| 欧美激情在线免费观看| 国产欧美日韩不卡| 国产精品久久久久aaaa樱花 | 国产亚洲精品bv在线观看| 亚洲肉体裸体xxxx137| 国内精品免费在线观看| 国产精品99久久99久久久二8 | 午夜影院日韩| 欧美伦理a级免费电影| 美女在线一区二区| 国产老女人精品毛片久久| 亚洲精品一区中文| 91久久精品久久国产性色也91| 欧美一区二区三区视频在线| 亚洲欧美日韩综合aⅴ视频| 欧美日韩999| 99re这里只有精品6| 日韩小视频在线观看专区| 欧美aaa级| 亚洲激情偷拍| 一区二区三区高清视频在线观看| 免费成人av在线看| 亚洲福利精品| 99在线视频精品| 欧美人妖在线观看| 亚洲精品日韩在线观看| 一本色道久久综合亚洲精品高清| 欧美精品午夜| 夜夜狂射影院欧美极品| 亚洲综合国产精品| 国产午夜亚洲精品不卡| 性欧美video另类hd性玩具| 欧美在线一级视频| 黄网站色欧美视频| 免费观看久久久4p| 亚洲精品国产品国语在线app | 欧美日韩一区二区三区免费看| 亚洲人成在线免费观看| 亚洲无限av看| 国产日韩一区二区三区在线播放| 先锋亚洲精品| 麻豆精品精华液| 99视频在线观看一区三区| 欧美午夜一区二区| 欧美中文日韩| 亚洲欧洲一区二区在线观看| 亚洲欧美成aⅴ人在线观看| 国产午夜精品福利| 噜噜噜在线观看免费视频日韩| 亚洲激情偷拍| 久久成人综合视频| 亚洲看片一区| 国产欧美一区二区色老头 | 一本色道久久综合精品竹菊| 欧美一二三视频| 亚洲福利久久| 国产精品久久久久久久电影| 久久精品成人一区二区三区蜜臀| 亚洲国产婷婷综合在线精品| 亚洲精品国产拍免费91在线| 亚洲一区精品在线| 国内偷自视频区视频综合| 欧美久久久久久蜜桃| 欧美亚洲网站| 99成人在线| 欧美激情精品| 欧美在线亚洲在线| 一本到高清视频免费精品| 国产日韩欧美一区二区三区在线观看 | 国产精品网站一区| 蜜臀久久99精品久久久画质超高清| 一区二区三区**美女毛片| 免费成人黄色片| 欧美综合激情网| 亚洲一区免费在线观看| 亚洲精品免费看| 精品动漫3d一区二区三区免费版| 欧美日韩中文| 欧美黄在线观看| 老司机67194精品线观看| 亚洲伊人久久综合| 99热这里只有成人精品国产| 久久久噜噜噜久久狠狠50岁| 亚洲欧美日韩成人高清在线一区| 亚洲欧洲日产国产网站|