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,一经查实,立即删除!

相关文章

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 鼠标移入变为小手_游戏技术上不去?看看外设选对没!鼠标篇

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

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

国六 江淮宣传车配置:整车型号:CLW5040XXCH6整车尺寸:5995*2190*2970【底盘配置】轴距:3365发动机:全柴120马力排量:2.0L轮胎:7.00R16其它:助力,空调,电动门窗,中控锁,ABS,气刹江淮康铃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 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;我承认我是…

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

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

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

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

eclipse下创建Maven项目

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

git add remote_最全的git常用命令(建议收藏)

一、 Git 常用命令速查git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git192.168.1.119:ndshowgit push origin maste…

stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置

不少人在使用Mac笔记本的时候都会想要为电脑外接一个大一点的显示器呢&#xff01;要知道在外接显示器中可是有着四种显示模式呢&#xff01;你知道Mac外接显示器的显示模式怎么设置吗&#xff1f;想要了解有关显示模式的各种问题么&#xff1f;快来阅读下面的这篇文章来寻找答…

Guava源码分析——Immutable Collections(4)

Immutable的集合体系&#xff0c;还有中很重要的集合没有介绍&#xff0c;就是ImmutableMap&#xff0c;通过UML图&#xff0c;可以看出ImmutableMap的结构体系。 首先来看一下ImmutableBiMap&#xff0c;因为普通ImmutableMap的实现依赖于它。ImmutableBiMap在ImmutableMap的基…

建筑电气工程设计常用图形和文字符号_怎么看懂建筑电气工程图?用最直白方式,教你基础识图!超级详细...

​如何看懂建筑电气工程图&#xff1f;我们可能知道AutoCAD&#xff0c;也可能知道在迅捷CAD图库下载建筑电气工程图纸&#xff0c;还可能会使用CAD绘制简单的图形对象。但是&#xff0c;当我们需要进行建筑识图的时候&#xff0c;你也可能连里面的经典图纸符号都不认识。如何看…

Android仿探探卡片拖拽,Vue 仿探探拖拽卡片的效果

原标题&#xff1a;Vue 仿探探拖拽卡片的效果已更新Vue3版&#xff0c;请给前端大全发送关键字vue3仿探探获取Vue3版类似 Tinder 和 探探 的卡片效果的组件&#xff0c;社区中已经非常多了。我这一版除了可以实现和他们一样的效果外。还增加了 飞卡 的效果&#xff0c;就是类似…

Codeforce 水题报告(2)

又水了一发Codeforce &#xff0c;这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C&#xff1a;The Child and Polygon: 描述&#xff1a;给出一个多边形&#xff0c;求三角剖分的方案数&#xff08;n<200&#xff09;。 首先很明显可能是区间dp&#xff0c;我们…

textureview 旋转90度后平铺_C++初级编程NOIP题:11H1537: 图像旋转

时间限制: 1 Sec 内存限制: 128 MB题目描述输入一个n行m列的黑白图像&#xff0c;将它顺时针旋转90度后输出。输入第一行包含两个整数n和m&#xff0c;表示图像包含像素点的行数和列数。1 < n < 100&#xff0c;1 < m < 100。接下来n行&#xff0c;每行m个整数&…

qt中的qwidget如何实现自定义部件_2.3信号和槽(中)

2.3.1 在ui中编辑信号槽这一小节我们来看一下如何在ui中编辑信号槽。我们想要在ui中实现点击按钮&#xff0c;能够控制进度条的显隐。新建GUI项目SignalsAndSlots2&#xff0c;类名SignalsAndSlots2&#xff0c;基类选择QWidget。打开ui文件。在编辑界面中拖入一个Progress Bar…