我正在寻找一种方法来获得两个程序,以有效地相互传输大量数据,这需要在Linux和Windows上,在C++中工作.这里的上下文是P2P网络程序,其充当网络上的节点并且连续运行,并且其他应用程序(可能是游戏因此需要快速解决方案)将使用它来与网络中的其他节点通信.如果有更好的解决方案,我会感兴趣.
我想知道为什么LLVM无法优化以下IR代码(使用优化设置为'3'的PassManagerBuilder,以及使用LLVM的'opt'工具):
%GenericStruct = type { i32 }
define void @makeGenericStructOuter(%GenericStruct* noalias nocapture sret) {
entry:
%1 = alloca %GenericStruct
call void @makeGenericStructInner(%GenericStruct* %1)
%2 = load %GenericStruct* %1
store %GenericStruct %2, %GenericStruct* %0
ret void
}
declare void @makeGenericStructInner(%GenericStruct* noalias nocapture sret)
Run Code Online (Sandbox Code Playgroud)
预期的代码是:
%GenericStruct = type { i32 }
define void @makeGenericStructOuter(%GenericStruct* noalias nocapture sret) {
entry:
call void @makeGenericStructInner(%GenericStruct* %0)
ret void
}
declare void @makeGenericStructInner(%GenericStruct* noalias nocapture sret)
Run Code Online (Sandbox Code Playgroud)
目前没有优化可用于处理此案例吗?或者我没有制作(这个代码是从我正在开发的前端产生的)正确的IR,它将允许优化?
在建议之前,我不能生成按值返回的代码,因为这些函数必须可以从不知道'GenericStruct'的大小或内容的其他模块/库中调用(并且它们会在本地声明'TestClass'为'struct不透明').
我很清楚关于检查异常是否是一个好主意的整个论点,我认为它们是......但这不是这个问题的重点.我正在设计一个相当简单的编译OOP语言,我决定使用已检查的异常作为一种返回错误的方法,而不会返回返回错误代码的C路由.
我正在寻找一些有关如何改进已检查异常的Java模型以消除其大多数不良方面的信息,可能是语法更改或略微更改实际功能.对检查异常的主要批评之一是,懒惰的程序员可能会吞下它们,因此不会出现错误.
也许它可以是可选的捕获异常,因此如果没有捕获,程序会崩溃?或者也许可以有特定的表示法来表示没有处理异常(比如C++虚函数'= 0'表示法)?或者,如果异常处理程序为空,我甚至可能导致程序崩溃(虽然这可能会让程序员对该语言不熟悉)
try ... catch语法怎么样,你认为可以用更简洁的方式表达异常被捕获吗?该语言将使用垃圾收集器,就像Java一样,所以是否需要finally子句?最后,还有哪些其他缺点可以检查异常以及存在哪些潜在解决方案(如果有的话)?