c++源码矢量图形编辑器_下一代代码编辑器的设想

在通过各种编辑工具使用各类编程语言进行开发的过程中,我们会被大量噪音分心。

举个例子

我们为了美观性,为了代码格式和对齐,我们会大量的插入/删除Space、Tab和Enter

对于一些同层级的操作,我们可能会手工对齐它。

举一个极端的例子,例如我写的代码就是这样的

83efd73e920fefa9acc103607baac313.png

这样的

4a7087b79b5be78b69ce92d238791328.png

以及这样的

3d405dea31a6fe4a1159cb3959254361.png

为了使这些代码变得美观,变得整齐工整,无疑是一件很痛苦的事。

同时,语法节点的输入也是个带问题。

对于一颗语法树,我们需要输入它的头部。例如

match

以及我们需要输入它的词法界限来分割它的块部分,例如

with | 和 ->

——而这是完全没有必要的

据直觉性的非客观的不完全统计,在我们写代码的时候30%的部分写的就是这些东西(x

我们完全可以在我们输入语法树的头部时,就让编辑器帮你弄出整个块

我们能输入错误的源代码

这一点我是觉得是最不可思议的。

同志们,已经9102年了,我们用的代码编辑器居然还能让我们输入能让编辑器报错的代码。

Q: 所以,我们需要什么?

A: 所以,我们需要一个高度语言特化的AST编辑器——也就是结构化编辑。它应该最大程度的照顾用户体验——也就是以人为本。

注意:它不是图形化的编辑器,也不是像UE4蓝图那样的东西。

以及,一些有趣的特性

一旦我们用上了AST编辑,那么我们就可以做一些很好玩的东西了

由于编辑器的操作对象是AST,因此我们就能很轻松的指定由编辑器渲染出的代码样式——通过写插件和编辑样式文件的方式。

符号查找和定位是低开销的:对于传统的编程语言而言,符号查找的开销无疑是较高的。首先我们需要从源码中构建出AST,然后我们需要维护一个AST到源码的映射表——在这个过程中,一旦能构建出AST的Token序列被破坏,那么就我们没法从源码中得到任何可用的信息了,我们就只能猜,猜到哪个算哪个。(同时我们能够避免写编辑器的String数据结构(比如坨坨桌子(逃

降低Parser实现难度:对于这一点,大锤予以了反驳,他认为合格的编译器应该独立处理所有的语法问题。我倒是不这么觉得,首先在任何情况下,读纯ast表达式(包括且不限于json、xml)应该是成本最低的方式了。

举个小众的例子:众所周知,某些语言中提供了自定义运算符和控制流的语法。(点名批评Haskell和F#)而为了实现这种功能,我们在实现Parser的时候会用上很复杂的算法和操作。

我认为这是一种很不干净的行为,我们完全可以把这部分功能(甚至一部分宏的作用)交给编辑器前端去做。

最大程度上防止用户写出有问题的代码

这一部分我觉得是结构化编辑最有价值的部分。

举个例子

我们使用Pigeon(目前还不存在的)语言时,我们输入了一个表达式

1 + a

——在正常情况下是这样的

但是,如果我们没有定义a呢?我们没有在任何作用域中定义这个a呢?或者说,这个a的类型和(+)这个函数不匹配呢?

我们的编辑器会对它标记一个红色下划线?不对,此时这个a是写不出来的。我们可以在intellcode的提示中直接进入重构引导。

从这一步我们就可以看出来了。整个的代码编辑过程应该是很流畅的。代码编辑器每时每刻都在和用户强交互。

必要性?

看到这里有人会问啦:那么这些东西和我们现在用的编辑器有什么本质的区别吗?

从使用者的角度来看,两者都能提供同样的功能。但结构化编辑器会带来更整体而非是零碎的体验。

未来的问题

当然,截止目前,结构化编辑器的构思还有很多问题。例如怎么选择和操作ast,例如快捷键该怎么设置,会不会让开发者更快患上腱鞘炎(逃)。诸如此类的问题。

但我们仍然选择相信下一代编辑器,能带来更好的开发体验,能够真正做到以人为本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言inline不起作用,C语言inline内联函数学习小结

//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。//要成为inline函数必须具备以下几点://1、函数代码很短&#x…

python数据挖掘主要特点_python数据挖掘(从数据集中抽取特征)

大多数数据挖掘算法都依赖于数值或类别型特征,从数据集中抽取数值和类别型特征,并选出最佳特征。 特征可用于建模, 模型以机器挖掘算法能够理解的近似的方式来表示现实 特征选择的另一个优点在于:降低真实世界的复杂度&#xff0c…

php_mysql注入load_file()IIS配置文件获取

php_mysql注入load_file()IIS配置文件获取先看一个注入点: http://www. .cn/news_detail.php?newsid-1unionselect1,2,3,4,5,6,concat(database(),0x5c,user(),0x5c,version()),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27得到回显:fli…

layui 鼠标移入变为小手_游戏技术上不去?看看外设选对没!鼠标篇

古有“人靠衣服,马靠鞍,先看长相,再看穿”的说法,现在在游戏里也有“外设选的好,游戏输不了!”这种言论。虽然这种说法过于绝对,但是一款好的外设,确实可以增加我们胜利的概率。今天…

python分支语句_Python中分支语句与循环语句实例详解

前言 本篇博文介绍一下Python中的if条件语句、while循环语句、for in循环语句以及break和continue控制关键字。 分支的基本语法 if 条件表达式: 语句1 语句2 语句3 ...... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意if后面的出现的语…

用c语言编程减法计算,求用C编个大数加减法运算程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼只写过加法的&#xff0c;杭电的A B Problem (II)(AC)&#xff1a;#include #include #include #define N 3000int main(void){int n, i, j, k, p, q, a, b, t, up;char s[N];scanf("%d ", &n);for (i 0; i < n…

creator图片循环显示_江淮宣传车厂家价格 图片 配置

国六 江淮宣传车配置&#xff1a;整车型号:CLW5040XXCH6整车尺寸:5995*2190*2970【底盘配置】轴距:3365发动机:全柴120马力排量:2.0L轮胎:7.00R16其它:助力&#xff0c;空调&#xff0c;电动门窗&#xff0c;中控锁&#xff0c;ABS&#xff0c;气刹江淮康铃H5宣传车图片江淮宣传…

BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )

MST...一开始没注意-1结果就WA了... ----------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>#include<iostream>#define r…

python字符串格式化_Python3 字符串格式化

字符串的格式化方法分为两种&#xff0c;分别为占位符(%)和format方式。占位符方式在Python2.x中用的比较广泛&#xff0c;随着Python3.x的使用越来越广&#xff0c;format方式使用的更加广泛。 一 占位符(%)%d 实例(Python3.0)&#xff1a; age 29 print("my age is %d&…

垂直串联六关节机器人调试手册_不止下棋能赢你!新型协作机器人样样精通

重庆网络广播电视台记者 余韬2019中国国际智能产业博览会上&#xff0c;各具特色的智能制造装备和机器人纷纷亮相。其中一款能和人下象棋的机器人吸引了大批观众的目光&#xff0c;大家都抢着要跟机器人“一决高下”。“机械手上有视觉辨识系统&#xff0c;识别出放象棋的位置之…

蓝桥杯c语言a组2015,2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)

X星的坦克战车很奇怪&#xff0c;它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转&#xff0c;否则将报废。某坦克需要从A区到B区去(A&#xff0c;B区本身是安全区&#xff0c;没有正能量或负能量特征)&#xff0c;怎样走才能路径最短&#xff1f;已知的地图是一个…

nil,Nil,NULL,NSNull

nil&#xff1a;指向oc中对象的空指针 Nil&#xff1a;指向oc中类的空指针 NULL&#xff1a;指向其他类型的空指针&#xff0c;如一个c类型的内存指针 NSNull&#xff1a;在集合对象中&#xff0c;表示空值的对象 NSURL *url nil&#xff1b;Class class Nil&#xff1b;int …

c int转char数组_C语言 指向数组和字符串的指针

实例1我们在pointer_test.c的文件中写一个test2()函数&#xff0c;我们定义一个有3个元素的字符数组初始化值分别为&#xff0c;’A’, ’B’, ’C’&#xff0c;然后定义一个字符指针pc&#xff0c;把数组ca的首地址复制给字符指针pc,然后通过访问指针变量pc,来读取指针变量pc…

python代码画小狗_程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物&#xff0c;非常的哇塞哦~ 作为程序员的我那是羡慕不已啊&#xff01;我要是学会这招是不是可以尝试给我心仪很久的女神告白了&#xff1f;女神没准会很开心&#xff01;&#xff08;好吧&#xff0c;我承认我是…

三个用户在同一系统中同时对他们的c语言,杭州电子科技大学学生考试卷2013年操作系统试卷(2份,有答案)...

内容简介&#xff1a;杭州电子科技大学学生考试卷2013年操作系统试卷(2份&#xff0c;有答案)杭州电子科技大学学生考试卷(A )卷一、判断题(共10分,每小题1分&#xff0c;正确的打√&#xff0c;错误的打)1&#xff0e;分布式操作系统和网络操作系统都是建立在网络的基础之上&a…

ASP.NET方面的一些经典文章收集

1. 在ASP.NET中执行URL重写 文章地址&#xff1a;https://msdn.microsoft.com/zh-cn/library/ms972974.aspx 2. 在ASP.NET中如何实现和利用URL重写 文章地址&#xff1a;http://tech.it168.com/msoft/2008-01-08/200801080919796.shtml 3. Log4Net使用指南 文章地址&#xff1a…

如何修改emcp的sn号_百家号领域选择错误怎么办?百家号怎么更改领域?

我之前就强调过&#xff0c;做自媒体运营&#xff0c;正式开始之前&#xff0c;先做好定位&#xff0c;选好自己擅长的或者感兴趣的细分领域&#xff0c;这样才能保证以后能长期做&#xff0c;保证内容的输出量。很很多新人听说自媒体能赚钱&#xff0c;就直接进来了&#xff0…

apache根据ip分发_腾讯广告进入“IP新融点”时代

文 | 若谷广告业务增长放缓&#xff0c;会员数量持增&#xff0c;爆款内容产品难遇&#xff0c;品牌方需求升级&#xff0c;在这样现实情境下&#xff0c;传统营销模式亟待升级&#xff0c;腾讯广告就此进行了一次综合性的变革&#xff0c;以IP新融点方式进行应对这一现实挑战。…

分治法求数组最大值 c语言,使用分治法求最大子数组的下标。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includeint max(int a[],int left,int right);int maxcross(int a[],int left,int right,int middle);int xyzleft,xyzright;int main(){int T;int asd;int num[100000];scanf("%d",&T);while(T--){scanf("%d&…

eclipse下创建Maven项目

1.选择创建Maven项目&#xff0c;选择不适用骨架形式&#xff08;Creat a simple project&#xff09; 如图&#xff1a; 2.packing选择war的形式 如图&#xff1a; 由于packing是war形式&#xff0c;那么下面就出现了webapp的目录 3.由于我们要用eclipse把项目发布到tomcat…