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

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
    在寫這篇文章的時(shí)候,我正在嘗試自己開(kāi)發(fā)一個(gè)我自己認(rèn)為能拿出去見(jiàn)人的IDE。當(dāng)然此時(shí)此刻我只開(kāi)展了一點(diǎn)點(diǎn)工作。所以這篇文章沒(méi)有什么最終的指導(dǎo)性,而是在記錄我開(kāi)發(fā)IDE的思考過(guò)程。當(dāng)然我覺(jué)得之前寫了那么多東西除了開(kāi)了源之后介紹了我的作品讓大家可以更好的理解并學(xué)習(xí)以外,其實(shí)也沒(méi)有什么大的效果(除了幾篇置頂?shù)慕坛涛覀€(gè)人覺(jué)得還是有點(diǎn)效果的……)。因此我嘗試做一下改變,把我的思考過(guò)程描述出來(lái)。一方面我自己可以從一個(gè)更高的高度來(lái)審視我自己,第二個(gè)就是如果你們想從我這里拿走什么,或者想教我什么,請(qǐng)自便哈。

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

    是個(gè)程序員都是這么想的哈。

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

    當(dāng)然我也做了一點(diǎn)優(yōu)化,全文著色要半秒,不過(guò)其實(shí)你在編輯的時(shí)候是不需要總是全文著色的。所以我的著色器接口做了一點(diǎn)小限制:
    1、你必須用狀態(tài)及實(shí)現(xiàn),而且狀態(tài)及的狀態(tài)只能用int類型來(lái)表達(dá)。
    2、著色必須是上下文無(wú)關(guān)的。

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

    因此我只需要記下每一行的末尾著色器當(dāng)時(shí)的狀態(tài),就可以從任意位置開(kāi)始到任意位置結(jié)束進(jìn)行部分著色了。因此這里就有很多的優(yōu)化空間。有了這些優(yōu)化之后,我用我的Demo編輯一個(gè)將近10萬(wàn)行的C#文件的時(shí)候,那個(gè)運(yùn)行在UI線程里面的著色算法絲毫沒(méi)有讓我覺(jué)得有延遲,只有在少數(shù)情況下(瞬間貼了好幾萬(wàn)行代碼,然后按ctrl+end跳到全文最后,我不得不對(duì)你貼進(jìn)去的東西立刻著色)才會(huì)讓你感覺(jué)到有小于半秒鐘的延遲。所以我覺(jué)得這個(gè)設(shè)計(jì)已經(jīng)可以達(dá)到我的要求了,因?yàn)槲易约簩懙拇a一般單個(gè)文件都沒(méi)有超過(guò)1萬(wàn)行,所以偶爾給我一個(gè)小于0.05秒的延遲其實(shí)也是無(wú)所謂的……

    為什么可以進(jìn)行優(yōu)化呢。你可以想一下,如果我正在對(duì)某一行進(jìn)行編輯,而且這一行后面的代碼都已經(jīng)被著色過(guò)了,那么如果你的改動(dòng)都沒(méi)有讓行末尾的著色器狀態(tài)發(fā)生變化,那么這一行后面的所有字符都不需要更改他的著色,因此我就可以只對(duì)你當(dāng)前編輯的一行進(jìn)行著色(唯一修改的其實(shí)也就只有那種多行注釋,你一般也不會(huì)寫很多這種多行注釋的,都用的單行……)。一百來(lái)個(gè)字符的著色基本上可以忽略,因此無(wú)論你的文件有多大,其實(shí)著色速度是跟你平均每行的長(zhǎng)度有關(guān)系,只有在極少數(shù)情況下才會(huì)跟你的行數(shù)有關(guān)系。這個(gè)時(shí)候你可以看到著色器兩個(gè)限制的強(qiáng)大威力了吧。

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

    因此我們剩下的問(wèn)題就是如何實(shí)現(xiàn)一個(gè)可以修改文字顏色的普通文本框了哈。經(jīng)過(guò)我的3此研究,結(jié)論就是,不要用RichTextBox,你自己自繪從頭寫一個(gè)。第二個(gè)結(jié)論,凡是GUI最好都別用C++,無(wú)論GUI類庫(kù)多么好,一個(gè)沒(méi)有內(nèi)存管理器就足以讓你覺(jué)得很麻煩了,當(dāng)然對(duì)于編譯器本身我還是推薦C++的,因?yàn)榫幾g器雖然算法復(fù)雜,不過(guò)結(jié)構(gòu)簡(jiǎn)單,所有的內(nèi)存分配都是可以預(yù)測(cè)的,因此delete起來(lái)非常有信心。

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

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

倒數(shù)第二段 “經(jīng)過(guò)我的3此研究,結(jié)論就是,不要用RichTextBox。。。”

