小编Ara*_*h S的帖子

酏剂中方案与行为的区别

行为定义回调和协议定义没有签名的方法.实现协议的模块应该为所有这些方法提供定义.使用行为的模块也是如此.什么是语义差异?

我能想到的一个区别是,协议只能针对单一类型实现一次,因为我们可以根据我们的要求多次实现模块的行为.我很清楚何时使用什么.除此之外还有其他区别吗?

elixir

35
推荐指数
2
解决办法
3971
查看次数

金属文本渲染

我正在尝试在 Mac 上的 Apple metal 中开发我自己的迷你游戏引擎,但我被困在我想在 GPU 上渲染文本的地方。我没有太多的图形编程经验,因此我不知道该怎么做。我偶然发现了 Warren more 使用符号距离场写的一篇文章。但我不知道它是如何工作的,我无法完全理解它(缺乏我的图形知识)来自己实现它。博客文章有一个用 obj-c 编写的代码示例,但不幸的是我不知道 obj-c。它有一些快速版本吗?或者有人可以解释/指出如何在金属中渲染文本?

metal

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

法律如何帮助验证haskell中类别的含义

haskell中的所有类别(Monoid,Functor,Monad等)都有相应的法则,实例必须满足这些法律才能保证类别按预期工作.我无法理解的是,如何为一个类别选择特定的法律?例如,为仿函数选择id和组合法则的原因是什么?

haskell functor category-theory

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

令人困惑的Arc自动解除引用

这是从Mutex文档中获取的示例:

use std::sync::{Arc, Mutex};
use std::sync::mpsc::channel;
use std::thread;

const N: usize = 10;
fn main() {
    let data = Arc::new(Mutex::new(0));
    let (tx,rx) = channel();
    for _ in 0..N{
        let (data, tx) = (data.clone(), tx.clone());
        thread::spawn(move || {
            // snippet
        });
    }
    rx.recv().unwrap();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是snippet评论的位置.它被给予

let mut data = data.lock().unwrap();
*data += 1;
if *data == N {
    tx.send(()).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

数据的类型是Arc<Mutex<usize>>,所以在调用时data.lock(),我假设Arc正在自动解除引用并且usize分配了data.为什么我们需要*在前面data再取消引用呢?

下面的代码首先取消引用 …

rust

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

标签 统计

category-theory ×1

elixir ×1

functor ×1

haskell ×1

metal ×1

rust ×1