使用时perf report,我没有看到我的程序的任何符号,而是我得到这样的输出:
$ perf record /path/to/racket ints.rkt 10000
$ perf report --stdio
# Overhead Command Shared Object Symbol
# ........ ........ ................. ......
#
70.06% ints.rkt [unknown] [.] 0x5f99b8
26.28% ints.rkt [kernel.kallsyms] [k] 0xffffffff8103d0ca
3.66% ints.rkt perf-32046.map [.] 0x7f1d9be46650
Run Code Online (Sandbox Code Playgroud)
这是相当缺乏信息的.
相关程序使用调试符号构建,sysprof工具显示相应的符号,Zoom也是如此,我认为它是perf在引擎盖下使用的.
请注意,这是在x86-64上,因此二进制文件是使用编译的-fomit-frame-pointer,但在其他工具下运行时也是这种情况.
我是否编译一个Racket程序似乎对运行时性能没有任何影响.
最初是通过编译改进了文件的加载吗?换句话说,运行时racket src.rkt是否正在进行jit编译,这就是为什么我认为编译与交互没有区别?
即使对于整数运算的紧密循环,我认为会发生一些差异,无论我以前是否做过,配置文件时间都相等raco make.
我错过了一些简单的事吗?
PS,我注意到我可以对源文件(.rkt)或.zo文件运行racket .球拍是否会自动使用.zo找到与.rkt文件对应的if ,或者是否.zo需要明确使用该文件?无论哪种方式,它对我所看到的性能数字没有任何影响.
我有这样的声明:
((lambda (a b c) (+ a b c)) 1 2 3) ; Gives 6
Run Code Online (Sandbox Code Playgroud)
我希望能够将列表传递给它:
((lambda (a b c) (+ a b c)) (list 1 2 3))
Run Code Online (Sandbox Code Playgroud)
...除了这不起作用,因为整个列表作为'a'传递.有没有办法将列表分解为参数?
我正在寻找的东西类似于Python中的*字符.对于那些不熟悉语法的人:
def sumthree(a, b, c):
print a + b + c
sumthree(1, 2, 3) # Prints 6
sumthree(*(1, 2, 3)) # Also prints 6
Run Code Online (Sandbox Code Playgroud) 为了解释,我有OSX,我想安装PLT球拍.我不知道如何使用raco命令在终端中运行.rkt文件,而不是使用Dr. Racket解释器.我真的不喜欢DrRacket文本编辑器.
我在哪里放bin,lib和其他文件夹?我似乎无法在Racket bin中的所有或任何其他命令上访问raco命令.
我正在尝试从Racket中的大型csv文件中解析日期.
最直接的方法是创建一个新date结构.但它需要week-day和year-day参数.当然我没有这些,这似乎date是我不理解的模块的真正弱点.
因此,作为替代方案,我决定使用find-seconds将原始日期值转换为秒,然后将其传递给seconds->date.这有效,但是非常慢.
(time
(let loop ([n 10000])
(apply find-seconds '(0 0 12 1 1 2012)) ; this takes 3 seconds for 10000
;(date 0 0 12 1 1 2012 0 0 #f 0) ; this is instant
(if (zero? n)
'done
(loop (sub1 n)))))
Run Code Online (Sandbox Code Playgroud)
find-seconds需要3秒才能完成10000个值,我有几百万个.创建date结构当然是即时的,但我没有周日,年日值.
我的问题是:
1.)为什么week-day/ year-day需要创建日期结构?
2.)find-seconds应该是这么慢(即bug)?或者我做错了什么?
3.)是否有任何替代方法可以快速解析日期.我知道srfi/19有一个string->date功能,但我必须改变一切以使用该模块的结构而不是球拍的内置结构.并且它可能遭受同样的性能命中,我不确定.
在我正在Racket中工作的应用程序中,我需要获取一个数字列表并将列表分成连续数字的子列表:(在实际应用中,我实际上是分区对由数字和一些数据组成的对,但原则是一样的.)
即如果我的程序被调用,chunkify那么:
(chunkify '(1 2 3 5 6 7 9 10 11)) -> '((1 2 3) (5 6 7) (9 10 11))
(chunkify '(1 2 3)) -> '((1 2 3))
(chunkify '(1 3 4 5 7 9 10 11 13)) -> '((1) (3 4 5) (7) (9 10 11) (13))
(chunkify '(1)) -> '((1))
(chunkify '()) -> '(())
Run Code Online (Sandbox Code Playgroud)
等等
我在Racket中提出了以下内容:
#lang racket
(define (chunkify lst)
(call-with-values
(lambda ()
(for/fold ([chunk '()] [tail '()]) ([cell (reverse lst)])
(cond
[(empty? …Run Code Online (Sandbox Code Playgroud) 我试图运行(http://mitpress.mit.edu/sicp/full-text/book/book-ZH-26.html)在SICP 4.1中所述的程序,但已经在重新定义函数碰到一些困难,apply如这本书暗示你这样做.代码如下:
#lang planet neil/sicp
;; -----------------------------------------------------------------------------
;; 4.1.1 The Core of the Evaluator
;; -----------------------------------------------------------------------------
;; Eval
(define apply-in-underlying-scheme apply)
(define (eval exp env)
(display 'eval)
(newline)
(display exp)
(newline)
(cond ((self-evaluating? exp) exp)
((variable? exp) (let ((res (lookup-variable-value exp env)))
(display (list 'lookup exp))
(newline)
(display res)
(newline)
res))
((quoted? exp) (text-of-quotation exp))
((assignment? exp) (eval-assignment exp env))
((definition? exp) (eval-definition exp env))
((if? exp) (eval-if exp env))
((lambda? exp)
(make-procedure (lambda-parameters exp)
(lambda-body exp)
env)) …Run Code Online (Sandbox Code Playgroud) 什么构成了Racket编程语言的核心?核心基于任何RnRS规范与所有附加功能,例如基于该微小核心的众多序列方法,还是语言核心参考部分中的所有内容?
是否可以通过HTTP API将二进制文件(如图像)发布到GitHub gists?
特别是,Gist api文档描述了如何使用字符串内容发布文件.上传图片有两个问题.一个是api对POST请求有64kb的限制(尽管没有记录),这对于图像文件来说非常小.其次,对于图像文件的线路应该使用什么编码并不明显.
通过克隆与Gist相关联的git存储库,添加文件并推送到存储库,这很容易做到这一点,但这需要git,我想在没有安装git的系统上使这个工作.
我的一门课程是将DrRacket用于SICP的某些部分.我们正在研究metacircular评估员,我有一个R5RS代码文件(set-car!和set-cdr!),我需要与我的工作一起使用.因为R5RS文件大约是500行,所以我更喜欢将它保存在单独的缓冲区中.如何将其包含在我的答案缓冲区的定义中?这似乎racket/include需要#lang racket,但set-car!并set-cdr!没有在该语言.
racket ×8
scheme ×5
datetime ×1
github ×1
github-api ×1
linux ×1
lisp ×1
list ×1
parameters ×1
perf ×1
performance ×1
sicp ×1