又过了几天,deepflow 的反向传播终於跑稳了。
但陈一然发现一个问题,他忍不了了。
那就是他打字的时候,textmate 会卡。
不是每次都卡,但越来越频繁。本来照著茉莉的知识,双手打得飞快,突然光標就莫名其妙的停住了,等个一两秒才把字蹦出来。他手已经敲下去了,有的时候直接吞子打乱了。
陈一然有种,玩劲舞团,空格敲的正爽,突然音乐停了的感觉。
一开始他以为是文件太大。deepflow 的代码已经写了快一千多行了,但是感觉也不至於吧,正常写个 word 什么的,比这个字数多多了啊。
又以为是內存不够,可 macbook pro 17 寸顶配,8g 內存,在 2010 年应该不算差了。
“茉莉,是不是,我们硬体不太行了啊。”
【打开 activity monitor 看看各种沿用情况。】
陈一然听话的打开了 activity monitor 看了一眼, textmate 占了不到两百兆,cpu 偶尔飆到百分之十几,大部分时候都很安静。
【看来是软体问题吧,我们换个软体试试?】
苹果自带的 vim 和 nano 更难用,否则陈一然也不会买了 textmate 来用,正正 50 刀呢。
陈一然打开谷歌,搜了一下 mac 上的代码编辑器。2010 年的选择並不算多,之前搜过 textmate 是最主流的,但不是唯一的。
他先试了试 sublime text,这个编辑器 2008 年出的,速度確实快,打开文件几乎秒开,不会像 textmate 那样卡。但功能太少了,连代码片段都没有,更別说自动补全。
写 python 的时候连缩进都要自己管,和 textmate 比起来就像从轿车换成了摩托车。快是快了,但是对人肉打字机陈一然非常的不友好。
又试了 bbedit,这是 mac 上的老牌编辑器,1992 年就有了,功能比 textmate 还多。但界面丑得离谱,看起来像上世纪的软体,而且它强项是 html 和文本处理,写 python 的体验很差,语法高亮支持的语言倒不少,但代码补全基本没有。
试了一圈,没一个让他满意的。要么快但功能少,要么功能多但慢又丑。最后还是回到了 textmate。倒是很多论坛都在说 textmate2.0 的事情,但是据说作者好久没都没出现了。大家都猜,2.0 应该难產甚至流產了。
只能先用回 textmate,可刚打开没多久又卡了。
“茉莉,想点办法啊茉莉,有没有什么简单的方法优化一下呢。”
【textmate 1.x 的文本渲染引擎在处理大文件时效率不高,隨著碎片增多也会造成混乱,这个没办法解决。】
想到了之前茉莉编写的翻页小脚本,陈一然觉得,可以试试搞个新项目。
textmate 卡,sublime 功能少,bbedit 丑,vim 不会用。
它们功能也很一般,陈一然打错字的时候,没有一个编辑器会提醒他。別的程式设计师可不像他有茉莉在后台提醒,可能打错之后,就错到最后了又要回头费劲的找那里拼错了。
在陈一然浅薄的知识里,觉得这功能应该不难啊,后世隨便说很么打字软体纠错能力总是有的吧。
还有括號配对这种低级错误,他每天至少犯两三次。茉莉一天不知道多少次提示他少打一个右括號,普通程式设计师天天这么操心,掉头髮简直理所当然。
“茉莉,你说写文章都能自动纠错,word 里打错一个字底下就画红线。编程怎么就没有这种东西?”
【编程的纠错比自然语言复杂得多,需要理解代码的语义。事实上之前 bbedit 的介绍里是支持標错的,你使用时没有触发,而且他应该是基於正则表达式和当前文件缓存。 所以,意义並不大。
如果要更好的实现这个功能,需要加入一个抽象语法树,让它能读取整个项目的结构。textmate 目前不支持插件,但是,我们可以自己做一个编辑器?】
“对的,这就是我的意思,我们可以搞的吧。”
【理论上可以,但这不是一个小工程。】
“需要进行一定的推理运算之类的吗?”
【是的,我简单的的想了一下,我可以设计一个部脏標记传播算法,还需要一个增量解析的数学模型,这样才可以保证体积的轻量型。我们可以用纯 c 语言写一个代码分析进程,objective-c 和 cocoa 框架,应该可以实现一个支持无限行数不卡顿的文本渲染引擎。】
陈一然走到冰箱,从冷冻层抽了两个前几天才到货的运动员冰袋,一个贴在额头上,一个搁在后脖子上,顺手又拿了两个冰淇淋。
拿出手机,在五月花点了三碗乌龙麵。边上的零食架上又摸出一袋奥利奥和两根能量棒,全堆在桌上。
“上吧茉莉!启动!干就完了!”
他一边吃一边刷著网页等茉莉,总得先看看市场情况。
reddit 上 r/programming 又有人在骂 textmate 2.0 跳票,底下评论区有人说了句 “textmate is dead”。
还有人回復 “i lopile just to find a typo. in 2010.”
说得真对,都 2010 年了,word 都能画红线了呢。
没看几分钟,陈一然就感觉身体情况已经不足以支撑他看网页了,他只能躺尸。
每五分钟,茉莉都会提示陈一然测下体温,以防不小心把自己烧死。
还好,一直也只是低烧。之前茉莉推测,身体有自我保护,温度过高他也会卡顿好像是真的。
但是这是不是意味著,以后他要是真的发烧了,茉莉就会运行不良。
就这么迷迷糊糊的想著,外卖到了,连吃了三碗面小肚子撑的溜圆之后,茉莉发声了。
【思路基本理清了,我还是没敢过大的推理情况,所以需要我们实际编辑的时候稍微试错下。但是,整体来是没有问题的。】
“虽然我也不一定听得懂,但是你给我说说。”
【核心思路是两个:第一,把界面和代码分析分到不同的进程里跑。textmate 卡是因为界面渲染和语法分析挤在一个线程里,分析一卡,界面就跟著卡。分开之后,分析再慢也不影响打字。】
“这跟瀏览器干的事差不多吧?chrome 每个標籤页都是独立进程。”
【原理类似。第二,代码分析不能只做正则匹配,要真正理解代码结构。这就需要一个语义分析引擎,实时解析代码的抽象语法树,构建符號表,跟踪变量的定义和引用。有了这个,就能做到实时的错误检测和智能补全。
不只是给关键字变个顏色,而是真的看懂你写了什么。变量在哪里定义的,有没有拼错,括號有没有配对,函数参数对不对。你打错了,当场就能標出来,不用等运行。】
“所以用 python 写?”
【性语义分析需要遍歷整个代码的语法树,python 的执行速度不够快。而且无法直接与作业系统底层的应用程式二进位接口无缝对接。需要用 c++ 写核心框架,只有 c++ 既能提供极高的抽象能力,又能毫无损耗地转化成机器码。
net 生態有成熟的元数据系统和 xml 文档,可以利用 mono 运行时做跨平台。先做好 c# 的支持,验证架构可行,再扩展其他语言。】
“mono 又是什么?”
【.net 的开源跨平台实现工具。微软的 .net 只跑在 windows 上,mono 让 c# 程序可以在 mac 和 linux 上运行。我们的编译器如果做好,应该可以代替 mono,我们的编译会更好,也可以直接支持.net】
“茉莉,这个做出来,有人会买吗?”
【根据论坛上的反馈,对更好代码编辑器的需求是真实存在的。textmate 2.0 跳票导致大量用户在寻找替代品,但目前没有一款 mac 编辑器能同时做到速度快、功能全、有实时错误检测。
如果我们的工具能做到这些,是有商业潜力的。並且,我们还支持.net,应该会有销路。】
“那就先搞这个,deepflow 不急,先搞定工具,之后干什么都会快点。”
【收到,项目代號?】
“项目代號,茉莉工具一號。”
【收到。jasmine tool no. 1 项目启动。
但陈一然发现一个问题,他忍不了了。
那就是他打字的时候,textmate 会卡。
不是每次都卡,但越来越频繁。本来照著茉莉的知识,双手打得飞快,突然光標就莫名其妙的停住了,等个一两秒才把字蹦出来。他手已经敲下去了,有的时候直接吞子打乱了。
陈一然有种,玩劲舞团,空格敲的正爽,突然音乐停了的感觉。
一开始他以为是文件太大。deepflow 的代码已经写了快一千多行了,但是感觉也不至於吧,正常写个 word 什么的,比这个字数多多了啊。
又以为是內存不够,可 macbook pro 17 寸顶配,8g 內存,在 2010 年应该不算差了。
“茉莉,是不是,我们硬体不太行了啊。”
【打开 activity monitor 看看各种沿用情况。】
陈一然听话的打开了 activity monitor 看了一眼, textmate 占了不到两百兆,cpu 偶尔飆到百分之十几,大部分时候都很安静。
【看来是软体问题吧,我们换个软体试试?】
苹果自带的 vim 和 nano 更难用,否则陈一然也不会买了 textmate 来用,正正 50 刀呢。
陈一然打开谷歌,搜了一下 mac 上的代码编辑器。2010 年的选择並不算多,之前搜过 textmate 是最主流的,但不是唯一的。
他先试了试 sublime text,这个编辑器 2008 年出的,速度確实快,打开文件几乎秒开,不会像 textmate 那样卡。但功能太少了,连代码片段都没有,更別说自动补全。
写 python 的时候连缩进都要自己管,和 textmate 比起来就像从轿车换成了摩托车。快是快了,但是对人肉打字机陈一然非常的不友好。
又试了 bbedit,这是 mac 上的老牌编辑器,1992 年就有了,功能比 textmate 还多。但界面丑得离谱,看起来像上世纪的软体,而且它强项是 html 和文本处理,写 python 的体验很差,语法高亮支持的语言倒不少,但代码补全基本没有。
试了一圈,没一个让他满意的。要么快但功能少,要么功能多但慢又丑。最后还是回到了 textmate。倒是很多论坛都在说 textmate2.0 的事情,但是据说作者好久没都没出现了。大家都猜,2.0 应该难產甚至流產了。
只能先用回 textmate,可刚打开没多久又卡了。
“茉莉,想点办法啊茉莉,有没有什么简单的方法优化一下呢。”
【textmate 1.x 的文本渲染引擎在处理大文件时效率不高,隨著碎片增多也会造成混乱,这个没办法解决。】
想到了之前茉莉编写的翻页小脚本,陈一然觉得,可以试试搞个新项目。
textmate 卡,sublime 功能少,bbedit 丑,vim 不会用。
它们功能也很一般,陈一然打错字的时候,没有一个编辑器会提醒他。別的程式设计师可不像他有茉莉在后台提醒,可能打错之后,就错到最后了又要回头费劲的找那里拼错了。
在陈一然浅薄的知识里,觉得这功能应该不难啊,后世隨便说很么打字软体纠错能力总是有的吧。
还有括號配对这种低级错误,他每天至少犯两三次。茉莉一天不知道多少次提示他少打一个右括號,普通程式设计师天天这么操心,掉头髮简直理所当然。
“茉莉,你说写文章都能自动纠错,word 里打错一个字底下就画红线。编程怎么就没有这种东西?”
【编程的纠错比自然语言复杂得多,需要理解代码的语义。事实上之前 bbedit 的介绍里是支持標错的,你使用时没有触发,而且他应该是基於正则表达式和当前文件缓存。 所以,意义並不大。
如果要更好的实现这个功能,需要加入一个抽象语法树,让它能读取整个项目的结构。textmate 目前不支持插件,但是,我们可以自己做一个编辑器?】
“对的,这就是我的意思,我们可以搞的吧。”
【理论上可以,但这不是一个小工程。】
“需要进行一定的推理运算之类的吗?”
【是的,我简单的的想了一下,我可以设计一个部脏標记传播算法,还需要一个增量解析的数学模型,这样才可以保证体积的轻量型。我们可以用纯 c 语言写一个代码分析进程,objective-c 和 cocoa 框架,应该可以实现一个支持无限行数不卡顿的文本渲染引擎。】
陈一然走到冰箱,从冷冻层抽了两个前几天才到货的运动员冰袋,一个贴在额头上,一个搁在后脖子上,顺手又拿了两个冰淇淋。
拿出手机,在五月花点了三碗乌龙麵。边上的零食架上又摸出一袋奥利奥和两根能量棒,全堆在桌上。
“上吧茉莉!启动!干就完了!”
他一边吃一边刷著网页等茉莉,总得先看看市场情况。
reddit 上 r/programming 又有人在骂 textmate 2.0 跳票,底下评论区有人说了句 “textmate is dead”。
还有人回復 “i lopile just to find a typo. in 2010.”
说得真对,都 2010 年了,word 都能画红线了呢。
没看几分钟,陈一然就感觉身体情况已经不足以支撑他看网页了,他只能躺尸。
每五分钟,茉莉都会提示陈一然测下体温,以防不小心把自己烧死。
还好,一直也只是低烧。之前茉莉推测,身体有自我保护,温度过高他也会卡顿好像是真的。
但是这是不是意味著,以后他要是真的发烧了,茉莉就会运行不良。
就这么迷迷糊糊的想著,外卖到了,连吃了三碗面小肚子撑的溜圆之后,茉莉发声了。
【思路基本理清了,我还是没敢过大的推理情况,所以需要我们实际编辑的时候稍微试错下。但是,整体来是没有问题的。】
“虽然我也不一定听得懂,但是你给我说说。”
【核心思路是两个:第一,把界面和代码分析分到不同的进程里跑。textmate 卡是因为界面渲染和语法分析挤在一个线程里,分析一卡,界面就跟著卡。分开之后,分析再慢也不影响打字。】
“这跟瀏览器干的事差不多吧?chrome 每个標籤页都是独立进程。”
【原理类似。第二,代码分析不能只做正则匹配,要真正理解代码结构。这就需要一个语义分析引擎,实时解析代码的抽象语法树,构建符號表,跟踪变量的定义和引用。有了这个,就能做到实时的错误检测和智能补全。
不只是给关键字变个顏色,而是真的看懂你写了什么。变量在哪里定义的,有没有拼错,括號有没有配对,函数参数对不对。你打错了,当场就能標出来,不用等运行。】
“所以用 python 写?”
【性语义分析需要遍歷整个代码的语法树,python 的执行速度不够快。而且无法直接与作业系统底层的应用程式二进位接口无缝对接。需要用 c++ 写核心框架,只有 c++ 既能提供极高的抽象能力,又能毫无损耗地转化成机器码。
net 生態有成熟的元数据系统和 xml 文档,可以利用 mono 运行时做跨平台。先做好 c# 的支持,验证架构可行,再扩展其他语言。】
“mono 又是什么?”
【.net 的开源跨平台实现工具。微软的 .net 只跑在 windows 上,mono 让 c# 程序可以在 mac 和 linux 上运行。我们的编译器如果做好,应该可以代替 mono,我们的编译会更好,也可以直接支持.net】
“茉莉,这个做出来,有人会买吗?”
【根据论坛上的反馈,对更好代码编辑器的需求是真实存在的。textmate 2.0 跳票导致大量用户在寻找替代品,但目前没有一款 mac 编辑器能同时做到速度快、功能全、有实时错误检测。
如果我们的工具能做到这些,是有商业潜力的。並且,我们还支持.net,应该会有销路。】
“那就先搞这个,deepflow 不急,先搞定工具,之后干什么都会快点。”
【收到,项目代號?】
“项目代號,茉莉工具一號。”
【收到。jasmine tool no. 1 项目启动。
