我遇到Richard Stallman的以下声明:
'当你启动一个Lisp系统时,它会进入一个read-eval-print循环.大多数其他语言没有什么可比阅读,没有什么可比得上eval,没有什么比得上印刷.有什么差距不足!"
现在,我在Lisp中做了很少的编程,但我在Python中编写了大量代码,最近在Erlang中编写了一些代码.我的印象是这些语言也提供了read-eval-print循环,但Stallman不同意(至少关于Python):
"在人们告诉我它与Lisp基本相似之后,我浏览了Python的文档.我的结论是,情况并非如此.当你启动Lisp时,它会"读取","eval"和"print",所有这些都在Python中缺失.
Lisp和Python的read-eval-print循环之间真的存在根本的技术差异吗?你能举例说明Lisp REPL易于使用并且在Python中很难做到的事情吗?
我需要创建一个伪辅助类,用于单元测试(注入测试类).有没有办法在这样的类中使用TestCase断言?
我想将断言用于Fake类执行的一些常见检查.就像是:
class FakeFoo(object):
def do_foo(self, a, b):
assertNotNull(a)
...
Run Code Online (Sandbox Code Playgroud) 我注意到javascript或css文件中的初始注释有时以/*开头!解释标记的目的是什么?
例如,jquery.js:
/*! jQuery v1.7.1 jquery.com | jquery.org/license */
Run Code Online (Sandbox Code Playgroud)
bootstrap.css:
/*!
* Bootstrap v2.0.1
*
* Copyright 2012 Twitter, Inc
Run Code Online (Sandbox Code Playgroud) 我试图在JavaScript中模拟类似Lisp的列表(只是一个没有实际原因的练习),但我正在努力弄清楚如何最好地表示一个空列表.
一个空列表只是一个nil值还是存在于cons单元格中?
我可以:
(car '())
NIL
(cdr '())
NIL
Run Code Online (Sandbox Code Playgroud)
但是肯定不能列出空列表(cons nil nil),因为它与存储单个列表的列表无法区分nil.它需要存储一些其他特殊价值.
另一方面,如果没有从缺陷单元构建空列表,则似乎不可能具有一致的高级接口以将单个值附加到现有列表.功能如下:
(defun append-value (list value) ...
Run Code Online (Sandbox Code Playgroud)
会修改它的参数,但只有它不是一个空列表,这看起来很难看.
Udacity为学生提供了一个Web编辑器来输入Python程序.编辑器识别Python关键字和内置函数,并允许运行程序.你知道这项技术是如何运作的吗?程序是提交给后端并由标准Python解释器执行还是基于JavaScript的Python解释器?编辑器是否只是持有Python关键字和内置函数的静态列表,还是与标准或基于JavaScript的Python交互以获取这些?
我保存我的配置文件(~/.bashrc,~/.emacs,~/emacs在git的,等等).我配置它的方式只是在home目录中添加一个git存储库.
我发现这种方法存在一些问题:
git gui 需要永远,因为它递归扫描整个家庭目录.~/projects/foo,忘记它还没有初始化git repo,并git add bar.xyz在foo目录中执行.这导致文件正在添加到配置repo).我不确定将git存储库嵌套在已经有git存储库的目录下是明智的,尽管我还没有遇到任何基本问题.
有没有更好的方法,或者这是人们在git中存储本地配置文件的标准方法?
我正在寻找相当于nginx http auth 请求模块但用于 Apache。
对于每个传入的 HTTP 请求,该模块向身份验证/授权后端发送一个子请求。auth 请求携带原始请求的路径和所有标头。根据身份验证请求的结果,允许原始请求(HTTP 代码 200)、拒绝(HTTP 代码 403)或请求登录(HTTP 代码 401)。这种通用机制允许构建真正灵活的身份验证和授权方案。
在 Apache 中可能有这样的事情(可能在某些第三方模块的帮助下)?
是否有命令行工具将请求直接发送到监听unix套接字的wsgi应用程序(django)?
相当于:
curl -X GET http://example.org/index.html
但这会绕过HTTP服务器,并通过wsgi直接与底层应用程序交谈?
考虑以下应用程序:一个Web搜索服务器,它在启动时根据从磁盘读取的数据创建一个大的内存中网页索引.初始化后,无法修改内存中索引,并启动多个线程来提供用户查询.假设服务器被编译为本机代码并使用OS线程.
现在,线程模型在线程之间没有隔离.一个错误的线程或任何非线程安全的代码,可以破坏索引或损坏由其分配并在逻辑上属于某个其他线程的内存.这些问题很难检测和调试.
从理论上讲,Linux允许实施更好的隔离.初始化索引后,它占用的内存可以标记为只读.线程可以用共享索引(共享内存)的进程替换,但除了具有单独的堆并且不能相互损坏的进程之外.硬件和操作系统会自动检测到非法操作.不需要互斥锁或其他同步原语.完全消除了与内存相关的数据竞争.
这种模式在实践中是否可行?您是否了解任何可以执行此类操作的真实应用程序?或者也许存在一些使这种模式不切实际的根本困难?您是否认为与传统线程相比,此类方法会带来性能开销?从理论上讲,使用的内存是相同的,但是是否存在一些与实现相关的问题会使事情变慢?
我正在尝试调试Django应用程序的罕见挂起.到目前为止,我没有找到问题所在,它每天都会在生产中发生一次,而Gunicorn会重新启动该过程,并显示一条消息:
[CRITICAL] WORKER TIMEOUT
Run Code Online (Sandbox Code Playgroud)
有没有办法配置Django或Gunicorn来转储重新启动的进程的堆栈跟踪?