在Lisp解释器中,可以很容易地创建一个eval可以扩展宏的分支,并且在扩展它的过程中,调用函数来构建扩展表达式.我在使用低级宏之前已经完成了这个,很容易让人感到满意.
但是,在编译器中没有任何函数可以调用来构建扩展代码:在以下示例中可以非常简单地看到该问题:
(defmacro cube (n)
(let ((x (gensym)))
`(let ((,x ,n))
(* ,x ,x ,x))))
Run Code Online (Sandbox Code Playgroud)
当解析器扩展宏时,它会调用gensym并执行您期望的操作.当由编译器扩展,你会生成代码的let结合x,以(gensym)但gensymmed符号,只需要对编译器做正确的事.因为gensym在编译宏之前实际上没有调用它,所以它不是很有用.
当宏建立一个列表用作扩展使用map或时,这对我来说更加奇怪filter.
那么这是如何工作的呢?当然,编译后的代码不会被编译,(eval *macro-code*)因为它的效率非常低.有一个写得很好的Lisp编译器吗?
我正在尝试为局部变量创建注释.我知道我不能在生成的字节码中保留注释,但我应该能够在编译时通过执行以下操作来访问信息:
@Target({ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface Junk {
String value();
}
Run Code Online (Sandbox Code Playgroud)
只有,当我在下面指定了支持类型中具有"垃圾"的ProcessorFactory时,这不会被apt或javac处理:
class JunkTester {
public static void main(String[] args) {
@Junk String tmp = "Hello World";
System.out.println(tmp);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我之前移动@Junk注释时它会起作用 public static
思考和/或解决方法?
最近我一直在看看Haxe,构建一个部署到运行PHP的Apache的应用程序.好吧,虽然看起来它可能符合我的需求(部署到PHP,但没有使用糟糕的语言),但我没有找到任何东西来使实际的应用程序开发比构建传统的非MVC PHP应用程序更容易.是否有任何我缺少的工具包/框架,这是值得的吗?
如果它受到MVC的启发会很好,而且我肯定想要一个简单的方法来使用漂亮的URL,尽管我可以在必要时解决mod_rewrite规则.
编辑:我的想法是不在 PHP端使用像CakePHP这样的东西,而是在Haxe端使用像CakePHP这样的东西.
我有一个分布式系统(单个数据中心中的多个节点),我想要具有以下属性:
什么算法(最适合论文的链接)适合这个?
(我假设一些答案将包括P2P算法,但我过去遇到的大部分答案都更像是分布式哈希表,其中节点进入并接管键空间的某些部分,等等.我也认识到使用简单UDP消息进行多播可能是合适的,但现有的工作有助于使消息传递可靠吗?)
给出用于实现标签的SCHEMA
ITEM ItemId,ItemContent
标签TagId,TagName
ITEM_TAG ItemId,TagId
在使用标签选择时,限制返回的ITEMS数量的最佳方法是什么?
SELECT i.ItemContent, t.TagName FROM item i
INNER JOIN ItemTag it ON i.id = it.ItemId
INNER JOIN tag t ON t.id = it.TagId
Run Code Online (Sandbox Code Playgroud)
当然是最简单的方法可以让他们全部回来,但是使用限制子句会分解,因为你得到了每个标签的所有项目的副本,这些项目都计入LIMIT中的行数.