小编apg*_*apg的帖子

如何在Lisp编译器中编译宏?

在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编译器吗?

lisp compiler-construction macros common-lisp

21
推荐指数
2
解决办法
3068
查看次数

如何创建处理局部变量的注释处理器?

我正在尝试为局部变量创建注释.我知道我不能在生成的字节码中保留注释,但我应该能够在编译时通过执行以下操作来访问信息:

@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

思考和/或解决方法?

java annotations

8
推荐指数
2
解决办法
4174
查看次数

用于Haxe在PHP环境中部署的Web"框架"?

最近我一直在看看Haxe,构建一个部署到运行PHP的Apache的应用程序.好吧,虽然看起来它可能符合我的需求(部署到PHP,但没有使用糟糕的语言),但我没有找到任何东西来使实际的应用程序开发比构建传统的非MVC PHP应用程序更容易.是否有任何我缺少的工具包/框架,这是值得的吗?

如果它受到MVC的启发会很好,而且我肯定想要一个简单的方法来使用漂亮的URL,尽管我可以在必要时解决mod_rewrite规则.

编辑:我的想法是不在 PHP端使用像CakePHP这样的东西,而是在Haxe端使用像CakePHP这样的东西.

php haxe web-frameworks

6
推荐指数
1
解决办法
2961
查看次数

在分布式系统中学习有关通信更新的算法的最佳论文是什么?

我有一个分布式系统(单个数据中心中的多个节点),我想要具有以下属性:

  • 节点可以随时进入和离开系统.
    • 节点之间没有数据复制.
    • 客户端使用哪个节点取决于客户端(即它可以是一致的散列,也可能是其他节点)
  • 没有主人(即没有中心点的失败)
  • 每个节点可以接收需要转发到其余节点的一条信息

什么算法(最适合论文的链接)适合这个?

(我假设一些答案将包括P2P算法,但我过去遇到的大部分答案都更像是分布式哈希表,其中节点进入并接管键空间的某些部分,等等.我也认识到使用简单UDP消息进行多播可能是合适的,但现有的工作有助于使消息传递可靠吗?)

p2p shared-nothing distributed-computing distributed-system

5
推荐指数
1
解决办法
374
查看次数

MySQL与多对多关系的限制

给出用于实现标签的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中的行数.

mysql database tags tagging

2
推荐指数
1
解决办法
1219
查看次数