小编Pat*_* Li的帖子

multimethods如何解决命名空间问题?

我正在研究编程语言设计,我感兴趣的是如何用多方法泛型函数范例替换流行的单调度消息传递OO范例.在大多数情况下,它似乎非常简单,但我最近陷入困境,并希望得到一些帮助.

在我看来,消息传递OO是一种解决两个不同问题的解决方案.我在下面的伪代码中详细解释了我的意思.

(1)解决了调度问题:

===在文件animal.code ===

   - Animals can "bark"
   - Dogs "bark" by printing "woof" to the screen.
   - Cats "bark" by printing "meow" to the screen.
Run Code Online (Sandbox Code Playgroud)

===在文件myprogram.code ===

import animal.code
for each animal a in list-of-animals :
   a.bark()
Run Code Online (Sandbox Code Playgroud)

在这个问题中,"树皮"是一种具有多个"分支"的方法,它们根据参数类型的不同而不同.我们对我们感兴趣的每种参数类型(狗和猫)实施一次"树皮".在运行时,我们能够遍历动物列表并动态选择要采用的分支.

(2)它解决了命名空间问题:

===在文件animal.code ===

   - Animals can "bark"
Run Code Online (Sandbox Code Playgroud)

===在文件tree.code ===

   - Trees have "bark"
Run Code Online (Sandbox Code Playgroud)

===在文件myprogram.code ===

import animal.code
import tree.code

a = new-dog()
a.bark() //Make the dog bark

…

t = new-tree()
b = t.bark() //Retrieve the bark from …
Run Code Online (Sandbox Code Playgroud)

lisp language-design clojure common-lisp multimethod

32
推荐指数
2
解决办法
1765
查看次数

什么使基于堆的Scheme比基于堆栈的Scheme慢?

我正在为类似于Scheme的语言开发编译器,并正在阅读Dybvig的论文.在其中,他说通过在堆栈上而不是堆上分配调用帧来实现大部分性能提升.为了在闭包和延续的情况下实际完成这项工作,需要做几个技巧.

我的问题是这种性能增益来自何处?这纯粹是因为我们减少了对垃圾收集器的压力吗?

换句话说:假设我们有无限的内存量,堆叠分配的调用帧是否仍然比堆分配的调用帧快?

compiler-construction scheme compiler-optimization

7
推荐指数
1
解决办法
352
查看次数

如何在 Emacs 中仅查看和编辑文本文件的一小部分

我想在 Emacs 中完成以下行为,并且想知道是否有一个现有的包已经可以满足我的要求。

我希望我的缓冲区只显示文件 myfile.txt 中的第 30 到 60 行,并且对我隐藏文件的其余部分。

  • 当我向上滚动到顶部时,我应该在第 30 行。
  • 当我向下滚动到底部时,我应该在第 60 行。
  • 如果我编辑这个区域,这些编辑应该反映在原始文件中。
  • 当我插入/删除行时,该区域应该增长/缩小。
  • 我应该能够在不同的缓冲区中打开多个区域到同一个文件。

这非常接近我理想的工作流程。非常感谢您的帮助!

emacs editor regions

3
推荐指数
1
解决办法
467
查看次数