回覆列表
  • 1 # 使用者6580177447774

    換個角度看,編輯器的核心工作是把一個硬碟上的文字載入到記憶體裡(稱之buffer),然後等待使用者輸入,修改這個buffer,最後儲存時把這個記憶體裡的buffer寫回硬碟文字。

    看這篇講解了redis作者如何用1000L寫editor的文章:Build Your Own Text Editor,buffer就是一個簡單的按行儲存的array,當用戶修改的時候,你要修改維護這個buffer資料結構。

    那麼,現實中的編輯器開啟多個檔案時要維護多個buffer,知道當前編輯的是哪個buffer,對其操作,進行管理。

    排版和搜尋只是使用者看到的部分,顯示層的事情。如果只是排版和搜尋,顯示層其實只需要知道現在顯示的是buffer的第幾行到第幾行,print在螢幕上而已,如果沒有程式碼高亮,實現起來非常簡單。而涉及到編輯的時候,顯示層只要記住當前行和游標位置,把指令發給核心部分就行。

    所以回到問題,把核心和顯示層分開看,可以想像所謂“electron做前端”只是把顯示層的邏輯摘出來了。

    順便看了下xray的README,atom/xray,看意思是已經完全做成C/S結構。為了實現多人合作編輯,Server端的把buffer存成CRDT的資料結構,以解決多人編輯時的同步問題。

  • 中秋節和大豐收的關聯?
  • 有意思的五字成語?