2 什么是“免费Monad +口译员”模式? 我见过有人在谈论带有Interpreter的Free Monad,尤其是在数据访问方面。这是什么模式?我什么时候可以使用它?它是如何工作的,我将如何实施? 据我所知(从职位如本),它是关于从数据访问分离模式。它与众所周知的存储库模式有何不同?他们似乎具有相同的动机。 95 design-patterns functional-programming haskell dsl monad
28 什么时候可以创建自己的编程语言? 从长远来看,是否有更好的杀手级应用程序,算法问题类别等等,可以创造出自己的语言? PS:可以肯定的是,我的意思是一种新的编程语言和一个编译器,而不是现有语言的新编译器。 编辑:谢谢你的答案。您能提供一些示例,这些示例绝对不需要创建DSL,或者说DSL可能是个好主意? 48 programming-languages dsl
3 LISP的宏在哪些方面比Ruby的创建DSL的“能力”更好? 使Ruby发光的一件事是能够更好地创建特定于域的语言,例如 西纳特拉 规格 耙 Ruby on Rails的ActiveRecord 尽管可以通过宏在LISP中复制这些库,但我认为Ruby的实现更为优雅。尽管如此,我认为在某些情况下LISP的宏可以比Ruby的宏更好,尽管我想不到。 那么,LISP的宏在哪一个领域比Ruby创建DSL的“能力”(如果有)更好? 更新 我之所以这样问,是因为现代编程语言正在接近LISP的奇点,例如 C获得了宏扩展预处理器,尽管非常原始并且容易出错 C#具有属性(尽管这是只读的),通过反射公开 Python增加了装饰器,尽管感觉很有限,但它可以修改函数的行为(以及v 3.0的类)。 Ruby TMTOWTDI,如果应用得当,则可以使用Ruby方式制作精美的DSL。 我想知道LISP的宏是否仅适用于特殊情况,而其他编程语言功能是否强大到足以提高抽象度来应对当今软件开发中的挑战。 21 ruby lisp dsl
5 .NET中是否有什么可以让我定义语法并生成编程语言的? 我有一门课程,教授要求我们为我们的最终项目创建DSL。他在Eclipse 的第一个xText课程中向我们介绍了。这是一门新课程,我对领域特定语言的含义还是有点模糊。 这是我目前的理解:领域特定语言是针对软件开发中的特定问题而创建的语言。DSL的示例是PHP,SQL,JavaScript,而相反的是Java,C#,C ++,Ruby等语言。 如果我错了,请随时纠正我。 我想知道的是:是否有用于.NET / Visual Studio的类似于Xtext的工具,该工具可以让我定义语法并可以使用活动图基于该工具生成编程语言? 18 .net dsl
4 数据库抽象-是否过高? 在接触了众多数据库抽象层之后,我开始怀疑每个库发明自己的不同范例来访问数据的意义何在。选择一种新的DAL感觉就像是在重新学习一种新的语言,通常我要做的只是说服该层输出我已经写在脑海中的SQL查询。 事实上,这甚至没有涉及可读性: # Exhibit A: A typical DAL rows = db(db.ips_x_users.ip_addr == '127.0.0.1') .inner_join(db.ips_x_users.user_id == db.users.id) .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10) # Exhibit B: Another typical DAL rows = db.ips_x_users .join(db.users, on=db.ips_x_users.user_id == db.users.id) .filter(db.ips_x_users.ip_addr == '127.0.0.1') .select(sort=~db.ips_x_users, limit=10) # Exhibit C: A hypothetical DAL based on standard SQL syntax rows = … 18 database sql api-design dsl
2 (基本)SQL查询在语义上是否等同于高阶函数? SQL基本上是map + fold + filter的特定于域的实例吗? 在我看来,以下SQL: SELECT name FROM fruits WHERE calories < 100 只是以下map + filter + fold操作的语法糖: var fruits = [{id : 1, name: 'orange', calories : 100}, {id : 2, name : 'banana', calories : 150}, {id : 3, name: 'apple', calories : '50'}]; fruits.map(function(fruit) { return … 11 functional-programming sql dsl
5 构建DSL:在通用语言之上编写脚本还是在独立语言之上编写脚本? 我正在讨论设计一种领域特定的语言,以简化给定的,晦涩的编程模型。辩论的一部分是是否要在现有语言/运行时(例如Java)之上构建(作为脚本)还是使其独立(自己的编译器&c)。 那些具有DSL设计经验的人,是否有赞成/反对意见,或对适当方法的肯定回答? 10 language-design scripting dsl runtime
5 什么时候将API视为嵌入式DSL? API和嵌入式领域特定语言(DSL)有什么区别? 只是语法吗? 考虑像OpenGL这样的API。与图形DSL有何不同? 换句话说,如果API足够复杂,是否可以将其视为嵌入式DSL? 10 api dsl