Questions tagged «pl.programming-languages»

编程语言尤其关注其语义。

10
对于一种可编程语言,是否必须基于上下文无关语法
实际上,对于最终可以被编译/转换为系统级指令的语言,是否有必要采用上下文无关的语法? 例如:所有编程/脚本语言都是上下文无关的语法吗?Java是基于CFG的,但是实际上所有编程语言都是基于CFG的吗? 它似乎不是强制性的,但是我的理解存在空白。 问题的上下文:我正在查看Java语言规范,该规范还提供了语法规则。这使我想到了这个问题。

2
线性逻辑的民间模型是什么?
线性类型在PL中最常见的应用可能是使用它们来提供控制别名的语言(即,线性值或多或少都具有指向它的单个指针)。 但是这种用法和线性逻辑的典型称谓模型之间存在一些不匹配。IIRC的Benton表明,如果笛卡尔封闭类别具有很强的可交换单子,那么其代数类别将是对称单曲面封闭(即线性逻辑模型)。但是该定理不适用于别名控制用法,因为状态monad不是可交换的。确实,在过去的几年中,辛普森和他的同事们给出了一般强单子的计算,而线性单子不是术语计算。 所以我的问题是,带有状态的线性语言的指称语义是什么?是否存在一个非退化(即张量不是笛卡尔乘积)对称单项封闭类别,可以在其中建模分配,读取和线性更新?



2
分析垃圾收集的编程语言中指定的最坏情况数据结构的运行时间时,可以忽略GC的成本吗?
我只是意识到我一直以为我的问题的答案是“是”,但我没有充分的理由。我想象也许有一个垃圾收集器,可证明只引入了最坏情况的减速。有没有我可以引用的权威参考文献?就我而言,如果这些细节很重要,那么我将使用纯功能数据结构,并使用Standard ML。O (1 )O(1)O(1) 当应用于例如Java中指定的数据结构时,也许这个问题会更加相关?使用Java的算法/数据结构教科书中可能有一些相关的讨论?(我知道Sedgewick具有Java版本,但是我只能访问C版本。)


2
TeX(作为一种编程语言)的语义是否曾经被形式化?
在我看来,使用的宏语言可以看作是某种术语重写系统或某种具有按名字调用作用域的编程语言。ŤËXŤËX\TeX 甚至引擎的现代实现(例如)都以非常直接的方式解释代码,而且我不知道有任何优化执行的尝试(就像现代的优化解释器可以做到的那样)。但是,为类的语言设计正确的优化过程将非常困难,因为宏重新定义可以具有“远距离操作”,并且具有通过按名称调用它们来重新定义宏的能力。X e TŤËXŤËX\TeXŤX Ë ŤËXXËŤËX\mathit{Xe}\TeXŤËXŤËX\TeX 因此,为实现一种假设的优化解释器在实践中听起来是一个非常困难的问题,但同时也是一个非常有用的问题,因为在数学和科学领域都被广泛使用,并且编译速度慢是该系统的一个已知缺点。请注意,大部分时间都花在解释代码上,而不是在计算实际的排版,尤其是在使用计算量大的包(例如)时。ŤŤËXŤËX\TeXŤËXŤËX\TeXtikz 语言的正式语义可能是解决该问题的开始。那么编程语言的语义是否已被形式化了?ŤËXŤËX\TeX

5
编译器正确性证明
我正在寻找涵盖编译器正确性证明的教程材料,最好是在初等研究生的水平上使用指称方法。 另外,您是否知道一些我可以用来说明问题的简单编译器示例?(我想到的第一个示例是从infix到postfix表达式的转换器。但是除了如何对语法进行归纳之外,它没有显示出任何有趣的东西。)

