为什么是平文本文件的技术状态表示的源代码?

肯定的预处理和编译器需要看到一个平面文件表示的文件,但这是很容易建立。

在我看来,某些形式的XML或二进制数据可以代表很多的想法,是非常困难的轨道,否则。

例如,你可以嵌入UML图到你的代码。他们可能产生的半自动和附加说明的由开发商强调重要的方面的设计。交互图。哎呀,嵌入的任何用户绘制可能会让事情更清楚了。

另一个想法是嵌入评码的评论,对进入代码。

可能有各种各样的艾滋病做出合并多个分支机构更加容易。

我热衷于不仅仅是跟踪码的复盖范围,但也在寻求在本部件的编码所涵盖的一个自动化测试。最难的部分是跟踪的那个代码,即使是作为来源是修改。例如,移动功能从一个文件的另一,等等。这可以与Guid,但是他们而不是侵入性的嵌入的权利在文本的文件。在一个丰富的文件的格式,他们可能是自动的,并不引人注目。

所以为什么没有IDEs(据我所知,无论如何),这能让你在工作中的代码这样?

编辑: 上月7日,2009年。

你们中的大多数得到了非常挂在单词"二元"在我的问题。我收回它。图片XML,非常微标记你的代码。即时前你把它交给你的正常预处理器或编译器,你带了所有的XML标记,并通过对刚源代码。在这种形式下,你仍然可以做所有的正常的事情要的文件:差异、合并,编辑,工作与在一个简单的和最小的编辑,喂他们进入成千上万的工具。是的,差异、合并和编辑,直接与最小的XML标记,并得到一个稍微更加复杂。但我认为值可能是巨大的。

如果一个IDE存在尊重所有的XML,可以添加这么多比我们能做些什么今天。

例如,你DOxygen意见实际上可能 看看 像最后DOxygen输出。

当有人想做一个代码审查,像码的合作者,他们可以标记的源代码,在地方。

XML甚至可能被隐藏在背后的意见。

// <comment author="mcruikshank" date="2009-10-07">
// Please refactor to Delegate.
// </comment>

然后如果你想使用六软件,你就可以跳过的意见。

如果我想用一个国家的美术编辑,我可以看到,在大约十几个不同的有用方式。

所以,这是我粗略的想法。这不是"建筑模块"的照片,你拖在屏幕上...我没那么坚果。:)

有帮助吗?

解决方案

  • 你可以比较他们
  • 你可以把它们合并
  • 任何人都可以编辑这些
  • 他们是简单和容易处理
  • 他们普遍可以访问的成千上万的工具

其他提示

在我看来,与特定工具捆绑在一起可能会超过任何可能的好处。

使用纯文本源(这似乎是你正在讨论的内容,而不是平面文件本身)我可以将块粘贴到电子邮件中,使用简单的版本控制系统(非常重要! ),将代码写入Stack Overflow的注释中,在任意数量的平台上使用一千个文本编辑器等。

使用代码的二进制表示,我需要使用专门的编辑器来查看或编辑它。即使可以生成基于文本的表示,也不能轻易地将更改回滚到规范版本。

Smalltalk是一个基于图像的环境。您不再使用磁盘上的文件中的代码。您正在运行并修改运行时的实际对象。它仍然是文本,但类不存储在人类可读文件中。相反,整个对象存储器(图像)以二进制格式存储在文件中。

但那些尝试使用smalltalk的人最大的抱怨是因为它不使用文件。我们拥有的大多数基于文件的工具(vim,emacs,eclipse,vs.net,unix工具)将不得不放弃使用smalltalk自己的工具。并不是说在smalltalk中提供的工具不如。这是完全不同的。

为什么论文是用文字写的?为什么法律文件用文字写成?为什么幻想小说用文字写成?因为文本是持久化思想的唯一最佳形式 -

文字是人们如何思考,表达,理解和坚持概念 - 以及它们的复杂性,层次结构和相互关系。

Lisp程序不是平面文件。它们是数据结构的序列化。这种代码作为数据是一个古老的想法,实际上是计算机科学中最伟大的想法之一。