應(yīng)該是3次吧0.0  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日韩亚洲| 久久久久久亚洲精品中文字幕| 亚洲欧美日韩第一区| 在线视频免费在线观看一区二区| 一本高清dvd不卡在线观看| 日韩亚洲精品视频| 亚洲综合国产| 久久理论片午夜琪琪电影网| 欧美成年人视频| 亚洲精品国产精品国自产观看| 亚洲国产精品欧美一二99| 日韩午夜在线| 午夜精品在线看| 久久久久青草大香线综合精品| 乱人伦精品视频在线观看| 欧美日韩不卡在线| 国产亚洲精品久久飘花| 亚洲精品免费观看| 亚洲欧美伊人| 蜜臀av性久久久久蜜臀aⅴ| 亚洲精品一区二区三区av| 欧美一区2区三区4区公司二百| 免费看亚洲片| 国产精品一二三视频| 亚洲国产精品一区在线观看不卡| 在线一区欧美| 欧美国产一区二区| 午夜精品久久久久久久蜜桃app| 欧美不卡激情三级在线观看| 亚洲毛片视频| 久久综合五月| 91久久久久久国产精品| 欧美一区二区黄| 欧美精品一区二区久久婷婷| 国产日本欧美视频| 一本色道久久综合亚洲精品不卡| 久久久久久九九九九| 亚洲欧洲一区二区三区| 久久精品国产69国产精品亚洲| 欧美视频在线观看视频极品| 亚洲国产日韩欧美在线图片| 久久久亚洲精品一区二区三区| 99热这里只有精品8| 欧美激情性爽国产精品17p| 亚洲电影网站| 女仆av观看一区| 久久精品中文字幕一区二区三区| 国产精品久久综合| 亚洲欧美美女| 亚洲午夜久久久| 国产精品r级在线| 一级成人国产| 99视频超级精品| 欧美日韩一区二区三区高清| 亚洲精品你懂的| 亚洲国产精品成人一区二区 | 91久久精品一区二区三区| 久久精品视频99| 午夜精品久久久久久久久久久| 国产精品久久久久aaaa九色| 亚洲综合国产精品| 亚洲性视频网站| 国产精品制服诱惑| 久久高清国产| 久久九九免费| 91久久精品一区| 亚洲免费成人av电影| 欧美视频不卡中文| 亚洲欧美激情视频| 性欧美长视频| 1769国内精品视频在线播放| 欧美国产免费| 欧美日韩国产不卡在线看| 亚洲一区二区四区| 欧美亚洲综合网| 亚洲黄色av一区| 一区二区三区视频观看| 国产亚洲制服色| 毛片一区二区三区| 欧美久久电影| 欧美专区亚洲专区| 久久蜜臀精品av| 日韩一级黄色片| 亚洲欧美日韩国产一区| 亚洲福利视频专区| 亚洲精品影院在线观看| 国产精品视频福利| 美女主播精品视频一二三四| 国产精品网站在线| 欧美凹凸一区二区三区视频| 亚洲影院色无极综合| 久久精品国产清自在天天线| 亚洲日本成人女熟在线观看| 中文日韩电影网站| 亚洲国产精品久久人人爱蜜臀| 亚洲人精品午夜| 国产色综合久久| 夜久久久久久| 亚洲高清电影| 亚洲女优在线| 艳妇臀荡乳欲伦亚洲一区| 欧美一区二区三区婷婷月色| 一本久道久久综合中文字幕| 久久精品国产精品亚洲精品| 亚洲一级黄色av| 蜜臀a∨国产成人精品| 欧美影院在线| 欧美日韩在线综合| 亚洲国产激情| 激情文学一区| 亚洲女同性videos| 亚洲校园激情| 欧美极品aⅴ影院| 欧美96在线丨欧| 国产亚洲一区二区三区| 亚洲午夜国产成人av电影男同| 亚洲三级免费观看| 久久久久久高潮国产精品视| 久久成人免费| 国产精品免费一区二区三区观看| 亚洲激情视频| 亚洲精品一区二区三区av| 久久久成人精品| 久热精品在线| 亚洲国产精品成人一区二区 | 亚洲国产婷婷| 亚洲国产成人av好男人在线观看| 久久成人免费电影| 久久久精品久久久久| 国产视频久久久久久久| 亚洲欧美国产高清| 欧美亚洲视频在线观看| 国产精品美女久久福利网站| 日韩香蕉视频| 亚洲综合三区| 国产区欧美区日韩区| 午夜精品福利视频| 久久精品欧洲| 尤物yw午夜国产精品视频| 久久亚洲春色中文字幕| 欧美激情按摩| 99成人在线| 国产精品久久九九| 亚洲在线成人| 久久久蜜桃一区二区人| 在线欧美三区| 欧美另类videos死尸| 99热精品在线| 久久久91精品国产| 伊人久久噜噜噜躁狠狠躁| 久久亚洲精品中文字幕冲田杏梨| 你懂的视频一区二区| 亚洲另类春色国产| 国产精品久久久久一区二区三区共| 亚洲直播在线一区| 亚洲激情另类| 一本久久精品一区二区| 午夜精品久久| 激情久久婷婷| 欧美另类一区| 欧美一区二区三区四区高清 | 能在线观看的日韩av| 亚洲乱码国产乱码精品精天堂| 亚洲在线播放电影| 一区二区三区在线免费播放| 欧美精品v日韩精品v韩国精品v| 在线亚洲伦理| 欧美成年视频| 午夜久久久久久| 亚洲国产精品99久久久久久久久| 欧美精品在线一区| 久久精品一本| 亚洲一区国产精品| 亚洲黄色在线观看| 久久久久国产精品一区三寸| 亚洲私人影院在线观看| 精品成人一区二区三区| 国产精品激情电影| 欧美成年人视频| 久久精品国产第一区二区三区| 99精品欧美| 欧美成人在线免费视频| 久久超碰97中文字幕| 中文精品视频| 亚洲激情第一页| 精品电影在线观看| 国产视频久久| 欧美午夜宅男影院在线观看| 久热成人在线视频| 久久爱另类一区二区小说| 正在播放欧美视频| 亚洲免费福利视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美国产在线观看| 亚洲黄色免费| 免费在线视频一区| 久久久亚洲一区| 性欧美精品高清| 亚洲欧美不卡| 亚洲性色视频|