标签: implementation

通过偏移索引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
查看次数

互斥实现和信令

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

我认为它是这样的:

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

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

c c++ implementation mutex

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

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
查看次数

保持一切松散耦合和可扩展:太多层,ROI太小?

我(现在比以往任何时候都更多)看到开发人员编写了大量的图层,例如:

implementation PresentationLayer ->
    interface IMyDTO ->
        implementation MyDTO ->
            interface IMyService -> 
                implementation MyService -> 
                    interface IMyDomainRepository ->
                        implementation MyDomainRepository ->
                            interface IMyDomainObject -> 
                                implementation MyDomainObject ->
                                    interface IMyIndependentStorageLayer ->
                                        implementation MyMSSQLStorageLayer
Run Code Online (Sandbox Code Playgroud)

通过C#博客看,这似乎是自切片面包以来最好的事情.基本上,一切都松散耦合.不要直接使用域对象.通过服务层运行所有内容.通过存储库访问数据.所有图层都完全独立.

不要误解我的意思,我喜欢这个想法,但是不是时间上的权衡,特别是在一个更大的项目上?维护的投资回报率是否真的足以证明这一点?

我读到的解释有点尴尬,例如"如果需要,我可以附加不同的数据库".真?我不认为这是一个常见的问题,有人突然要求从MSSQL切换到Oracle,现在你坐在那里,希望你有一百万个层,彼此都不知道.

是否存在松散耦合过度的趋势,或者我只是在阅读错误的博客?你觉得这个怎么样,并且你有过这样的情况,你以后真的很高兴你在开始时做了额外的工作吗?

implementation design-patterns interface code-design

10
推荐指数
0
解决办法
569
查看次数

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

计算布尔括号内的实现

给定包含符号{true,false,和,或xor}的布尔表达式,计算括号表达式的方式的数量,使其计算结果为true.

例如,只有一种方法可以将'true和false xor true'括起来,使其计算结果为true.

这是我的算法

we can calculate the total number of parenthesization of a string
Definition:  
N - the total number of 
True -  the number of parenthesizations that evaluates to true
False - the number of parenthesizations that evaluates to false
True + False = N 
Left_True - the number of parenthesization in the left part that evaluates to True
same to Left_False, Right_True, Right_False

we iterate the input string from left to right and deal with each …
Run Code Online (Sandbox Code Playgroud)

algorithm implementation dynamic-programming

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

如何实现闪光灯中的Perlin噪声?

gamedev.SE上,我们发现Perlin-noiseflash实现似乎与其他实现有很大不同.

我没有在网上找到任何实现细节,但我想知道是否有人可以告诉哪个算法用于闪存中的Perlin-noise.

使用bitmapData.perlinNoise(32, 32, 1, 200, false, false, 7, true);产生这样的图像,其中只有numOctaves参数已经改变(1,2,4由左到右):

闪光灯中的柏林噪音

然而,Perlin噪声的其他实现看起来完全不同.例如维基百科关于Perlin-noise的文章中的图片:

维基百科上描述的Perlin噪音

此外培林噪声的这个ActionScript实现产生完全不同的结果,因为你可以在下面的图片看到(八度音阶1,24从左至右):

柏林噪音AS3

我最感兴趣的是只有一个八度的噪音.在闪存实现中,您可以清楚地看到,噪声正在形成像分离的斑点.

重要提示:闪存中产生的噪声false用于fractalNoise参数.如果fractalNoise设置为true,则结果实际上与维基百科和其他实现中的结果非常相似.

参数说明如下:

布尔值.如果该值为true,则该方法生成分形噪声; 否则会产生湍流.具有湍流的图像在梯度中具有可见的不连续性,这可以使其更好地近似更清晰的视觉效果,如火焰和海浪.

我们可以看到,他们谈到湍流来描述产生噪音的方法.所以我想问题是:闪存产生的输出是否仍然是Perlin噪声?或者那种噪音还有另一个名字吗?最重要的是:哪里可以找到一个像这样产生噪音的实现?

flash implementation perlin-noise

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

Java中的OutputStream是阻塞的吗?(插座)

我目前正在为一个项目编写天真的网络代码,并且一位伙伴暗示我有可能当我以一种迭代的方式从服务器向所有客户端发送信息包时,当其中一个客户端没有正确响应时,我可能会遇到严重的延迟.

他因拖钓而闻名,所以当我实现一个现在负责将数据发送到客户端的辅助线程时,我有点怀疑,它有一个队列,服务器只是简单地添加了包,然后被线程读取以发送数据.

在考虑它之后我现在遇到的问题是天气与否,Java Socket的OutputStream实际上将他想要发送的东西排队,因此事先不需要队列.只有当客户端没有收到来自客户端的已收到发送对象的响应时,才会出现发生严重问题的可能性.

谢谢.

java sockets implementation outputstream blocking

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