小编Ale*_*xey的帖子

如何在 Rust 中将有符号整数与无符号整数相加?

我是否必须在有符号整数的符号上进行分支,如下例所示?(在真实的程序中y是计算改变索引指向为64K数组,而wraparound是期望的行为)

fn main() {
    let mut x: u16 = 100;
    let y: i8 = -1;
    //x += y;
    if y < 0 {
        x -= i8::abs(y) as u16;
    } else {
        x += i8::abs(y) as u16;
    }
    println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)

rust

14
推荐指数
2
解决办法
7574
查看次数

哪个版本的Windows支持/需要哪些CPU多媒体扩展?

到目前为止,我已经设法找到:

  • 对于Windows 8及更高版本(当然对于任何64位操作系统),SSE和SSE2都是必需的
  • AVX仅受Windows 7 SP1或更高版本支持

有关在Windows上使用SSE3,SSSE3,SSE4.1,SSE 4.2,AVX2和AVX-512的注意事项吗?

一些澄清:如果我使用其中一个SSE/AVX集合的指令,我需要这个来确定我的程序运行的操作系统.

windows assembly sse avx avx512

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

奇怪的重复模板模式与其他泛型类型

假设我想要一个Box可以包含内部内容的泛型类,所以它是一个Box<T>.Box<T>有一个Transform方法返回一个Box<U>:

public Box<U> Transform<U>(Func<T, U> transform)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这很简单.但是,我实际上需要一个摘要Box,因为值被加框和转换的方式是特定于实现的.(我没有接口,因为有其他方法是通过抽象方法的组合实现的,但这并不会改变任何东西).

当然,我希望我的重写Transform方法返回一个合适的子类Box,而不是Box它自己.由于覆盖方法的返回类型在C#中是不变的,我转向奇怪的重复模板模式(请参阅参考资料IComparable<T>):

public abstract class Box<B, T> where B : Box<B, T>
Run Code Online (Sandbox Code Playgroud)

现在我继承的每一个课都Box<B, T>应该引用自己或者所有地狱都是松散的:

public class FooBox<T> : Box<FooBox, T>
Run Code Online (Sandbox Code Playgroud)

但是,这完全破坏了这个Transform方法:

public abstract Box<B, U> Transform<U>(Func<T, U> transform);
Run Code Online (Sandbox Code Playgroud)

无法编译The type 'B' cannot be used as type parameter 'B' in the generic type or method 'Test.Box<B,T>'. There …

c# generics crtp

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

英特尔架构和IEEE 754合规性(minNum和maxNum)?

我一直在看x64软件开发人员手册,看起来内置的{MIN | MAX} {S | P} {S | D}指令没有实现名为minNum和maxNum的函数. IEEE 754标准,尽管英特尔在同一文档中声称其CPU完全兼容.

如果任一操作数是QNaN且两者都不是SNaN,则Intel操作总是返回第二个操作数,而minNum和maxNum返回另一个操作数,即:

IEE 754:
minNum(1.0, QNaN) -> 1.0
minNum(QNaN, 1.0) -> 1.0

Intel x64:
MIN(1.0, QNaN) -> QNaN
MIN(QNaN, 1.0) -> 1.0
Run Code Online (Sandbox Code Playgroud)

我是否正确,必须通过额外检查第一个操作数来模拟符合标准的minNum/maxNum函数,并且不能直接转换为相应的指令?

floating-point assembly x86-64 ieee-754

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

C#中静态类型的格式良好的缺点列表

我问自己一个愚蠢的问题,现在已经把我的大脑震撼了几个小时而没有结果.

假设您想在C#中实现一个cons单元格,无论出于何种原因(Greenspun的第十条规则应该足够了).因为它在C#中,所以你希望它是静态类型的.这样的事情应该足够了:

interface ICons<T, U>
{
    T Left { get; }
    U Right { get; }
}

struct Cons<T, U> : ICons<T, U>
{
    public T Left { get; }
    public U Right { get; }

    public Cons(T left, U right)
    {
        Left = left;
        Right = right;
    }
}

struct Nil : ICons<Nil, Nil>
{
    public Nil Left => this;
    public Nil Right => this;
}
Run Code Online (Sandbox Code Playgroud)

现在有一种static void VisitList<T>(? list, Action<T> action)方法可以接受格式良好的列表T并对每个元素执行某些操作.一个格式良好的列表T是一个Nil …

c# greenspunning cons

5
推荐指数
0
解决办法
215
查看次数

如何在运行时确定.Net程序的入口点?

假设我的程序中有两种类型,Foo并且Bar.两者都有static void Main(string[] args).要编译此程序,需要编译器标志/main:class.

是否有可能在运行时确定哪两种类型包含入口点,即获取TypeInfoMethodInfo指向正确的类或正确的Main方法?

UPD:更确切地说,是否可以从链接到主应用程序的类库(即,没有可能的选项的先验知识)这样做?

c# reflection

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

将 PLAIN 添加到 Apache Qpid Broker-J 接受的 SASL 机制列表中

我正在尝试使用 AMQP.Net Lite 连接到本地运行的 Apache Qpid Broker-J 实例,该实例仅支持 ANONYMOUS、PLAIN 和 EXTERNAL SASL 机制。代理拒绝连接请求,因为它需要以下机制之一:CRAM-MD5、SCRAM-SHA-1、SCRAM-SHA-256。有没有办法将代理配置为接受 PLAIN?我在文档中找不到它。

sasl qpid

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

如何在 Blazor 中调用子组件的方法

我有Foo.razor

@foreach (var item in items) {
  <p>@item</p>
}

@code {
  private List<string> items = new List<string>();

  public void Append(string item) => items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)

如果我有Bar.razor

<Foo/>

@code {
  public void SomeMethod() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能Append("something")从打电话SomeMethod()

blazor blazor-server-side

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