小编pje*_*pje的帖子

带有圆形对象引用的Ruby中的Garbarge集合

我在Ruby中遇到垃圾收集问题,我认为应该是垃圾收集的对象不是垃圾收集.

require 'ruby-mass'

def find_dependencies(_object_id,_mapped = {})
  mapped = _mapped
  points_to_object = Mass.references(Mass[_object_id])
  ids = points_to_object.keys.map{|x| /\#(\d*)/.match(x).captures.first.to_i}
  mapped[_object_id] = ids

  unmapped = ids - mapped.keys
  unmapped.each do |x|
    new_deps = find_dependencies(x,mapped)
    mapped.merge(new_deps)
  end
  mapped
end
Run Code Online (Sandbox Code Playgroud)

做一些制作对象的东西,并找到相关的对象ID.GC.start, 然后:

> find_dependencies(144789180)
=> {144789180=>[61895480, 144786340, 147807540],
 61895480=>[144789180],
 144786340=>[144789180],
 147807540=>[144789180]}
Run Code Online (Sandbox Code Playgroud)

看起来这里有一个圆形参考图案,但它们都完全包含在这四个对象中,因此Mark-and-Sweep收集器应该找到并删除它们.

所以,我的find_dependencies_function,Mass gem或Ruby的垃圾收集器都有一个bug.如何缩小范围以找出问题所在并解决此内存泄漏问题?

ruby garbage-collection

11
推荐指数
1
解决办法
1206
查看次数

无法卸载内核扩展; 类具有实例

我正在为音频设备驱动程序(它的软件,但模拟硬件设备)编写OSX内核扩展.

在开发过程中,完全卸载现有的旧版本然后从头开始构建和安装新版本会很方便.但是,如果没有重新启动系统,有时似乎无法进行此操作.

程序本身没有运行,源文件已从/System/Library/Extensions/目录中删除.

kextstat揭示了一个实例:

$ kextstat | grep 'com.foo.driver.bar'
219 0 0xfff123 0x5000 0x5000 com.foo.driver.bar (0.0.1) <102 5 4 3>
Run Code Online (Sandbox Code Playgroud)

(...含义:)

Index Refs Address Size Wired Name (Version) <Linked Against>
Run Code Online (Sandbox Code Playgroud)

所以我的驱动程序实例有0个参考,但kextunload有时会失败,抱怨现有的实例:

$ sudo kextunload -b com.foo.driver.bar
(kernel) Can't unload kext com.foo.driver.bar; classes have instances:
(kernel)     Kext com.foo.driver.bar class FooBarDriver has 1 instance.
(kernel)     Kext com.foo.driver.bar class com_foo_driver_bar has 1 instance.
Failed to unload com.foo.driver.bar - (libkern/kext) kext is in use or retained (cannot unload). …
Run Code Online (Sandbox Code Playgroud)

macos kernel kernel-module kernel-extension

10
推荐指数
1
解决办法
1万
查看次数

9
推荐指数
2
解决办法
3085
查看次数

rails/activerecord中的预处理语句

rails activerecord对准备好的语句有什么支持吗?我能说的最好 - 没有.

activerecord ruby-on-rails prepared-statement

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

typeof()表达式中的副作用

在GNUC C中,您可以使用typeof(expression),并且使用内部具有副作用的表达式是合法的.例如,你可以拥有这个C代码:

int x = 0;
typeof(x++) y;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,副作用被忽略,之后x仍然为零(这是有道理的,因为类型只是编译时的事情).

但是,海湾合作委员会的文件说:

当且仅当它是可变修改类型的表达式或这种类型的名称时,才评估typeof的操作数的副作用.

这句话是什么意思?是否真的可以typeof用副作用编写,并且副作用实际上是在运行时执行的?对我来说,这句话似乎表明了这一点.

c gcc

8
推荐指数
1
解决办法
337
查看次数

管道导出命令

为什么export在用作命令管道的最后一步时会失败?

echo FOO=bar | xargs export
# => xargs: export: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我可以通过这种方式重写它以实现我想要的:

export `echo FOO=bar`
Run Code Online (Sandbox Code Playgroud)

但为什么我不能export以第一种方式使用?

bash shell terminal pipeline xargs

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

如何使用 LiveAPI(Ableton Live 的)发送剪辑名称

当播放(触发)音频或 MIDI 剪辑时,需要使用 OSC 将其名称发送到另一个应用程序

LiveAPI是一个接口,允许人们使用 python 脚本探索和自动化Ableton Live

执行此操作的代码必须用 python 脚本编写,该脚本必须放置在 Ableton Live 可以找到它的特定文件夹中,在 Live 的首选项中选择。

有关 LiveAPI 的更多信息,请访问以下网站:
http://www.assembla.com/wiki/show/live-api
http://groups.google.com/group/liveapi

python api osc ableton-live

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

Ruby Regexp插值/字符类/全局变量语法冲突?

为什么会出现此错误?

    Regexp.new("[#$]")
    # => SyntaxError: (irb):1: syntax error, unexpected $undefined
    # => Regexp.new("[#$]")
    #              ^
    # (irb):1: unterminated string meets end of file
    #     from ~/.rvm/rubies/ruby-1.9.3-p194/bin/irb:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)

这应该描述由单个$#字面组成的字符串子集.而且,AFAIU Ruby的正则表达式引擎,#并且$ 不需要进行转义字符类中,即使它们通常的元字符.

我会从红宝石试图插值错误消息猜测$时,它的打#双引号内,但是......为什么呢?订购很重要.在$#字符有多个重载的行为,所以我在一个关于什么触发这方面的损失.

PS,FYI:

    /[#$]/
    # => SyntaxError: (irb):1: syntax error, unexpected $undefined
    /[$#]/
    # => /[$#]/
    Regexp.new '[$#]'
    # => /[$#]/
    Regexp.new '[#$]'
    # => /[#$]/
    Regexp.new "[#$]"
    # => SyntaxError: (irb):1: syntax error, …
Run Code Online (Sandbox Code Playgroud)

ruby regex

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

在Cocoa应用程序退出之前确保Objective-C代码执行

假设cocoa应用程序必须在退出之前执行一些非常重要的objective-c操作(出于任何原因 - 崩溃或退出).

是否可以确保执行任意Objective-c代码以响应每个崩溃事件?(SIGINT,SIGBUS,SIGSEGV等,忽略了"uncatchables"( ,SIGSTOP,SIGKILL闪电的螺栓等))


知道你的钩子试图做什么会很有帮助.

例如:假设要让应用程序运行,它绝对必须更改某个可变系统范围配置变量X的值.在启动时,应用程序会获取X当前状态的快照,然后对其进行修改.当应用程序成功退出时,它只会在终止之前将X恢复为隐藏的原始值.我的问题是:即使应用程序崩溃,是否可以确保X得到恢复?

macos cocoa exception-handling objective-c

5
推荐指数
2
解决办法
1251
查看次数

Ruby:File.open如何将文件作为参数传递

对不起,这可能是一个noob问题.这(economic.rb)是一个解析世界经济数据的脚本.我不确定如何将xml文件传递给它.通常情况下,我会这样做

ruby economic.rb
Run Code Online (Sandbox Code Playgroud)

但是,File.open将ARGV [0]作为参数.如何在运行脚本时将xml文件(data.xml)传递给它.

economic.rb

require 'rubygems'
require 'nokogiri'

File.open(ARGV[0]) do |f|
  xml_doc = Nokogiri::XML::Document.parse(f)
  countries = xml_doc.css('country')
  most_populous = countries.max_by {|node| node['population'].to_i}
  puts "The most populous country in 1996 was #{most_populous['name']} with a population of #{most_populous['population']}"
  puts
  puts "The five countries with the highest inflation rate in 1996 were:"
  countries.sort_by {|country| -(country['inflation']  || 0).to_f} [0..4].each do |country|
    puts "  #{country['name']} - #{country['inflation']}%"
  end

  continent_info = countries.group_by {|country| country['continent']}
  puts
  puts "The continents and their countries in …
Run Code Online (Sandbox Code Playgroud)

ruby command-line-arguments

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