ED是标准的Unix编辑器,并且存在于所有通过POSIX认证的系统上(尽管Debian、FWIW中没有默认安装它)。
它是行编辑器(也就是说,您不能一次看到所有文本。您查询行号并将其返回,但它出现在vi[1]之前,在vi[1]之前,您可以使用hjkl在屏幕上上下导航)。
它是怎么用的?我觉得很难相信,当人们在第20行[2]上工作时,他们能够很好地记住他们的代码,以至于他们还能记住第5行发生的事情。
人们是不是把代码写在纸上,然后键入(有点像在穿孔卡片时代),编辑纸张,然后通过ed修改代码?
[1]。小问题是,ed催生了ex,vi是ex的视觉模式,而ex的遗产在现代vim/nevim中仍然可见(当你键入:command,比如:w时,那个vi运行ex命令),所以ed的遗产至今仍在沿用。
[2]。在70年代,节目时间并不长。只是没有足够的内存供他们使用。但是,即使是一小段20行的程序也太复杂了,无法一行行地完全记在我的脑海里。
评论不适用于扩展讨论;此对话已移至聊天。--陈门卡♦。
MSDOS有一个名为edln的变体(edlin/edline?)。对于行编辑器,它是与ed';相同的界面。--约翰·凯利·S·弗伦奇
现代游戏玩家使用wad或ijkl来移动实体或移动背景:与使用hjkl-cCup没有太大区别。
ed和其他行编辑器的一个优点是,它们通常不会将整个文件保存在内存中,只保存当前行,可能在前后保存10到20行。因此,该文件可以几乎与当前磁盘一样大。-UncleBod。
下面是一个很好的视频,它展示了您是如何使用tty和行编辑器(不是Unix,但仍然非常相同)进行开发的:youtube.com/watch?v=bGjTZxRdYD8-9tofro。
它是行编辑器(也就是说,您不能一次看到所有文本。您查询行号并将其返回,但它出现在vi之前,在vi之前,您可以使用hjkl在屏幕上上下导航)。
它是怎么用的?我觉得很难相信,当人们在第20行工作时,他们能够很好地记住他们的代码,以至于他们可以记住第5行发生的事情?
首先,是的,真正的程序员(就像我们当时一样)确实记得他们的台词。(*1)。
下一步,在书写终端上,人们只需列出一次Working On部分,因此您需要做的就是拉出纸来查看。
在转储终端上,只要需要,就可以发出实际范围的list(打印)命令,或者发出所有范围的p命令。
人们是不是把代码写在纸上,然后键入(有点像在穿孔卡片时代),编辑纸张,然后通过ed修改代码?
是也不是。在写程序之前,你可以坐下来画一个粗略的结构。我想今天每个人都在做这件事。如果你对结构的想法是有效的,你还怎么能第一眼看到呢?在此之后,程序员只需使用ed(或大型机上的类似编辑器)即可。一个程序在你的脑海中生长;屏幕只是用来倾倒结果的,不是吗?
此外,汇编/编译通常会产生一个清单,可以用来在纸上浏览(如果打印出来的话),添加注释和新行,然后再把它们黑进去。而且,您没有每隔几秒钟编译一次,只删除最上面的警告/错误。其中一个人在重新编译之前检查了整个错误列表。
在70年代,节目时间并不长。只是没有足够的内存供他们使用。但是,即使是一小段20行的程序也太复杂了,无法一行行地完全记在我的脑海里。
如果你一开始就不能想象你自己的程序,你怎么能理解它呢?(我在这里是认真的:我做不到,而且我不知道如果不是这样的话,我会怎么做。)。
再一次,认真地说,我多年来一直与行编辑一起工作,并在200多行的程序中工作。事实上,ED已经拥有了比绝对必要的更多的特性,因为Edlin拥有您真正需要编程的一切。
*1-我无法阻止自己在这里添加一个关于真正的程序员如何记住他们的代码的小故事:
在80年代中期(约1985年),我主要为一个有点大的、基于/370的大型机应用程序工作。当时,该软件由大约110万行手写汇编组成(约120万行,包括辅助程序、仅语句、不包括空行等)。它有自己数据库引擎(*2)、屏幕处理(800多种不同的屏幕布局)、自己的编辑器(*3)、自己的网络堆栈、自己的运行时等等。在这一点上,一个典型的安装大约有100-300个全职用户。
这个项目从20世纪70年代初就开始了。我们制定了无包装器的策略,这意味着只使用我们确实理解的模块,并在必要时进行修改以适应系统,并且每4-6年重做一次整个代码库,以避免代码老化。毕竟,在现实世界中,应用程序的需求总是在变化,代码也是如此。这是一个风格问题,以避免背包解决方案。尽管如此,皮棉是多年来积累起来的,每隔4-6年就会重新开始一次。
当时,我们还与一家非常有前途的客户签订了一份新合同(*4),因此需要进行大量更改和调整,才能整合另外两个大型系统的功能并使其停业。所以现在是100%重新设计的绝佳时机。我们是一个由4名程序员组成的核心团队。与前几次不同的是,我们没有一个宽松的时间表,而是必须实施一切,直到已经商定的推出日期,设定不到3年后。一点也不酷。我们仍然有(想要也需要)进行一次彻底的重新设计,所以管理层(*5)确实额外指派了14个人,我们被转移到了类似设计师和首席程序员的角色。
当然,这些都是超级专家,而且比我们做的任何事情都要好得多。一如既往的游戏。就像他们经常提出的问题一样,为什么不使用高级语言(*6)、标准的DBS等等。一如既往的废话。说真的,对于这种规模的应用程序,编写这样的组件只是一个次要的附加内容。最终需要的代码比使用标准接口所需的代码更少-更不用说速度更快了,因为它完全符合我们的需要。
不管怎样,让我们继续这个故事吧。其中一位专家,让我们称他为W.先生,声称没有人能监督这么大的代码库,甚至是部分。见鬼,没有人能记住自己在5年或更长时间内写的所有代码。哈!这是一个我不能置之不理的说法,所以一个词变成了另一个词。一句话:我们同意打赌,一杯啤酒,我将能够(他说不能)从我在现有代码库中执行的随机程序中识别出10行代码片段的来源名称。我们同意了10个例子。日期定在第二天早上。
早晨到了,我什么也没准备,但他拿来一叠纸和一箱啤酒。我猜他的用意是通过给每一次失败赠送一瓶酒来表明我并没有获得多少好处。此外,他非常慷慨,每个片段都有整整一页。我并不真的需要那个。我不仅说出了他交给我的每个例程的名字,而且还说出了它属于哪个模块,用途是什么,一些工作方式,为什么变量是这样命名的,一些调用者,或者在之前或之后的页面上可以找到什么。此外,我还提到了最初的程序员(*7),因为他从我没有编写的程序中插入了几页,并确定了一段不再使用的代码,告诉他们为什么和什么取代了它-他把它从一个非常旧的版本中拉了出来:))。
与此同时,W先生变得越来越安静。不用说,关于代码的可读性或处理大型代码库的能力没有进一步的争论。当然,数据库之争仍然存在,但那是另一回事。
*2-在具有1.25MIBRAM的1MIPS机器上,每小时最多10.000个用户事务,每个事务访问更多的数据库-这就是您的大型机:))。
*3基于块的终端上的全屏编辑器。把它想象成服用类固醇的艾德。没有滚动或类似操作,但您可以在本地编辑显示的20行中的任何行,然后再将该页发送回主机,以便再次分类到源代码中(所有内容都基于库集合,这些库也同样作为版本控制系统工作)。
*4-大约十几个计划中的安装。对于大型机ERP软件来说,这就像是中了大奖,可能相当于卖出了数百万份左右的游戏。
*6-直到今天,还没有人能向我解释BUFFER:=RECORD。应该比MVC缓冲区更具可读性,RECORD-不,我们不是在谈论C语言,只有真正的语言可以决定:)。
*7-无论使用哪种语言,程序员的笔迹都是笔迹。有一种条件形成的方式,一种选择字段名称的可能性,等等。当与他人一起工作一段时间时,一个人清楚地知道要像一个声音说话一样倾听。
读者应该欣赏100-300个全职用户的统计数字。今天,这些东西中的大部分已经丢失了。我们安装的系统支持150个用户。在50兆赫的68030上。当然,我们有特殊的硬件来管理所有的串行通信。今天最棒的东西。想象一下,我们可以用20美元的树莓圆周率做什么。-约翰·威尔·哈东(Will Hartung)。
在写程序之前,人们会坐下来画一个粗略的结构。现代的等价物是在编辑器中直接编写最外层的控制结构,然后再充实它们。然而,现在的大多数人可能会走一条不同的道路:在他们的头脑中有一个非常粗略的概念,然后写下他们现在确定的实现的任何部分,通过丢弃他们已经写出来的东西来越来越简化心理模型。冲洗一下,重复一遍。自下而上,最后。-拉克兰德·邦曼(Rackandboneman)。
您通常也会有一个完整的代码库列表,这些代码库位于扇形折叠纸上,供您参考。-神经漫游者。
是的,这个故事应该持保留态度。没有人会每四到六年从头开始完全重写一个工作系统,特别是如果它有一百万行代码的话。那是在自找麻烦。如果您正在进行重写,您肯定不会避免使用高级语言。-JeremyP。
@JeremyP我猜我的名字是Nobody:))灾难就是在没有重新设计的情况下继续扩展一个软件超过10年。我们谈论的是日常业务的实时软件,而不是结案。每次更改都会变得更加困难,直到达到重新设计将释放许多用于与旧代码讨价还价的资源的地步。而且(对于相当大的应用程序和在大型机环境中),我仍然看不到切换到新的HLL的理由。这是在浪费资源。您可能想要调查一下大型机上的ASSM意味着什么。-拉夫扎恩(Raffzahn)
你不能在脑子里记住20行程序的原因是因为你不再需要了。同样的原因,你可能不知道任何电话号码。
但在过去,我们确实做到了这一点。我已经使用行编辑器(不是ed)编写了数千行代码、文本和文档。波特率为110、300、1200和2400。2400个波特率端子不错,但1200个是完全可用的。300和110,功能不是很好,但不是首选。在一个只有80x24的屏幕上。我从来不喜欢打印终端。它们还可以,但是玻璃TTY要好得多。
我过去常常在学校的主机上写英文论文。我们有一些类似于决选或流言的东西。你认为行编辑不好,你应该有一天试着用一台真正的打字机。行编辑器要好得多。
我的英语老师很友好地接受了印在格林巴尔背面的作文试卷。
行编辑器的许多习惯都传给了vi和emacs这样的编辑器。旧习惯很难改掉。在行编辑器中,您不能简单地翻页或滚动代码。相反,你要搜索。看着某人在有数百行滚动的代码文件中寻找一段代码,而他们本可以简单地搜索函数名就能立即到达那里,这仍然让我抓狂。至少用下翻页键吧,伙计!
我会怎么做,我不能举出细节,因为我忘了编辑器的命令,也不知道),而是简单地搜索一下,然后打印下10行。
随着您变得熟练,您很快就会学会将命令串在一起。搜索一行并将其删除。移到一行,进行更改,等等。我发出的几乎每个命令都以打印行命令结束,这样我就可以看到我做了什么。我使用的编辑器允许在命令行上编辑命令,因此我无需实际输入编辑器即可进行更改。
转到第10行,将第一个";old";更改为";new";,并覆盖文件(file.txt)。
今天,我们非常幸运地拥有计算资源、功能强大的代码编辑器和文字处理器。我们会变得相当疲惫。要想往回走是相当困难的。单屏幕,无回滚,无命令历史,行编辑器,使用Ctrl+S和Ctrl+Q停止和重新启动输出。如果你觉得这些听起来很可怕,那就是远远超过了使用卡片。纸牌太可怕了。
VI只是ED的视觉版本。如果您查看指向vi的硬链接的数量,您将看到多于1个。编辑器以不同的模式启动,具体取决于它的名称。-咖啡杯。
我想知道电话号码的比喻深入到什么程度:我仍然记得我所有十几岁朋友的90年代中期的电话号码。那些从行编辑器切换到文档编辑器的人是否也有类似的效果?他们需要记住的最后几件事在事发后的几十年里令人毛骨悚然地剩下了,因为他们发展了这项技能,用到了一定的时间,而且从那以后就不需要了?--汤米。
对打字机和行编辑器的赞成票:-)。人们可以继续排字和打字机.-彼得-恢复莫妮卡。
@PeterA.Schneider谢天谢地,我的英语补习班只需要边际,所以我不需要排版。:)-威尔·哈东(Will Hartung)。
顺便说一句,我认为用卡片编程,然后等待几分钟才能收到每次运行的论文输出,只是为了诊断出一个打字错误,这很像是用打字机写论文。在写东西之前,你真的想得很周到。当现代文字处理和激光打印出现时,大约在1990年的某个时候,一位政治学老师说,他以前从来没有见过这么好看、质量这么低的论文。我想对于代码也可以说类似的话。例如,复制/粘贴不是卡片的好选项……-彼得-让莫妮卡复职。
在交互式终端(和版本控制程序)出现之前,大多数程序员习惯于将源代码保存在80列穿孔卡片上。在我工作的第一台大型机(霍尼韦尔系统)上,工作流程通常如下所示:
初始源代码将在80列的编码板上输入,然后由打孔室打字员将这些代码转移到穿孔卡片上。这将比你自己打字要快得多,即使你可以使用打卡机。打孔室的女孩(是的,她们都是女性)也会做纸带,但这受到了普遍的厌恶,而且只用于没有读卡器的系统。
对源代码的任何编辑都将通过穿孔室完成,或者如果您有打卡机,则由您自己完成。这可以是手动打卡机(随时可以买到),也可以是类似于打孔室里的打孔机/翻译机。
当您的程序正常工作时,您可以将代码存储在源代码库中。请注意,这不是一个版本控制系统。它只允许您将工作代码保存在磁盘上(然后将卡片组存档在一个安全的柜子中)。然后,一旦您有了一个完整的工作程序,您就可以选择将整个磁带库存档到磁带上。
所有的编译器和汇编器都会接受标准的行编辑器命令,这样您就可以动态修改源代码库中的代码,而不必更新它们。
一旦您的修改生效,您就可以使用标准行编辑器更新源代码库,并重新归档该库。
然后,编辑卡组可以与原始卡组合并,也可以存储为增量更新,以防丢失源代码库(通常是由于磁盘故障)。
该系统很笨重,但它是有效的,向面向线路的终端的过渡是无缝的。如果你认为这种工作方式会让你发疯,请记住,如果你在一个正常的工作日里得到两份汇编,那你就很幸运了。即使那样,您的作业也将由操作员运行;您不允许自己运行作业,因为计算机时间是一种昂贵的商品。如果编译失败,更有见识的操作员会帮您纠正简单的键入错误(他们有时间这样做)。
在最右边可以看到一个80列的读卡器。这台机器每分钟能读2000张卡片。它旁边可以看到一个80列的卡片打孔机/翻译机。我记不清它的速度了,但大概是每分钟100张左右。这台演示中心的机器缺少9磁道磁带驱动器。除此之外,它与我们的开发机器非常相似。
+1这个!你们吃过艾德了吗?哈!我的第一份工作(西科维纳霍尼韦尔海洋系统事业部)就是如上所述的穿孔卡片--3到4天的按键转换时间,然后每个开发人员每周有两次亲身接触计算机的机会,每次一小时。我们在等的时候做了什么?嗯,你对桌上支票这几个字有什么印象吗?可能不会,你们这些懒鬼。不管怎么说,“米克,我确实经常打自己的牌--队里只有一张(刚毕业的大学生)--我甚至给026和029都编了程序!”喔!我记得那些日子--但是不要完全怀念它们……-达维德巴克
另外,我想让你知道我不是一个彻头彻尾的狼人,哈维·马德有一台DECSystem10(KA10,无寻呼),我们可以用110波特(后来是300波特)终端(ASR33,ASR43)访问。但那是学校的事。霍尼韦尔就是工业!-达维德巴克。
另外,我们在DEC10上也没有使用ed--那是轻量级的。我们使用了一个真正的编辑器,一个功能强大的编辑器,一个足够强大的行编辑器,你可以用它来编写Emacs:TECO。(附言:只有在你是该死的天才的情况下,才能尝试用TECO编写Emacs!)-Didavidbak。
键盘操作员,嗯?奢侈品!我们过得很艰难。我们不得不用一把X-acto刀切掉裂纹,当我们去RJE车站的时候。-Solomon Slow。
别忘了用记号笔在你的卡片组顶部放上对角线条纹(最好是在卡片上打出序号)--用户8725。
你必须记住,最初,在电传打字机而不是视频终端上经常使用,所以面向行的范例是有意义的。即使在那时,当你使用非常愚蠢的终端时(我记得IBM 3101因为某些原因不得不偶尔使用,只是更容易使用),或者当你把参数调到无法让全屏编辑器工作的程度时,了解足够的信息来浏览文件也是很有价值的。
早在20世纪80年代,我工作的那所大学仍然有DECWriter终端(当然是在1984年,在那之后的几年里)。我们也有终端,但很多做编程的学生喜欢DEC编写器,因为你可以拿到你所做的所有工作的硬拷贝,你可以带回家学习。在su上,行编辑器是必不可少的。
..