小编Dan*_*Dan的帖子

返回 vim 中的 } - 相当于 [} 或 ]{

在 vim 中,我可以点击[{返回到第一个未匹配的位置{]}同样前进。有没有什么(短的)可以[}让我回到最后一个}

vim

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

如何动态语言JITted?

在动态语言中,动态类型化代码JIT如何编译成机器代码?更具体地说:编译器是否在某些时候推断出类型?或者在这些情况下是否严格解释?

例如,如果我有类似下面的pseuocode

def func(arg)
    if (arg)
        return 6
    else
        return "Hi"
Run Code Online (Sandbox Code Playgroud)

在运行代码之前,执行平台如何知道函数的返回类型是什么?

jit dynamic-languages

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

使用Haskell存储大型结构化二进制数据

我正在编写一个与大型(10-1000 GB)内存映射二进制文件交互的应用程序,基本上保存了一堆相互引用的对象.我想出了一种读取/写入这些数据的机制,这种机制既有效又丑陋(imo).

问:有没有更优雅的方式来实现我的目标?

我有结构化数据类型类一个,其中一个方法,它读取结构成一个Haskell数据类型(DataOp是一个ReaderT围绕IO).

class DBStruct a where
    structRead :: Addr a -> DataOp a
Run Code Online (Sandbox Code Playgroud)

为了使这个更具可读性,我有另一个类型类定义了哪些结构成员去哪里:

class DBStruct st => StructMem structTy valTy name | structTy name -> valTy where
    offset :: structTy -> valTy -> name -> Int64
Run Code Online (Sandbox Code Playgroud)

我有一些辅助函数,它们使用offset方法读取/写入结构元素,从存储的引用读取结构,以及延迟推迟结构读取(允许延迟读取整个文件).

这个问题是它需要大量重复才能使用.对于一个结构,我首先要定义Haskell类型:

data RowBlock = RowBlock {rbNext :: Maybe RowBlock
                         ,rbPrev :: Maybe RowBlock
                         ,rbRows :: [RowTy]
                         }
Run Code Online (Sandbox Code Playgroud)

那么name类型:

data Next = Next
data Prev = Prev
data Count = Count
newtype Row …
Run Code Online (Sandbox Code Playgroud)

haskell

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

使用多重继承来实现实体组件编程

我读过几篇关于实体组件风格编程的文章。提出的常见问题之一是如何表达组件之间的依赖性以及与同一实体相关的组件如何通信。

在我看来,解决此问题的一种简单方法是使每个依赖项成为其依赖项的虚拟基类。

这样,当某个组件包含在实体中(通过虚拟继承)时,所有从属组件都将仅包含一次。此外,组件依赖的所有功能都将在其成员函数中可用。

class C_RigidBody : public virtual C_Transform {
    public void tick(float dt);
};

class C_Explodes : public virtual C_Transform {
    public void explode();
};

class E_Grenade : public virtual C_RigidBody, public virtual C_Explodes {
    //no members
};
Run Code Online (Sandbox Code Playgroud)

有没有理由没有人这样做?

(我认识到,由于“钻石问题”,通常不赞成多重继承,但是无论如何,这个问题都是组件必须处理的。(想象有多少个组件将取决于实体在游戏世界中的位置))

c++ inheritance

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

使用 Angular 2 动态加载字体

嘿,是否可以使用 Angular 2.4 动态加载字体?我尝试了以下但它不起作用。

<style>
  @font-face { font-family: '{{ font.name }}';
    src: url('{{ font.url }}')  format('woff'); }
</style>
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'nova-font-loader',
  templateUrl: './template.html'
})
export class NovaFontLoaderComponent implements OnInit {

  private font;

  constructor() { }

  ngOnInit() {
    this.font = {
      url: 'test.woff',
      name: 'test'
    };
  }

}
Run Code Online (Sandbox Code Playgroud)

它生成以下控制台输出:

GET http://localhost:4200/url(%7B%7B%20font.url%20%7D%7D) 404(未找到)

未处理的承诺拒绝:无法加载 url(%7B%7B%20font.url%20%7D%7D);区域: ; 任务: Promise.then ;值:无法加载 url(%7B%7B%20font.url%20%7D%7D)

font-face angular

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

为什么这个闭包的生命周期会根据看似不相关的类型而改变?

用代码

fn foo<'a, 'b>(
    state: &'b mut i32,
) -> impl FnMut(&'a str) -> &'static str + 'b {
    |s| "hi"
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

error[E0482]: lifetime of return value does not outlive the function call
112 | ) -> impl FnMut(&'a str) -> &'static str + 'b {
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: the return value is only valid for the lifetime `'a` as defined on the function body at 110:9
110 | fn foo1<'a, 'b>(
    |         ^^
Run Code Online (Sandbox Code Playgroud)

但不知何故代码

fn foo2<'a, 'b>(
    state: …
Run Code Online (Sandbox Code Playgroud)

rust

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

修改rt.jar可以吗?

我正在创建一个启动JVM的应用程序(使用JRE的副本).如果我编辑rt.jar,例如删除用户不应该访问的功能,它会以某种方式破坏JRE吗?

编辑:该应用程序涉及将代码下载到用户的计算机上,因此它将限制代码而不是用户.我可能应该澄清一下.

java java-native-interface jar

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

如何确定大对象的性能开销(用C++编写)

我正在研究一个对对象进行大量操作的程序; 创建,删除,动态展开它们,在指针之间移动,比较内容等.这些对象中的大多数至少是40个字节(最多约90个字节),并且一次可能在内存中有超过10,000个.

我想确定的是我是否应该费心去减小尺寸.我可以分析构造函数,新的,删除等.但是,我认为大型对象最重要的性能来自缓存不友好.有没有办法确定对象大小对发生的缓存未命中数的贡献?

PS:我想过度使用dynamic_cast也会影响性能.然而,这更容易诊断.

编辑:我知道在不进行分析的情况下进行优化是没用的.我要问的是如何从分析中确定是否存在问题.是否有可能在整个代码中分配惩罚,以便标准分析工具不会有用?

c++ performance profiling

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