Compiler construction 编程语言需要哪些特性?

Compiler construction 编程语言需要哪些特性?,compiler-construction,programming-languages,language-design,language-features,compilation,Compiler Construction,Programming Languages,Language Design,Language Features,Compilation,最近我的大学为本科生设立了大型项目。其中一个项目是创建一种新的编程语言,其中包含了其他语言中最理想的部分。现在,我知道很多事情对我来说是不可能有效实现的(甚至是非常接近的)——例如,让语言非常接近自然语言 有一些整洁的特性会很好,比如高阶函数和用于交换两个变量值的运算符。然而,我努力想了很多,所以一些建议将非常感谢-最好的一个会被标记为答案。不过,我只是在这里寻找想法,而不是如何实现它们的方法。我喜欢的功能: 关联数组,这样我就可以做类似于price[“apple”]:=0.99 对于每个循环

最近我的大学为本科生设立了大型项目。其中一个项目是创建一种新的编程语言,其中包含了其他语言中最理想的部分。现在,我知道很多事情对我来说是不可能有效实现的(甚至是非常接近的)——例如,让语言非常接近自然语言

有一些整洁的特性会很好,比如高阶函数和用于交换两个变量值的运算符。然而,我努力想了很多,所以一些建议将非常感谢-最好的一个会被标记为答案。不过,我只是在这里寻找想法,而不是如何实现它们的方法。

我喜欢的功能:

  • 关联数组,这样我就可以做类似于
    price[“apple”]:=0.99
  • 对于每个循环,我不必担心索引集合中不存在的元素
  • 用于赋值的
    :=
    运算符,而不是
    =
    ;)
  • 允许数值以外的内容的开关大小写语句,例如:
    case“apple”:price:=0.99
  • 作为有效数据类型的数字/日期范围
  • 具有命名参数和默认值的函数
  • 对正则表达式操作的本机支持(如Perl)
我喜欢的功能:

  • 关联数组,这样我就可以做类似于
    price[“apple”]:=0.99
  • 对于每个循环,我不必担心索引集合中不存在的元素
  • 用于赋值的
    :=
    运算符,而不是
    =
    ;)
  • 允许数值以外的内容的开关大小写语句,例如:
    case“apple”:price:=0.99
  • 作为有效数据类型的数字/日期范围
  • 具有命名参数和默认值的函数
  • 对正则表达式操作的本机支持(如Perl)

多重继承会很好…尽管它在任何当前语言中都不可用。

多重继承会很好…尽管它在任何当前语言中都不可用。

最强大的一个:

  • 动态类型
  • 不会隐藏任何东西的语言
  • 作为一等公民的职能。(允许使用函数式编程)
  • 运行时自省
  • 语言允许过度驱动默认函数和对象
  • 元编程
  • 动态代码生成
  • 用这种语言扩展语言(只有lisp有这种语言)
    • 最强大的一个:

      • 动态类型
      • 不会隐藏任何东西的语言
      • 作为一等公民的职能。(允许使用函数式编程)
      • 运行时自省
      • 语言允许过度驱动默认函数和对象
      • 元编程
      • 动态代码生成
      • 用这种语言扩展语言(只有lisp有这种语言)

      目前,我渴望一种类似JavaScript eval的语言功能,它具有执行eval’ed指令序列的额外功能:

      execute_THIS( a += b; c = myfunc(a); if c < 0 exit(); );
      
      执行它(a+=b;c=myfunc(a);如果c<0退出(););
      
      也就是说,语言运行时可以解释和执行用该语言编写的语句


      --p

      目前,我渴望一种类似JavaScript eval的语言功能,它具有执行eval’ed指令序列的额外功能:

      execute_THIS( a += b; c = myfunc(a); if c < 0 exit(); );
      
      执行它(a+=b;c=myfunc(a);如果c<0退出(););
      
      也就是说,语言运行时可以解释和执行用该语言编写的语句


      --p

      虽然你有接受答案的标准,但这仍然是相当主观的。我认为你的理解是错误的。你会发现需要解决的问题,如果你不能用其他语言解决(不太可能),你可以自己解决。即使你能用其他语言来做,你最好的办法就是先找出你遇到的问题,然后解决问题的方法就会变得更加有机。回答这个问题是不可能的,因为它太笼统了。有些人可能喜欢极简主义(Scheme),或者一种可能有太多特性的语言(C++)。或者你可能只是想要一种特定领域的语言(PHP)来解决一个特定的问题!虽然你有接受答案的标准,但这仍然是相当主观的。我认为你的理解是错误的。你会发现需要解决的问题,如果你不能用其他语言解决(不太可能),你可以自己解决。即使你能用其他语言来做,你最好的办法就是先找出你遇到的问题,然后解决问题的方法就会变得更加有机。回答这个问题是不可能的,因为它太笼统了。有些人可能喜欢极简主义(Scheme),或者一种可能有太多特性的语言(C++)。或者你可能只是想要一种特定领域的语言(PHP)来解决一个特定的问题!无
      :=
      操作员。大多数语言只有
      =
      用于赋值和
      =
      用于比较。而且
      :=
      看起来真的,真的很难看:)我必须查一下
      :=
      的意思,我喜欢它@拉德克:当然,但这是我的答案,我喜欢。我认为赋值应该有一个比比较运算符更不同的运算符。当一个人很累的时候,
      =
      看起来就像是
      =
      。;):=似乎是一个很好的例子,因为分配的=运算符似乎与我们从小就理解的平等观念相矛盾。
      :=
      Pacal是有史以来最糟糕的语言,他们强迫你在学校里学习。没有
      :=
      运算符。大多数语言只有
      =
      用于赋值和
      =
      用于比较。而且
      :=
      看起来真的,真的很难看:)我必须查一下
      :=
      的意思,我喜欢它@拉德克:当然,但这是我的答案,我喜欢。我认为作业应该有一个比comp更不同的操作符