假设我想为函数式语言实现解释器.我想了解这样做所涉及的问题以及可用的合适文献.这是一种处于早期设计阶段的新语言,这就是问题范围广泛的原因.
出于本讨论的目的,我们可以假设语言的目的并不重要,并且如果它在编写解释器的容易性方面产生显着差异,则可以更改其功能特征(甚至是大幅度改变).
麻省理工学院网站上有一份计算机程序结构和解释的在线副本,以及使用Scheme的麻省理工学院6.001讲座的视频,于1986年在惠普录制.这些都是语言设计的一个很好的介绍.
我不会命名的C++编译器允许你获取文字的地址,int*p =&42;
显然42是一个r值,大多数编译器拒绝这样做.
为什么编译器允许这样做?除了射击自己之外,你能做些什么呢?
如果我有int x[10]和int *y,我怎么能分辨出两者之间的区别?
我有两个想法:
sizeof()是不同的.
&x有不同的类型---
int (*p)[10] = &x工作但不是int **q = &x.
还有其他人?
在一些模板库代码中,我需要确定指针是"真实"指针还是从数组中退化.我不能查看源代码,因为在我编写库之前库用户不存在....我可以通过重写代码解决这个问题,所以现在这只是一个理论练习.
当,如果有的话,可以delete和free互换在C++中使用?
我的担忧如下:假设使用malloc/ free和
new/ delete(更不用说new[]/ delete[])有不正确的混淆.然而delete,free做同样的事情;
幸运的是,这在测试中没有受到影响.稍后这可能会导致生产崩溃.
我怎样才能强制执行某种检查以防止这种情况发生?如果这两个人混在一起,我可以得到警告吗?如果不是在编译时,可能在运行时有一些代码检测?我该如何处理?
这个问题的目的是找到避免在使用中无意混淆的方法.