标签: implementation

如何实现Haskell中的库函数

我刚刚开始学习Haskell,并且会发现查看Haskell函数是如何实现的非常有用.我已经能够在不同的问题上找到标准前奏曲,但我现在对Data.List感兴趣.有没有办法找到这些功能的来源?

我真的很想看到排列和结点(其余的,但这些对我来说最有趣).

implementation haskell standard-library

12
推荐指数
2
解决办法
2428
查看次数

组件图与类图?

类和包图模型的软件逻辑设计

组件图模型实现视图

你能否通过一个很短的例子澄清上述差异

implementation uml class-diagram component-diagram

12
推荐指数
2
解决办法
2万
查看次数

私人继承是否总是意味着"HAS-A"?

根据我最喜欢的作者斯科特迈耶斯先生的说法,私人继承和组合意味着同样的事情,即Has-A关系.因此,可以通过私有继承获得从组合中获得的所有东西(包含A类,其中A类具有B类成员),反之亦然.

所以下面的代码应该是Has-A关系,但从我的观点来看,它不是!

class A : private boost::noncopyable {.. this is irrelevant };
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我,我失踪了吗?或者如何通过合成实现此代码?

c++ inheritance implementation noncopyable

12
推荐指数
2
解决办法
1273
查看次数

通过偏移索引Perl数组的速度

根据这个问题这个答案,列表实现为数组:

Perl使用数组和第一个/最后一个元素偏移实现列表.数组的分配大于所需的偏移量,最初指向数组中间的偏移量,因此在重新分配底层数组之前,在两个方向(未移位和推送/插入)都有增长的空间.这种实现的结果是所有perl的原始列表操作符(插入,获取,确定数组大小,推送,弹出,移位,非移位等)在O(1)时间内执行.

因此,您希望通过数字偏移量访问元素的速度同样快,因为它们是实现中的数组,可提供非常快速的常量时间索引.然而,作者在学习Perl的脚注中说

索引到数组不是使用Perl的优势.如果使用避免使用索引的pop,push和类似运算符,则代码通常比使用多个索引时更快,并且避免"逐个"错误,通常称为"fencepost"错误.有时,一个刚开始的Perl程序员(想要了解Perl的速度与C的比较)将采用针对C优化的排序算法(具有许多数组索引操作),在Perl中直接重写它(再次,使用许多索引操作)和想知道为什么它这么慢.答案是使用Stradivarius小提琴敲钉子不应该被认为是一种合理的构造技术.

当一个列表真的是一个阵列时,怎么会这样呢?我知道尝试将Perl的速度与C进行比较是完全无知的,但是不会通过偏移索引列表与pop或push或其他什么一样快?这些似乎相互矛盾.

arrays indexing perl performance implementation

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

在Lua中实现关闭?

我有一个关于如何实现闭包的问题.

假设这是在一个名为的文件中test.lua:

local a = 'asdf'

local function b()
    return a
end

a = 10

return b
Run Code Online (Sandbox Code Playgroud)

而另一个文件呢

a = require 'test'
a()
Run Code Online (Sandbox Code Playgroud)

它会打印出来

10
Run Code Online (Sandbox Code Playgroud)

如果a是堆栈上的指针'asdf'(在堆上我假设,但没关系),并且b创建了闭包,因此大概a是保存的地址供b使用,如何a = 10将闭包内的指针更改为好?

维基百科很好地说了令我困惑的事情:

如果语言实现的运行时内存模型在线性堆栈1上分配所有局部变量,则它无法轻松支持完全闭包.在这些语言中,函数返回时会释放函数的局部变量.

我在想,或许b真的没有保存指针'asdf'但是堆栈偏移量a,这样你就可以改变a,堆栈偏移量会让你到达a你设置的最后一个点a,但是那时它是如何工作的a(从堆栈中弹出指针)堆栈偏移变为无效?

1我知道Lua不会在堆栈上分配,但它会将堆栈上的本地指针分配给堆中的值,不是吗?

lua implementation closures

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

ObjectiveC:在哪里声明私有实例属性?

我有以下类接口:

@interface MyClass : NSObject

@property int publicProperty;

@end
Run Code Online (Sandbox Code Playgroud)

那么实施:

@interface MyClass() // class extension

- (void)privateMethod; // private methods

@end

@implementation MyClass {
    int _privateProperty;
}

@property int privateProperty = _privateProperty;

@end
Run Code Online (Sandbox Code Playgroud)

这就是Apple在WWDC中展示的内容,但是有没有理由不将_privateProperty放在类扩展中,如:

@interface MyClass() // class extension
{
    int _privateProperty;
}

- (void)privateMethod; // private methods

@end
Run Code Online (Sandbox Code Playgroud)

谢谢!

implementation private objective-c class-extensions

11
推荐指数
2
解决办法
7412
查看次数

互斥实现和信令

当一个互斥锁已被T1锁定,并且T2试图锁定它时,T2的进程是什么?

我认为它是这样的:

-T2试图锁定,失败,也许是自旋锁,然后调用yield ...
-T2计划执行几次,尝试锁定失败,产生...... -
最终T1解锁,T2计划执行,设法锁定互斥锁......

T1解锁是否明确地向调度程序或其他线程发出信号,表示互斥锁已解锁?或者它只是解锁,并让调度程序在感觉适合时调度被阻塞的线程(也称调度程序没有阻塞线程的概念并且不将它们视为特殊)?

c c++ implementation mutex

11
推荐指数
2
解决办法
1364
查看次数

java中的内存文件系统

我想在Java中创建一个简单的内存中文件系统,它有一个根目录并且能够创建新的子目录.在目录中,我们可以创建新文件,写入它们,从中读取,删除它们并重命名它们.能否请您从何处开始提供一些建议(简单的代码或资源).

java filesystems implementation

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

Rust中特征的冲突实现

我想实现一个自定义特征&'a str和整数i32,但Rust不允许我:

use std::convert::Into;

pub trait UiId {
    fn push(&self);
}

impl<'a> UiId for &'a str {
    fn push(&self) {}
}

impl<T: Into<i32>> UiId for T {
    fn push(&self) {}
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

无法编译时出现以下错误:

error[E0119]: conflicting implementations of trait `UiId` for type `&str`:
  --> src/main.rs:11:1
   |
7  | impl<'a> UiId for &'a str {
   | ------------------------- first implementation here
...
11 | impl<T: Into<i32>> UiId for T {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `&str`
   | …
Run Code Online (Sandbox Code Playgroud)

generics implementation traits rust

11
推荐指数
2
解决办法
2155
查看次数

如何使结构可调用?

#![feature(unboxed_closures)]
#![feature(fn_traits)]

struct foo;

impl std::ops::Add for foo {
    type Output = foo;
    fn add(self, x: foo) -> foo {
        println!("Add for foo");
        x
    }
}

impl Fn for foo {
    extern "rust-call" fn call(&self) -> Self {
        println!("Call for Foo ");
        self
    }
}

fn main() {
    let x = foo;
    let y = foo;
    x + y;

    x();
}
Run Code Online (Sandbox Code Playgroud)

我实现了Add特性,但我不明白如何将结构作为函数调用.我收到错误:

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/main.rs:14:10
   |
14 |     impl …
Run Code Online (Sandbox Code Playgroud)

implementation traits rust

11
推荐指数
2
解决办法
1223
查看次数