小编Gui*_*ira的帖子

LLVM做了哪些优化以及它们的前端需要实现哪些优化?

注意:我注意到这个问题与这个问题有很大关系,所以如果你对我的问题感兴趣,你一定要读到其他问题及其答案.

我可以想一下OOP语言前端可以做的一些优化,例如创建临时变量来保存从顺序调用的const方法调用中的值,而不需要对相关对象进行中间非常量调用,以切断函数调用,但我可以再想想更多.我想请人们创建一个更长的例子清单.

我问这个因为我想创建一个小语言作为宠物项目,我不知道如何很好地学习这个主题.也许这是社区维基的案例?LLVM后端的优化列表以及前端应该自行完成,您如何看待?

哦,我知道不同的前端可能有不同的需求,但我的重点是程序/ OOP语言.

llvm compiler-optimization

7
推荐指数
1
解决办法
1216
查看次数

为什么std :: istream不承担对streambuf的所有权?

我正在为CRI Middleware的ROFS(见维基百科)等视频游戏编写某种虚拟文件系统库.我对图书馆的意图是提供访问我开发的游戏资源的自然方法,它存储可执行文件中嵌入的一些数据,一些存储在媒体上,一些存储在本地用户的硬盘上(首选项,保存游戏文件等) .

访问这些资源应该像打电话一样简单

std::auto_ptr<std::istream> defaultConfigIStream(
    fslib.inputStream("self://defaultConfig.ini"));
std::auto_ptr<std::ostream> defaultConfigOStream(
    fslib.outputStream("localappdata://config.ini"));

// Copies default configuration to local user's appdata folder
defaultConfigIStream >> defaultConfigOStream;
Run Code Online (Sandbox Code Playgroud)

实际的做事方式实际上是不同的,另一个抽象层用于后台加载,但这在这里并不重要.

我想知道的是,我怎么能返回那个auto_ptr<>(或者unique_ptr<>你选择),因为当它被破坏时,与它std::streambuf<>相关联的东西std::[i/o]stream<>不被它删除.

我正在考虑std::[i/o]stream<>不建议在构建时传递给它的streambuf的所有权,因为构造函数不提供所有权语义的转移,Apache的STDCXX引用没有提到所有权的转换(我找不到任何stdlib引用)在网上).

我有什么替代品?我不妨返回一个共享指针并继续观察它,直到FSlib管理器保留共享指针的唯一副本,在这种情况下它会破坏它的唯一副本以及streambuf.考虑到图书馆的组织模式,这是切实可行的,但对于这个问题,这不是很优雅也不高效.

我试过看看Boost.Iostreams,但看起来事情对我来说更糟糕,因为流本身的设备类型强烈附加到它们的类型(流的设备必须在其模板参数中定义) ).这个问题似乎使得我的库使用Boost.Iostreams是不可行的,因为它需要抽象出流的具体"源/接收器"实现,以便流可以无缝地用于打开位于可执行文件本身内的文件,例如,在系统文件系统的文件内或存档类型文件中.

我可以写一个处理这些问题的容器类,但我宁愿更干净地做(也就是刚刚返回流;这就是它应该需要的全部!;).

建议?

c++ iostream virtualfilesystem boost-iostreams

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

回流/重新检测:今天可能吗?未来有可能吗?

我想知道在现代网络浏览器上是否有一种可靠的方法可以检测文件回流和/或重新绘制,或者是否有任何迫切需要这样的东西可能会将其置于W3规范中.

我还想知道如果使用特定于供应商的技巧(例如Mozilla显然有一个MozAfterRepaint事件),它是如何完成的,如果它不可能以标准或跨浏览器的方式实现.

谢谢.

html javascript repaint reflow

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

C++中的多重继承困境

我面临着我的C++库设计的问题.它是一个用于读取流的库,支持我在其他"流"实现中找不到的功能.为什么我决定开始写它并不重要.关键是我有一个流类,它通过多重继承提供两个重要的行为:可共享性和可搜索性.

可共享流是具有shareBlock(size_t length)方法的流,该方法返回与其父流共享资源的新流(例如,使用父流使用的相同内存块).可搜索的流是那些......好的,可寻找的.通过方法seek(),这些类可以寻找流中的给定点.并非所有库的流都是可共享和/或可搜索的.