<!> lt;?xml version = <!> quot; 1.0 <!> quot; encoding = <!> quot; UTF-8 <!>;?<!> gt; <!> lt; code <!> gt;平面文件更易于阅读。<!> lt; / code <!> gt ; LT <!>; / xml的GT <!>;

这里就是为什么:

  • 人类的可读性。这很容易发现了一个错误,在文件和分析方法。也可以大声读出。这是一个,你只是无法获得与XML,并且可能会做一个区别,特别在客户支持。

  • 保险对过时。只要regex存在,这是可以写很好的分析器只需几行的代码。

  • 杠杆作用。几乎一切都有,从修订控制系统,以编辑过滤器,可以检查、合并和运作上的平面文件。合并XML可以是一个烂摊子。

  • 整合能力,他们不容易用的UNIX工具,例如查询、切割或sed。

这是一个很好的问题。 FWIW,我很想看到一个Wiki风格的代码管理工具。每个功能单元都有自己的维基页面。构建工具将源代码整合到Wiki中。会有一个<!> quot; discuss <!> quot;页面链接到该页面,人们可以在这里争论算法,API等。

哎呀,从预先存在的Wiki实现中攻击一个并不难。任何人......?

具有讽刺意味的是,有些编程结构正好使用了你所描述的内容。

例如,SQL Server Integration Services涉及通过将组件拖动到可视设计图面来编写逻辑流程,将其保存为精确描述该后端的XML文件。

另一方面,SSIS很难进行源代码控制。在其中设计任何类型的复杂逻辑也是相当困难的:如果您需要更多<!>“控制<!>”,则需要将VB.NET代码编码到组件中,这会带来我们回到到我们开始的地方。

我想,作为一名程序员,您应该考虑这样一个事实:对于问题的每个解决方案都会产生后果。并非一切都可以(有些人认为应该)用UML表示。不是所有东西都可以用视觉表现并非所有内容都可以简化为具有一致的二进制文件表示。

话虽如此,我认为将代码降级为二进制格式(其中大部分也倾向于专有)的缺点远远超过了以纯文本形式使用它们的优势。

恕我直言,XML和二进制格式将是一团糟,不会带来任何重大好处。

OTOH,一个相关的想法是写入数据库,每个记录可能有一个函数,或者可能是分层结构。围绕这个概念创建的IDE可以使导航源更自然,更容易隐藏与您在给定时刻阅读的代码无关的任何内容。

人们已经尝试了很长时间来创建一个超出平面文件的编辑环境,并且每个人都在某种程度上失败了。我见过的最接近的是查尔斯·西蒙尼的故意编程的原型,但后来被降级为可视化DSL创建工具。

无论代码如何在内存中存储或表示,最终它必须是可呈现的并且可以修改为文本(没有格式化更改),因为这是我们所知道的最简单方式表达通过编程解决问题所需的大部分抽象概念。

对于平面文件,您可以免费获得此文件,任何普通的旧文本编辑器(具有正确的字符编码支持)都可以使用。

史蒂夫麦康奈尔一如既往地做对了 - 你为其他程序员(包括你自己)编写程序,而不是为计算机编写程序。

也就是说,Microsoft Visual Studio必须在内部管理您以非常结构化的格式编写的代码,否则您将无法执行<!>“查找所有引用<!>”;或者如此容易地重命名或重新考虑变量和方法。如果有人知道这是如何工作的,我会感兴趣。

实际上,大约10年前,Charles Simonyi早期的故意编程原型试图将平面文件转移到代码的树形表示中,这些代码可以以不同的方式显示。从理论上讲,领域专家,PM和软件工程师都可以以对他们有用的方式看到(并拼凑在一起)应用程序代码,并且可以在声明性<!>“意图<!>的层次结构上构建产品。 “,只在需要的时候深入挖掘低级代码。

ETA(问题中的每个请求)有一份一个他在微软研究网站上的早期论文。不幸的是,由于Simonyi几年前离开MS成立了一家独立的公司,我认为原型仍然无法下载。我在微软时看到了一些演示,但我不确定他早期原型的分发范围有多广。

他的公司 IntentSoft 对于他们计划向市场推出的产品仍然保持沉默,如果有的话,但MSR出现的一些早期的东西非常有趣。