7
我们怎么知道形式方法有效?
形式化方法的一个重要目标是通过自动化或人工指导的方法来证明系统的正确性。但是,似乎即使您可以提供正确性证明,也可能无法保证系统不会失败。例如: 规范可能无法正确地对系统进行建模,或者生产系统可能过于复杂而无法建模,或者由于相互矛盾的要求,系统可能固有地存在缺陷。已知哪些技术可以测试规范是否完全有意义? 证明过程也可能有缺陷!谁知道这些推理规则是正确和合法的?此外,证明可能非常大,我们如何知道它们不包含错误?这是de Millo,Lipton和Perlis的“社会过程以及定理和程序证明”的批评的核心。现代形式方法研究人员如何回应这种批评? 在运行时,有许多不确定的事件和因素会严重影响系统。例如,宇宙射线会以不可预测的方式改变RAM,更一般地说,我们无法保证硬件不会遭受拜占庭式的故障,而Lamport证明了这种故障很难克服。因此,静态系统的正确性不能保证系统不会失败!是否有已知的技术可以解释真实硬件的易失性? 目前,测试是我们确定软件有效的最重要工具。似乎它应该是形式方法的补充工具。但是,我主要看到的是侧重于形式方法或测试的研究。关于两者结合的已知知识?

1
斯科特的随机λ计算
最近,达娜·斯科特(Dana Scott)提出了随机Lambda演算,这是一种基于称为图模型的语义的将概率元素引入(无类型的)Lambda演算的尝试。您可以在此处在线找到他的幻灯片,并在Journal of Applied Logic(应用逻辑)第1卷中找到他的论文。12(2014)。 但是,通过在Web上进行快速搜索,我发现了类似的先前研究,例如,关于Hindley-Milner类型系统的研究。他们引入概率语义的方式类似于Scott的方式(在前者中,他们使用单子,而在后者中,Scott使用连续传递样式)。 在理论本身或可能的应用方面,斯科特的作品与现有的作品有何不同?

2
全部功能编程的局限性是什么?
整体功能编程的局限性是什么?它不是图灵完备的,但仍支持可能程序的很大一部分。是否有可以用图灵完备的语言而不是全部功能的语言编写的重要构造? 可以完全静态分析以全部功能语言编写的程序,而图灵完备语言的静态分析却受制于停顿问题,这是否正确?我的意思并不是说在总功能语言中可以静态确定一切,因为有些事情只能在运行时知道,但是我的意思是理论上可以对以理想的总功能编程语言编写的程序进行分析,以便所有理论上可以静态确定,也可以静态确定。还是在无法使静态分析完成的全部功能语言中仍然存在无法确定的问题?无论使用哪种语言编写,某些问题始终是无法确定的,但是我对继承给该语言的此类问题很感兴趣,

3
框架规则作为变更保存者?
一帧的规则,像下面给出的一个,捕获的想法,给定一个计划c与前提p保存在运行前和后置条件q保存后,一些不相交的条件r应之前和之后都保持c运行。(连接词*要求其参数不相交。)通常,前置条件和后置条件是堆的状态,并且c是一种有效的程序,可以某种方式修改堆。 {p} c {q} ----------------- (where no free variable in r is modified by c) {p * r} c {q * r} 我所看到的关于框架规则的讨论似乎总是集中在如何r保留堆的不相交部分上。这将启用“局部推理”:在对具有影响的效果进行推理时c,我们可以忽略r堆的一部分,而只关心实际更改的部分。但是另一种看待它的方法是,即使从那里p到qr现在都保留了从到的更改。换句话说,重要的是我们要以后置条件结束{q * r},而不是{q' * r}其他条件q'。 所以,我的问题是,是否有框架规则,讨论或利用保存-的变化-从-的任何治疗p至- q事情。

6
可以通过语法表达哪些计算模型?
这是语法程序的重新表述吗?以前由Vag提出,并有评论者的很多建议。 可以通过哪种方式将语法视为指定计算模型?例如,如果我们采用简单的无上下文语法,例如 G ::= '1' -> '0' '+' '1' '1' -> '1' '+' '0' '2' -> '2' '+' '0' '2' -> '1' '+' '1' '2' -> '0' '+' '2' '3' -> '3' '+' '0' '3' -> '2' '+' '1' '3' -> '1' '+' '2' '3' -> '1' '+' '2' 假设解析器不区分终端符号和非终端符号,如我在此处所演示的,则可以对不超过3的数字执行简单的算法。 …

2
隐式与显式子类型化
该页面断言 许多语言不使用隐式子类型(结构等效),而是使用显式/声明子类型(声明等效) 我主要使用的编程语言使用显式子类型。如上面的注释所述,隐式子类型化的优点是什么?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.