提供搜索和共享资源实现的流类继承了名为Seekable和Shareable的接口类.这一切都很好,如果我知道有这么一个流的类型,但是,有时候,我会想一个函数接受这样的说法,仅仅满足的是可查找和共享,同时质量流,不管是哪个实际上流类它是.我可以创建另一个继承Seekable和Shareable并且引用该类型的类,但是我必须使我的类既可以从该类继承,又可以共享.如果要添加更多类似的"行为类",我需要在代码中的每个地方进行一些修改,很快就会导致无法维护的代码.有没有办法解决这个难题?如果没有,那么我绝对会明白为什么人们不满足于多重继承.它几乎完成了这项工作,但是,就在那时,它没有:D

任何帮助表示赞赏.

- 第二次编辑,首选问题解决 -

起初我认为Managu的解决方案将是我的首选.然而,Matthieu M.带来了另一个我更喜欢Managu的:使用boost::enable_if<>.如果BOOST_MPL_ASSERT制作的消息不那么令人毛骨悚然,我想使用Managu的解决方案.如果有任何方法可以创建有指导性的编译时错误消息,我肯定会这样做.但是,正如我所说,可用的方法产生令人毛骨悚然的消息.因此,我更喜欢在boost::enable_if<>条件不满足时产生的(更多)较少的指导性但更清晰的信息.

我已经创建了一些宏来简化任务来编写模板函数,这些函数接受继承select类类型的参数,在这里它们是:

// SonettoEnableIfDerivedMacros.h
#ifndef SONETTO_ENABLEIFDERIVEDMACROS_H
#define SONETTO_ENABLEIFDERIVEDMACROS_H

#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/preprocessor/array/elem.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/and.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/utility/enable_if.hpp>

/*
    For each (TemplateArgument,DerivedClassType) preprocessor tuple,
    expand: `boost::is_base_and_derived<DerivedClassType,TemplateArgument>,'
*/
#define SONETTO_ENABLE_IF_DERIVED_EXPAND_CONDITION(z,n,data) \
        boost::is_base_and_derived<BOOST_PP_TUPLE_ELEM(2,1,BOOST_PP_ARRAY_ELEM(n,data)), \
                BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_ARRAY_ELEM(n,data))>,