存储模型是一些二进制格式,但我不确定在MSR项目中有多少这些细节被披露,我确信自早期实施以来有些事情已经发生了变化。

为什么文本文件会统治?因为麦克罗伊的考验。让一个程序的输出作为另一个程序的源代码是可接受的至关重要,而文本文件是最简单的工作。

Labview Simulink 是两个图形编程环境。它们在各自的领域都很流行(分别与PC的硬件接口和建模控制系统),但在这些领域之外并没有太多使用。我和那些同时都是粉丝的人一起工作过,但我自己也从未接触过他们。

你提到我们应该使用<!>“某种形式的XML <!>”;?您认为XHTML和XAML是什么?

XML也只是一个平面文件。

我想,老习惯会变得很难。

直到最近,没有很多高质量,高性能,广泛可用的库用于结构化数据的一般存储。而且我强调即使在今天也将XML放在该类别中 - 太冗长,过于密集而无法处理,太挑剔。

如今,我最喜欢使用的数据不需要人类可读的 SQLite 并制作一个数据库。将功能齐全的SQL数据库嵌入到任何应用程序中都非常容易......有C,Perl,Python,PHP等的绑定......它是开源的,非常快速,可靠,轻量级。

我<!> LT; 3 SQLite。

有人试过 数学

上面的图片来自一个旧版本,但它是最好的谷歌可以给我。

无论如何......将那里的第一个等式与 Math.Integrate(1 /(Math.Pow(<!> quot; x <!>;,3)-1),<!> x <!>“;)就像你用大多数常见语言编写纯文本一样编写。 Imo数学表示更容易阅读,这仍然是一个非常小的等式。

是的,如果需要,您可以将代码作为纯文本输入和复制粘贴。

将其视为下一代语法突出显示。我敢打赌,除了数学之外还有很多其他东西可以从这种表现中获益。

很明显为什么纯文本是王道。但同样明显的是,为什么结构化格式会更好。

仅举一个例子:如果重命名方法,你的差异/合并/源代码控制工具就能告诉你只有一件事发生了变化。我们今天使用的工具会显示一长串的更改,一个用于调用或声明方法的每个位置和文件。

(顺便说一下,这篇文章没有回答你可能已经注意到的问题)

我们看到的关于DSL的趋势是在阅读您的问题时首先想到的。问题在于模型(如UML)和实现之间不存在一对一的关系。微软和其他人正在努力实现这一目标,因此您可以将您的应用程序创建为类似UML的东西,然后可以生成代码。重要的是 - 当您选择更改代码时,模型将再次反映这一点。

Windows Workflow Foundation就是一个很好的例子。原因是后台有平面文件和/或XML,但通常最终会在业务流程工具中定义业务逻辑。这很酷!

我们需要更多的<!>“软件工厂<!>”;思考,并将在未来看到更丰富的IDE体验,但只要计算机以零和1运行,平面文本文件就可以(并且可能)始终是一个中间阶段。如前所述,简单的文本文件非常灵活。

我非常想知道同样的事情,如答案所述: 您希望存在哪些工具/应用程序/任何内容?

虽然很容易想象出很多好处,但我认为必须解决的最大障碍是没有人能够提供可行的替代方案。

当人们想到将源代码存储为文本的替代方案时,他们似乎经常会立即考虑图形表示(我在这里指的是已经可用的商业产品 - 例如HP-vee)。 如果我们看一下像FPGA设计师这样的人的经验,我们会看到编程(专门)只是图形化不起作用 - 因此像Verilog和VHDL这样的语言。

但是我没有看到源的存储必然需要首先绑定到编写它的方法。 源的输入可以在很大程度上以文本形式完成 - 这意味着仍然可以实现复制/粘贴的问题。 但我也看到,通过允许在标记化元源的基础上完成合并和回滚,我们可以实现更准确,更强大的操作工具。

Visual FoxPro使用dbf表结构来存储表单,报表,类库等的代码和元数据。这些是二进制文件。它还将代码存储在实际文本文件的prg文件中......

我看到的唯一优势是能够使用内置的VFP数据语言对这些文件进行代码搜索......除此之外,它还是一个负担。至少每隔几个月,其中一个文件会因为没有明显原因而被破坏。与源代码控制集成并且差异非常痛苦。有解决方法,但涉及暂时将文件转换为文本!

