小编Kor*_*nel的帖子

将Apple的型号标识符(MacBookPro5,1)翻译成用户友好名称?

Mac OS X是否有API将Apple的模型标识符(plists和API中的类型,例如"MacBookPro5,1")转换为这些设备的用户友好营销名称("Unibody MacBook Pro Late 2008")?

我正在寻找比简单硬编码列表更具前瞻性的解决方案.

macos cocoa branding hardware-id

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

OS X中的低优先级I/O.

launchd可以选择以低优先级I/O运行进程.它是如何工作的?(低多低,是否影响所有操作?)

是否有API可以在未启动的应用程序中启用低优先级I/O launchd

我需要在后台应用程序中扫描监视(FSEvents)目录,我希望它尽可能温和.

或者,如何检查系统/磁盘是否正忙于执行I/O?

io macos scheduling

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

使用Server-Sent事件广播消息

我想实现一个简单的Server-Sent事件应用程序,客户端监听这样的php文件

<script src="eventsource.js"></script>
<script>
  var es = new EventSource('../sse.php');

  es.onmessage = function (event) {
    var data = JSON.parse(event.data);
    console.log('msg: ' + event.data);
  };

  es.onopen = function () {
    console.log('connected');
  }
</script>
Run Code Online (Sandbox Code Playgroud)

但后来我需要能够广播一条消息,每个连接的客户端同时获取它.

php文件将被另一个请求触发,它会将一些SSE数据"回显"给所有客户端.

这可能吗?我可以采取另一条路线吗?

先感谢您

php sockets html5 broadcast server-sent-events

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

如何区分Cocoa中应用程序终止的不同原因?

我希望我的应用程序在退出之前要求确认,除非在关机或重启期间系统终止它(因为当OS X在午夜尝试应用安全更新时它会卡在"你确定吗?"消息框中) .

如何找到启动终止的内容?在[NSApp terminate:sender]发件人总是nil.

我的第一个想法是只在激活"退出"主菜单项时询问,但是用户也可以从Dock菜单终止应用程序或者在按住Cmd + Tab的同时按Cmd + Q,我想要求确认在这些情况下也是如此.

cocoa termination confirmation quit

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

如何实现任何可变性的特征?

可变性是特征中的通用参数吗?我想为一个类型的可变和不可变变量实现一个特征,而不必复制和粘贴该impl块.

trait Foo<T> {…}

impl<T> Foo for *const T {…}
impl<T> Foo for *mut T {…same thing again…}

一厢情愿的伪代码:

trait Foo<T> {…}

impl<T, Mutability> Foo for *Mutability T {…}

traits mutability rust

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

拥有一些数据和对该数据的引用的结构

对象的构造会分配该对象生命周期所需的数据,但还会创建另一个需要保留对数据的引用的对象:

pub fn new() -> Obj {
    let data = compute();

    Obj {
        original: data,
        processed: AnotherObj {
            reference: &data
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以用Rust的术语表达这一点?

在这里,我想要ObjAnotherObj并且data拥有相同的生命周期,当然还没有new()通话。

object-lifetime rust borrow-checker

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

如何在任意生命周期内将Rust对象借给C代码?

我正在Rust中编写一个具有C接口的库.C方必须能够创建和销毁Rust对象(C方拥有它们并控制它们的生命周期).

我设法将一个对象"泄漏"到C,但我不确定如何正确释放它:

pub extern "C" fn create() -> *mut Foo {
   let obj = Foo; // oops, a bug
   let ptr = std::mem::transmute(&mut obj); // bad 
   std::mem::forget(obj); // not needed
   return ptr;
}

pub extern "C" fn destroy(handle: *mut Foo) {
   // get Foo back and Drop it??? 
}

我不知道如何将指针转回Rust会调用Drop的对象.简单地解除引用*handle不会编译.

c ffi rust

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

如何使用(不安全)别名?

Rust有严格的别名规则.但是,如果"我知道我在做什么",我可以解决它们吗?

我正在尝试转换为Rust一个C函数,它通过从输入缓冲区读取并写入目标缓冲区来执行复杂的操作,但它有一个聪明的优化,允许输入和输出缓冲区相同:

foo(src, dst); // result is written to dst
foo(buf, buf); // legal in C, does the operation in-place
Run Code Online (Sandbox Code Playgroud)

为了这个问题,让我们说它是这样的:

void inplace(char *src, char *dst, int len) {
   for(int i=0; i < len-1; i++) {
      dst[i] = src[i+1] * 2; // algorithm works even if src == dst
   }
}
Run Code Online (Sandbox Code Playgroud)

生锈的安全集我得有功能的两个几乎复制和粘贴的版本fn(&mut)fn(&, &mut).

有没有办法欺骗Rust以获得对同一缓冲区的可变和不可变引用?

strict-aliasing rust borrow-checker

5
推荐指数
3
解决办法
522
查看次数

自动导出数字类型的Add,Mul,Ord等

创建行为类似于数字的自定义类型的最简单方法是什么?

我想要类型检查,以防止在我的程序中混合不同的单位,但我仍然希望能够轻松地执行类型的计算,而无需来回转换(类似于自定义CentimetersInches类型的情况).

如果我创建:

struct Centimeters(f64);
Run Code Online (Sandbox Code Playgroud)

那么我要实现Add,Mul,Ord和许多其他性状的手动.这是很多样板文件,复制和粘贴此代码会产生破坏程序中基本算术的风险:)

不幸的是#[derive(Add, Sub, …)]似乎没有得到支持.是否有另一种可以达到类似效果的标准特性/类型/箱子?

rust deriving newtype

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

如何并行运行多个调用 thread::sleep 的期货?

我有一个缓慢的未来,在运行完成之前阻塞了 1 秒。

我尝试使用join组合器,但复合未来my_app按顺序执行期货:

#![feature(pin, futures_api, arbitrary_self_types)]

extern crate futures; // v0.3

use futures::prelude::*;
use futures::task::Context;
use std::pin::PinMut;
use std::{thread, time};
use futures::executor::ThreadPoolBuilder;

struct SlowComputation {}

impl Future for SlowComputation {
    type Output = ();

    fn poll(self: PinMut<Self>, _cx: &mut Context) -> Poll<Self::Output> {
        let millis = time::Duration::from_millis(1000);
        thread::sleep(millis);

        Poll::Ready(())
    }
}

fn main() {
    let fut1 = SlowComputation {};
    let fut2 = SlowComputation {};
    let my_app = fut1.join(fut2);

    ThreadPoolBuilder::new()
        .pool_size(5)
        .create()
        .expect("Failed to create threadpool") …
Run Code Online (Sandbox Code Playgroud)

future rust

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