小编tel*_*one的帖子

Haskell异常的含义

Haskell中异常的含义是什么?我看到的唯一用法是放入undefinederror放入我的代码中以阻止程序运行.否则,我认为将异常编程作为逻辑设计缺陷.但是Haskell有一个高级异常模块Control.Exception,它被使用Prelude.我读到C++中异常的原因是为了防止代码中出现很多"调用函数,然后检查状态".但是这些东西可以在Haskell中抽象出来.我可以在Haskell中看到异常处理的另一个原因是使用FFI处理外部异常,但仅限于内部用于包装调用的Haskell函数.

haskell

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

Haskell中最重要的抽象是什么?单子?Applicatives?

我想知道我应该知道哪些库,函数和概念以及如何使用.Monad和那里的函数是典型的例子,但是在编码中还有其他好的原语,比如Arrows,Applicative,......他们是谁?

顺便说一下,我想在Haskell世界中了解最新情况,学习新概念,这是怎么做到的?

(最初的标题是:"用于编码的库原语",但这已被更改)

haskell haskell-platform

20
推荐指数
3
解决办法
3183
查看次数

编译不安全的Haskell

似乎Haskell试图成为一种安全的语言,并试图帮助程序员摆脱错误.例如,如果在外面,pred/ succ抛出错误,并且div 1 0还抛出.这些安全的Haskell计算是什么,它们会导致什么开销?

是否有可能为GHC关闭这种安全性,因为在无错误的程序中它们不是必需的?这会导致更好的速度性能吗?

对于C后端,有一个选项-ffast-math.LLVM后端或LLVM是否有任何此类性能选项?

performance haskell llvm ghc

20
推荐指数
1
解决办法
714
查看次数

OES_vertex_array_object和客户端状态

我希望OpenGL ES 2.0中的顶点数组对象保存来自不同缓冲区的两个属性,第二个缓冲区从客户端内存中读取(glBindBuffer(GL_ARRAY_BUFFER, 0))但是我得到一个运行时错误:

GLuint my_vao;
GLuint my_buffer_attrib0;
GLfloat attrib0_data[] = { 0, 0, 0, 0 };
GLfloat attrib1_data[] =  { 1, 1, 1, 1 };

void init()
{
    // setup vao
    glGenVertexArraysOES(1, &my_vao);
    glBindVertexArrayOES(my_vao);

    // setup attrib0 as a vbo
    glGenBuffers( 1, &my_buffer_attrib0 );
    glBindBuffer(GL_ARRAY_BUFFER, my_buffer_attrib0);
    glBufferData( GL_ARRAY_BUFFER, sizeof(attrib0_data), attrib0_data, GL_STATIC_DRAW );
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);

    glEnableVertexAttribArray( 0 );
    glEnableVertexAttribArray( 1 );

    // "end" vao
    glBindVertexArrayOES( 0 );

}

void draw()
{

    glBindVertexArrayOES(my_vao);
    // (now …
Run Code Online (Sandbox Code Playgroud)

opengl-es opengl-es-2.0

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

GHC中嵌套的UNPACK

我经常在元组中收集多个值,因为我认为元组是这种元素的自然类型.但是,元组并不严格.考虑一下

data A

data B =
    B !A

data C =
    C !(B, B)

data D =
    D !B !B
Run Code Online (Sandbox Code Playgroud)

使用-funbox-strict-fields和优化,UNPACK是嵌套的.将在元组C被解压到C A AD,或只C B B?以下是GHC-doc中的参考:7.16.实用主义.

(是非空元组类型?类型构造函数?)

optimization haskell ghc data-structures

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

在iOS中加载4通道纹理数据

我想从iOS中的文件加载4通道纹理数据,因此我将纹理视为(连续)地图

[0,1]x[0,1] -> [0,1]x[0,1]x[0,1]x[0,1]
Run Code Online (Sandbox Code Playgroud)

如果我使用fileformat .png,XCode/iOS 会将文件视为图像,因此将每个组件rgba(预乘alpha)相乘,从而破坏我的数据.我该怎么解决这个问题?例子可能是

  • 使用两个纹理与组件rgb(3通道)
  • postdivide alpha
  • 使用其他文件格式

其中,我认为最好的解决方案是使用其他文件格式.GL压缩文件格式(PVRTC?)不是Apple平台独立的,似乎是低分辨率(4位)(参考).

编辑:如果我自己的答案是真的,那么就无法在iOS中获得png的4通道数据.由于OpenGL是关于创建图像而不是呈现图像,因此应该可以以某种方式加载4通道数据.png是图像的文件格式(和压缩取决于所有4个通道但是一个通道的压缩与其他通道无关),因此有人可能会说我应该使用另一种文件格式.那么我应该使用哪种其他压缩文件格式,哪些易于在iOS中阅读/集成?

更新:"组合"提到了一种加载4通道非预乘纹理的方法,所以我不得不给他正确的答案.但是,该解决方案有一些我不喜欢的限制.我的下一个问题是"从iOS中的png文件访问原始4通道数据":)

我认为这是一个糟糕的库设计,无法读取4通道png数据.我不喜欢系统试图比我自己聪明.

textures ios opengl-es-2.0 premultiplied-alpha

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

仅将变量传递到子目录

如何将项目特定变量传递到子目录?我想知道是否有"官方"方式这样做:

# (CMAKE_BUILD_TYPE is one of None, Debug, Release, RelWithDebInfo)

# ...

# set specific build type for 'my_library'
set( CMAKE_BUILD_TYPE_COPY "${CMAKE_BUILD_TYPE}" )
set( CMAKE_BUILD_TYPE "Release" )
add_subdirectory( "my_library" )
set( CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_COPY} )

# continue with original build type
# ...
Run Code Online (Sandbox Code Playgroud)

库/子目录my_library应始终为buildt类型"Release",主项目和其他子目录应该是buildt,其类型由配置定义.我不能修改CMakeLists.txtmy_library.

cmake

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

让cmake用clang使用c ++ 11(c ++ 14)

我的cmake项目应该编译c ++ 14代码.它还使用其外部库(在我的项目中是git子模块)中包含的CMakeLists.txts.在macOS Sierra(cmake 3.6.2)上构建失败,因为clang的默认STL是旧的并且不处理c ++ 11.据我所知,clang附带了两个STL:libstdc ++(来自gcc)(默认)或libc ++.因此,如果我将-stdlib=libc++选项添加到cmake,则源编译:

add_compile_options( "$<$<COMPILE_LANGUAGE:CXX>:-std=c++14>" )
add_compile_options( "$<$<COMPILE_LANGUAGE:CXX>:-stdlib=libc++>" )
Run Code Online (Sandbox Code Playgroud)

但是它在链接时失败了,因为它试图使用libstdc ++进行链接.如何在cmake中指定新的STL libc ++将用于整个构建过程?

PS:如果它太旧了,默认使用gcc STL的原因是什么?我可以永久地指定它应该使用哪个STL吗?或者我做了一些完全错误的事情(我的一些子项目可以默默地强制gcc吗?)?

stl cmake clang c++11 c++14

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