有关废除传统文本编程的语言示例,请参阅熔岩语言

我最近发现的另一件好事是 subtext2 视频演示)。

程序代码定义了使用xml或二进制格式创建的结构。与XML或二进制表示形式相比,您的编程语言更直接地表示程序的结构。当你为文档提供结构时,你有没有注意到Word是如何对你行为不端的? WordPerfect至少会“显示代码”,以便您查看文档下方的内容。平面文件为您的程序执行相同的操作。

干净的想法。我自己想知道规模较小......更小,为什么IDE X不能生成这个或那个。

我不知道我是否有能力作为一名程序员开发像你所说的那样酷或复杂的东西,或者我正在考虑的东西,但我会有兴趣尝试。

也许从.NET,Eclipse,Netbeans等的一些插件开始?展示可以做什么,并开始编码的新趋势。

我认为这方面的另一个方面是代码是重要的。它将被执行。例如,在你的UML示例中,我认为而不是在你的<!> quot; source blob <中包含UML(可能是在某些编辑器中创建的,与<!> quot; code <!>“没有直接关系); !> QUOT;几乎没用。更好的方法是直接从代码生成UML,因此它描述了代码所处的确切状态,作为理解代码的工具,而不是提醒代码应该是什么。

多年来,我们一直在使用自动化doc工具。虽然代码中的实际程序员生成的注释可能与代码不同步,但像JavaDoc等工具忠实地表示对象上的方法,返回类型,参数等。它们代表它们实际存在,而不是某些无休止的设计会议产生的神器。

在我看来,如果你可以随意地将随机工件添加到某些<!>“源blob <!>”中,这些可能会过时并且不会立即生效。如果你可以直接从代码中生成这样的工件,那么让你的构建过程这么做的微小工作远比前面提到的远离纯文本源文件的陷阱要好得多。

与此相关,解释您的原因想要使用纯文本UML工具 UMLGraph )似乎几乎同样适用以及你想要纯文本源文件的原因。

这可能无法完全回答您的问题,但这里的编辑器允许更高的代码视图: http://webpages.charter.net/edreamleo/front.html

我认为在开发中使用文本文件的原因是它们对各种开发工具都是通用的。您可以使用简单的文本编辑器查看内部甚至修复一些错误(您无法在二进制文件中执行此操作,因为您永远不知道任何修复将如何破坏其他数据)。但是,这并不意味着文本文件最适合所有这些目的。

当然,您可以对它们进行区分和合并。但这并不意味着diff / merge工具理解由该文本文件编码的数据的不同结构。您可以执行diff / merge,但(特别是在XML文件中看到)diff工具不会正确显示差异,也就是说,它会显示文件的不同之处以及工具的哪些部分<!> QUOT;认为QUOT <!>;是相同的。但它不会向您展示XML文件结构的差异 - 它只会匹配看起来相同的行。

无论我们是使用二进制文件还是文本文件,差异/合并工具总是更好地处理此文件所代表的数据结构,而不是行和字符。例如,对于C ++或Java文件,报告某些标识符更改了其名称,报告某些部分被其他if(){}包围,但另一方面,忽略缩进或EOL字符的更改。最好的方法是将文件读入内部结构并使用特定格式规则转储。这样,差异将通过内部结构进行,合并结果将从合并的内部结构生成。

现代节目由扁平片组成,但它们是扁平的吗?有使用,包括和对象库等。普通的函数调用是窥视不同的地方。由于有多个线程等,逻辑并不平坦。

我有同样的愿景!我真的希望这会存在。

你可能想看看Sun的研究语言Fortress。它对源代码中的公式有特殊支持。以下引用来自维基百科

  

Fortress正在设计中   开头有多个句法   样式表。源代码可以   呈现为ASCII文本,Unicode或   作为一个漂亮的形象。这将允许   用于支持数学符号   和渲染中的其他符号   输出更容易阅读。

文本作为源持续存在的主要原因是缺少powertools,例如版本控制,用于非文本日期。这是基于我使用Smalltalk的经验,其中普通字节代码始终保存在核心转储中。在非文本系统中,使用今天的工具,团队开发是一场噩梦。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top