我工作的一个项目,该项目可以充分利用POSIX的会话(如描述在这里),但现在我不确定我是否误解OS X甚至支持和/或是否处理会话的概念。
OS X 10.9 有一个setsid(2)系统调用,但用参数调用它0, 0似乎没有注意到。查看ps -e -o pid,pgid,sess显示的输出,所有进程的会话 ID 为0:
PID PGID SESS
1 1 0
11 11 0
12 12 0
13 13 0
14 14 0
15 15 0
16 16 0
17 17 0
[...]
Run Code Online (Sandbox Code Playgroud)
OS X 是否支持进程的 POSIX 会话,如果不支持,是否存在另一种机制,例如 shell 可以用来向从该 shell 启动的所有进程发送信号?
除了查看系统上的活动进程外,我还使用ersatz-setsid命令行工具在新会话中运行进程,但没有成功:
$ ./setsid sleep 1000
$ ps -eo pid,pgid,sess,command
PID PGID SESS COMMAND
[...]
10650 10650 0 sleep 1000 …Run Code Online (Sandbox Code Playgroud) 在Swift中,我可以使用ARC机制来管理进程外部资源的生命周期,因为类的实例可以预先解除初始化.这与Java Runtime之类的环境形成对比,在Java Runtime中,当垃圾收集器收集对象时,实例被去初始化,这不能保证在定义的时间窗口中发生.
但是,当局部变量引用这些实例时,Swift语言和运行时对实例生命周期的确切保证是什么?例如,当局部变量持有对它的唯一引用时,实例可能被解除分配的最早点是什么?
在下面的示例中,我创建了一个类的实例,并在局部变量中存储对它的引用.
public final class Something {
init() { print("something.init()") }
deinit { print("something.deinit()") }
}
func useSomething() {
let something = Something()
print("useSomething()")
}
useSomething()
Run Code Online (Sandbox Code Playgroud)
在我打印的点之后不使用该变量,useSomething()但在调用之后deinit运行一致:print()
$ swift run -c release
something.init()
useSomething()
something.deinit()
Run Code Online (Sandbox Code Playgroud)
似乎引用总是在变量超出范围时递减.在do块中包装变量声明会更改顺序:
func useSomething() {
do { let something = Something() }
print("useSomething()")
}
Run Code Online (Sandbox Code Playgroud)
$ swift run -c release
something.init()
something.deinit()
useSomething()
Run Code Online (Sandbox Code Playgroud)
这个订单是保证还是可以用不同的编译器或优化级别更改?
我对此感兴趣的原因是我想在面向对象的Swift API中包装C API,并希望使用Swift类和引用计数自动管理使用C API分配的资源的生命周期.如果C …
我知道它保证在 Java 中从左到右执行,但是 Scala 怎么样?我有一个接受数组和可读字节限制的方法:
def scanArray(limit: Int, ba: Array[Byte]) = { }
Run Code Online (Sandbox Code Playgroud)
我还有一个方法,它接受一个数组,用一些数据填充它并返回它填充的字节数:
def fillArray(ba: Array[Byte]): Int = {...}
Run Code Online (Sandbox Code Playgroud)
问题是这样调用是否可以scanArray:
val ba = new Array[Byte](16)
scanArray(fillArray(ba), ba)
Run Code Online (Sandbox Code Playgroud)
行为有保障吗?还是 Scala 规范不保证?
similarlist = res.find_all_next("div", class_="result-wrapper")
for item in similarlist:
print(item)
Run Code Online (Sandbox Code Playgroud)
这将返回:
<div class="result-wrapper">
<div class="row-fluid result-row">
<div class="span6 result-left">
<p>
<a class="tooltipLink warn-cs" data-original-title="Listen" href="..." rel="tooltip"><i class="..."></i></a>
<a class="muted-link" href="/dictionary/german-english/aa-machen">Aa <b>machen</b></a>
</p>
</div>
<div class="span6 result-right row-fluid">
<span class="span9">
<a class="muted-link" href="/dictionary/english-german/do-a-poo">to do a poo</a>, <a class="muted-link" href="/dictionary/english-german/pooh">to pooh</a>
</span>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我选择打印时item.get_text(),我得到
abgeneigt machen
to disincline
abhängig machen
2137
to predicate
Absenker machen
to layer
Run Code Online (Sandbox Code Playgroud)
所以基本上我不需要的列表项之间有很多新行。这是因为<p>标签吗?我该如何摆脱它们?
我已经定义了一个隐式类,它为foo所有实例提供了一个方法Double.奇怪的是,现在也可以在Float实例上调用此方法,这由scalac2.12.5(使用-Xscript Foo)接受的以下示例显示:
implicit class DoubleOps(value: Double) {
def foo: Double = value
}
val x: Float = 1f
val y = x.foo
Run Code Online (Sandbox Code Playgroud)
如果我尝试对我自己的类型执行相同操作,则分别替换Float和Double使用MyFloat和实例不可用.MyDoublefooMyFloat
trait MyDouble
object MyDouble {
implicit class MyFloatAsMyDouble(value: MyFloat) extends MyDouble
}
trait MyFloat
implicit class MyDoubleOps(value: MyDouble) {
def foo: MyDouble = value
}
val x: MyFloat = new MyFloat { }
val y = x.foo
Run Code Online (Sandbox Code Playgroud)
$ …Run Code Online (Sandbox Code Playgroud)