小编dsi*_*cha的帖子

MATLAB链表

MATLAB中实现链表的几种可能方法是什么?

注意:我问的是这个问题的教学价值,而不是实用价值.我意识到,如果你实际上在MATLAB中滚动自己的链表,你可能会做错事.但是,我是本学期MATLAB密集课程的助教,我提出这个问题的目的是更好地理解语言的一般结构.由于MATLAB的通用编程设备有点不寻常,我觉得这样的问题可以帮助我理解它们.

matlab linked-list data-structures

29
推荐指数
4
解决办法
4万
查看次数

Alloca实施

如何在D,C和C++等语言中使用内联x86汇编程序实现alloca()?我想创建一个稍微修改过的版本,但首先我需要知道标准版本是如何实现的.从编译器中读取反汇编并没有帮助,因为它们执行了很多优化,我只想要规范形式.

编辑:我想困难的部分是我希望它具有正常的函数调用语法,即使用裸函数或其他东西,使它看起来像普通的alloca().

编辑#2:啊,到底是什么,你可以假设我们没有省略帧指针.

c c++ assembly memory-management d

28
推荐指数
4
解决办法
8771
查看次数

从函数返回多个值的优雅方法

在大多数主流编程语言中,从函数返回多个值似乎是一件非常尴尬的事情.

典型的解决方案是使任一个结构或一个普通的旧数据和返回,或者通过引用传递至少一些参数或代替指针返回它们的.

使用引用/指针非常尴尬,因为它依赖于副作用,意味着你还有另一个参数要传递.

类/结构解决方案也是恕我直言,因为你最终得到了一百万个小类/结构,它们只用于从函数返回值,产生不必要的混乱和冗长.

此外,很多时候总是需要一个返回值,其余的只在某些情况下由调用者使用.这些解决方案都不允许调用者忽略不需要的返回类型.

我知道的一种优雅处理多个返回值的语言是Python.对于那些不熟悉的人,它使用元组解包:

a, b = foo(c)  # a and b are regular variables.
myTuple = foo(c)  # myTuple is a tuple of (a, b)
Run Code Online (Sandbox Code Playgroud)

有没有人对这个问题有任何其他好的解决方案?除了Python之外,现有主流语言中的两种习语以及您在非主流语言中看到的语言级解决方案都是受欢迎的.

python language-agnostic language-design function syntactic-sugar

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

为什么不通过引用传递struct一个常见的优化?

直到今天,我一直认为正确的编译器会自动将struct pass-by-value转换为pass-by-reference,如果struct足够大,后者会更快.据我所知,这似乎是一个简单的优化.然而,为了满足我对这是否真的发生的好奇心,我在C++和D中创建了一个简单的测试用例,并查看了GCC和Digital Mars D的输出.两者都坚持按值传递32字节结构有问题的函数是添加成员并返回值,没有修改传入的结构.C++版本如下.

#include "iostream.h"

struct S {
    int i, j, k, l, m, n, o, p;
};

int foo(S s) {
    return s.i + s.j + s.k + s.l + s.m + s.n + s.o + s.p;
}

int main() {
    S s;
    int bar = foo(s);
    cout << bar;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么这样的东西不会被编译器优化为传递引用而不是实际将所有这些推int送到堆栈上?

注意:使用的编译器开关:GCC -O2(-O3内联foo().),DMD -O -inline -release.

编辑:显然,在一般情况下,传值和传递引用的语义将不相同,例如,如果涉及复制构造函数或在被调用者中修改原始结构.但是,在许多现实场景中,语义在可观察行为方面是相同的.这些是我要问的案例.

compiler-construction optimization performance assembly struct

27
推荐指数
3
解决办法
8468
查看次数

何时使用模板方法Vs. 战略?

模板方法模式和策略模式大致相同.我理解它们之间的基本差异(模板方法是基于继承,策略是基于组合),但是有什么体面的指导方针可以选择何时选择其中一个?看起来他们做的基本相同.

language-agnostic design-patterns

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

在哪里可以找到标准数学函数的算法?

我希望向D编程语言标准库提交一个补丁,它将允许在编译时使用该语言的编译时功能评估工具评估大部分std.math.编译时功能评估有几个局限性,最重要的是:

  1. 您不能使用汇编语言.
  2. 您无法调用源代码不可用的C代码或代码.

有几个std.math函数违反了这些函数,需要编写编译时版本.我在哪里可以获得有关计算诸如对数,指数,幂和三角函数等优良算法的信息?我更喜欢算法的高级描述和实际代码,原因有两个:

  1. 为避免法律含糊不清,需要让我的代码看起来与源代码"不同",以确保我拥有版权.

  2. 我想要简单,便携的算法.我不关心微优化,只要它们至少是渐近有效的.

编辑:D的编译时函数评估模型允许在编译时计算的浮点结果与运行时计算的浮点结果不同,所以我不在乎我的编译时算法是否提供与运行时版本完全相同的结果只要它们在实际上并不那么准确.

algorithm math d reference standard-library

27
推荐指数
4
解决办法
6278
查看次数

在Win32 API中等效于Posix popen()是什么?

是否与Win32 API中的Linux/Unix stdio.h popen()函数大致相同?如果是这样,我在哪里可以找到它?

编辑:我需要知道这个来修补D标准库中的遗漏.任何答案必须使用标准的Win32 API,没有特定于MSVC的功能.另外,如果存在的话,我更喜欢低级别的东西.

c linux api winapi posix

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

正则表达式拉出C函数原型声明?

当谈到正则表达式时,我在学习曲线上的某个地方,我需要使用它们来自动修改一堆C头中的函数原型.有没有人知道一个不错的正则表达式来查找C头中的任何和所有函数原型,同时排除其他所有内容?

编辑:最初不清楚的三件事:

  1. 关心C++,只关心C.这意味着没有模板等担心.
  2. 该解决方案必须使用typedef和structs,不仅限于基本的C类型.
  3. 这是一种一次性的事情.它不需要漂亮.只要它有效,我不在乎它有多大,但我不想要一个复杂,难以实施的解决方案.

c regex function

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

D模板:最酷的黑客

你在D编程语言中做过或看过的最酷的有点实用的元编程黑客是什么?有点实际意味着排除例如编译时光线跟踪器.

templates d metaprogramming

22
推荐指数
9
解决办法
2534
查看次数

BLAS:gemm vs. gemv

为什么BLAS具有gemm矩阵 - 矩阵乘法gemv功能和矩阵向量乘法的单独函数?矩阵向量乘法不是矩阵乘法的一个特例,其中一个矩阵只有一个行/列吗?

linear-algebra blas

21
推荐指数
2
解决办法
7624
查看次数