Programming languages 什么是故意编程

Programming languages 什么是故意编程,programming-languages,intentional-programming,Programming Languages,Intentional Programming,在我的阅读狂潮中,我偶然发现了一种叫做。 我有些理解,但我不完全理解。如果有人能更详细地解释,请解释。它是否在任何实际应用程序中使用?它似乎是一种编程方法,允许程序员扩展语言中的实际内容,以更紧密地遵循其原始意图,而不是将程序员的意图强制到语言的受限语法中 它明确提到LISP是一种支持这一点的语言,因此我建议您仔细阅读这一伟大的语言:)LISP宏正是本文所描述的,它允许您无限期地扩展语言,以涵盖几乎所有您想要表达的内容。(大型LISP系统的一个相当常见的结果是,您最终使用的是一种特定于领域的语言

在我的阅读狂潮中,我偶然发现了一种叫做。
我有些理解,但我不完全理解。如果有人能更详细地解释,请解释。它是否在任何实际应用程序中使用?

它似乎是一种编程方法,允许程序员扩展语言中的实际内容,以更紧密地遵循其原始意图,而不是将程序员的意图强制到语言的受限语法中

它明确提到LISP是一种支持这一点的语言,因此我建议您仔细阅读这一伟大的语言:)LISP宏正是本文所描述的,它允许您无限期地扩展语言,以涵盖几乎所有您想要表达的内容。(大型LISP系统的一个相当常见的结果是,您最终使用的是一种特定于领域的语言,这种语言非常适合编写特定的应用程序,即编写一个字处理器最终使用一种特定于字处理器的语言)


在最后一部分中,在一些项目中使用了yes LISP(以及有意编程)。Paul Graham是LISP的伟大支持者,它的其他例子包括最初的Crash Bandicoot(一个游戏对象创建系统是在LISP中为此而创建的,包括LISP PlayStation编译器)

这是你打算编程的地方,你不会只是意外地这么做

你让我开始了这个…
看起来C.Simonyi想从高级语言中进入下一个抽象层次。减少客户对开发人员进行每项更改的依赖性。。在代码中(对于不在开发中的人来说很神秘)。 因此,他发明了一种称为IP的新产品,它有一个所见即所得类型的GUI编辑器,用于创建特定于领域的模型。(也就是说,IP有一个GUI来为您的应用程序创建构建块。.LISP允许您创建元/构建块,但不是以领域专家可以轻松完成的方式。)
与UML中的模型一样,承诺是您可以通过“按下按钮”自动生成相应的源代码。因此,领域专家可以在未来调整模型,并按下烘焙按钮交付下一版本的应用程序。 它似乎利用了DSL,但还有一个额外的好处,多个用户创建的DSL可以通过内置的IP机制相互通信。。。这意味着财务模型和销售模型可以根据需要交互和重用块。与DSL一样,您可以从传达开发人员意图而不是消除实现语言约束的代码中获益

这个想法是给BA和领域专家更大的控制权,他们实际上知道需要什么

更新: 现实世界中的使用看起来像“还没有”。。尽管西蒙尼相信“”。
短篇故事:微软为了支持.Net框架压缩了IP,Simonyi离开了微软,成立了自己的公司“。。根据合同,他可以使用IP思想,但他必须从头重写他的工作原型。。(这应该会让他慢下来)。我想这项工作还在进行中。。并用C#编写(引导)

资料来源:

  • 斯科特·罗森伯格,麻省理工学院技术评论(2007)

想到昨天。。我对此一无所知。调查记者签字。回到日常工作:)

这与我凌晨2点在酒吧闲逛后回家,打开笔记本电脑“只是为了快速查看我的电子邮件,亲爱的”的情况正好相反

然后,第二天,当我睁开一只眼睛,在中午时分找到去洗手间的路时,我开始刷牙,意识到,牙膏从我嘴里滴出来,昨天晚上我做了4次SVN提交,关闭了3个bug,并想出了如何解决分布式锁定协议中的饥饿问题。我不知道这一切到底是怎么回事


或者也许这就是workmad3所说的。

在我看来,这似乎是软件工程的又一个时尚。我们已经看到了数千种:元编程、生成式编程、可视化编程等等。在很短的一段时间内,他们变得非常时尚,人们在任何地方都使用它,然后他们总是回到创建软件的旧方法


为什么??弗雷德里克·布鲁克斯(Frederick Brooks)在20多年前就已经回答了这个问题:杀死狼人是不可能的……

我对故意编程的理解略有不同(作为一个更一般的术语,不仅仅是查尔斯·西蒙尼在做什么)。它与流畅的界面紧密相连,可以在现代面向对象的语言中以不同程度的难度实现

其中一些概念来自领域驱动设计(事实上,“流畅的界面”一词已经被《蓝皮书——领域驱动设计:在软件的核心解决复杂性》一书的作者Eric Evans所推广)

其目的是使非程序员(即业务人员)能够读取业务层代码。这可以通过显式声明操作意图的类和方法名来实现。在我看来,显式的和有意的会产生可读性和可维护性很高的代码

考虑下面的两个例子,它们实现了同样的效果——为客户创建一个10%折扣的订单,并向订单中添加一些产品

//C#, Normal version
Customer customer = CustomerService.Get(23);

Order order = new Order();
//What is 0.1? Need to look at Discount property to understand
order.Discount = 0.1; 
order.Customer = customer;

//What's 34?
Product product = ProductService.Get(34); 
//Do we really care about Order stores OrderLines?
order.OrderLines.Add(new OrderLine(product, 1)); 

Product product2 = ProductService.Get(54);
order.OrderLines.Add(new OrderLine(product2, 2)); //What's 2?

Order.Submit();

//C#, Fluent version
//byId is named parameter, states that this method looks up customer by Id
ICustomerForOrderCreation customer = 
  CustomerService.GetCustomerForOrderCreation(byId: 23); 
//Explicit method to create a discount order and explicit percentage
Order order = customer.CreateDiscountOrder(10.Percent()) 
  .WithProduct(ProductService.Get(byId: 34))
  .WithProduct(ProductService.Get(byId: 54))
  .WithQuantity(2); //Explicit quantity

Order.Submit();

通过稍微改变编程风格,您可以更清楚地传达您的意图,并减少查看其他代码以了解发生了什么的工作量。

故意编程是对您的意图或目标进行编码。因此,它是面向目标的编程或规划。到管理部门来。

只是好奇而已。。LISP就是这么做的。。那么为什么C.Simonyi(re?)将其编写为IPP呢?因为LISP特性一直在以不同语法在其他语言中重新实现。出于某种原因(+24(-45))对大多数人来说并不是一种有吸引力的程序编写方式。。。想想看;)答案是描述性的,但我还是要回答