/*
    ReturnType: Return type of the function
    DerivationsArray: Boost.Preprocessor array containing tuples in the form
            (TemplateArgument,DerivedClassType) (see
                    SONETTO_ENABLE_IF_DERIVED_EXPAND_CONDITION)

    Expands:
    typename boost::enable_if<
            boost::mpl::and_<
                    boost::is_base_and_derived<DerivedClassType,TemplateArgument>,
                    ... …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance

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

C++虚函数调用与boost :: function调用speedwise

我想知道与一个相同的boost :: function调用相比,单继承虚函数调用的速度有多快.它们的性能几乎相同,还是boost :: function慢?

我知道性能可能因情况而异,但是,作为一般规则,哪个更快,哪个程度如此之大?

谢谢,Guilherme

- 编辑

KennyTM的测试对我来说足够令人信服.对于我自己的目的,boost :: function似乎并不比vcall慢得多.谢谢.

c++ performance virtual-functions boost-function

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

部分FPGA重配置和性能

对于大多数人来说,这些问题听起来可能非常深奥,但我真的很想知道这些问题.

1

我想知道FPGA需要多长时间才能重新配置,从建模电路断电到新设备到位和运行的时间.

我知道Place - & - Route是一个代价高昂的过程,但这是因为P&R工具必须决定放置组件的位置以及如何布置它们.

考虑到P&R分析已经完成,剩下的就是重新配置FPGA:这本身就是一个缓慢的过程吗?可以每秒进行数百次或数千次吗?

对于我很好奇的这种可能性有几个含义.在名称2中,它可以允许我们为多个并发"客户端"提供FPGA(就像GPU能够为多个不同的程序渲染内容一样),或者提供极其微调的电路,用于长时间运算的过程.高度异步处理的明确但很多处理阶段(想想:复杂的Haskell程序).

第2

我想问的一件事是,FPGA是否可以实时部分重新配置,而模拟电路是供电和运行的,只要重新配置的部件当然是断电的.

这种可能性也会产生一些有趣的含义,例如允许实时可重构总线,神经网络的硬件仿真等.

这些东西现在正在广泛研究吗?他们将来有多大可能被研究?

real-time fpga

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

如何防止机密数据包含在WebPack包中

我担心,通过省略,包含数据库密码或会话密钥等秘密的模块可以包含在WebPack或Browserify捆绑包中.

即使我不直接导入这些模块,我也可能不小心从客户端入口点模块间接导入它们.

有没有办法将这些文件列入黑名单,以便这些捆绑包拒绝捆绑它们?尽可能愿意遵循可避免此类问题的最佳实践,但拥有这样一个安全网会很好.

configuration-files secret-key webpack

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

如何最好地封装窗口句柄?

我正在开发一个由许多独立子系统组成的系统.其中两个子系统是Window和GraphicsAdapter子系统.

GraphicsAdapter需要一个低级窗口句柄(HWND或X11窗口句柄,具体取决于操作系统),而Window子系统是一种抽象这些特定于操作系统的API的方法.

如果Window子系统允许访问低级API句柄,那么封装将有很大的可能性被破坏.

如果它允许窗口全屏显示并返回,但是必须触发事件警告系统有关这些更改,并且低级别句柄用于在不知情的情况下切换到全屏?

如何确保把手从Window子系统安全地传送到GraphicsAdapter而不被滥用,并且仍然足够灵活,以便稍后可以添加其他子系统,如GraphicsAdapter,同时保持类型安全?

有没有办法以一种方式封装句柄Direct3D和OpenGL可以从句柄访问正常工作?

- 编辑

另外,从一个子系统到另一个子系统安全地携带手柄,例如,知道子系统可以由不同的编码器团队编写,有没有办法提醒他们手柄的使用方式?

注释是显而易见的选择,但编译器强制执行的是我真正想要的...

c++ opengl encapsulation direct3d hwnd

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

如何在FeathersJS中实现自定义/复杂操作路由

我需要实现一组在FeathersJS应用程序上执行非常自定义/复杂操作的路由.

其中一条路线是/Category/disableExclusiveContentsOf/:id.它针对六个数据库表运行查询,以查找与该类别相关的行:id.我绝对不能使用FeathersJS提供的查询抽象.然后,它使用FeathersJS的"本地"API来更新我找到的行,以便向客户端触发数据更新事件.

但是,如果我单独使用Express实现路由,则Feathers身份验证/授权挂钩将不会运行,因此端点将不受保护,这是一项要求.

我如何在FeathersJS应用程序中容纳这些东西?

feathersjs

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

Boost.Spirit.Qi用法中的错误雪崩

我无法弄清楚我的代码有什么问题.Boost的模板让我变得疯狂!我不能在这一切中做出正面或反面,所以我不得不问.

这有什么问题?

#include <iostream>
#include <boost/lambda/lambda.hpp>
#include <boost/spirit/include/qi.hpp>

void parsePathTest(const std::string &path)
{
    namespace lambda = boost::lambda;
    using namespace boost::spirit;

    const std::string permitted = "._\\-#@a-zA-Z0-9";
    const std::string physicalPermitted = permitted + "/\\\\";
    const std::string archivedPermitted = permitted + ":{}";

    std::string physical,archived;

    // avoids non-const reference to rvalue
    std::string::const_iterator begin = path.begin(),end = path.end();

    // splits a string like "some/nice-path/while_checking:permitted#symbols.bin"
    // as physical = "some/nice-path/while_checking"
    // and archived = "permitted#symbols.bin" (if this portion exists)
    // I could barely find out the …
Run Code Online (Sandbox Code Playgroud)

c++ boost-spirit boost-spirit-qi c++11

3
推荐指数
1
解决办法
1240
查看次数

在Windows中同步读取stdin

我一直这样做是为了在Linux下同步读取整个stdin数据:

var buffer = fs.readFileSync('/dev/stdin');
Run Code Online (Sandbox Code Playgroud)

这显然不适用于Windows,因为没有/ dev/stdin文件.我能做些什么来实现同样的目标?

windows stdin synchronous node.js

3
推荐指数
1
解决办法
3384
查看次数