我正在寻找在某些时候创建功能性反应框架的麻烦.我已经阅读了很多关于它的内容,并看了几个例子,但我想清楚地知道这个框架必须做什么才能被认为是FRP扩展/ dsl.我并不真正关心实现问题或具体细节等,而是关注在完美世界情况下需要什么.
理想的功能反应式编程语言的关键操作和质量是什么?
我正在使用NetBeans 7作为我的IDE在Windows 7中的mingw32下使用g ++编写软件渲染器.
我一直需要对它进行描述,而这种需求已达到临界质量,因为我已经过去了解结构.我环顾四周,对我而言,这个答案显示了同时跨平台和保持简单的最大希望.
这种方法的要点是,可能最基本的(在许多方面,最准确的)分析/优化方法是直接通过暂停执行来直接对堆栈进行采样......不幸的是,NetBeans 不会暂停.所以我试图找出如何直接使用gdb进行此采样.
关于gdb,我不太了解.但是,我从手册页中可以看出,您在运行可执行文件之前设置了断点.这对我没有帮助.
有没有人知道一个简单的方法来获取gdb(或其他gnu工具):
...给出我陈述的配置?
我想将float值的符号作为int-1或1 的值.
避免条件总是降低计算成本的好主意.例如,我能想到的一种方法是使用快速bit-shift获取标志:
float a = ...;
int sign = a >> 31; //0 for pos, 1 for neg
sign = ~sign; //1 for pos, 0 for neg
sign = sign << 1; //2 for pos, 0 for neg
sign -= 1; //-1 for pos, 1 for neg -- perfect.
Run Code Online (Sandbox Code Playgroud)
或者更简洁:
int sign = (~(a >> 31) << 1) - 1;
Run Code Online (Sandbox Code Playgroud)
我有一个实现了hashCode()的vector类.它不是由我编写的,而是使用2个素数来乘以2个向量分量,然后对它们进行异或运算.这里是:
/*class Vector2f*/
...
public int hashCode()
{
return 997 * ((int)x) ^ 991 * ((int)y); //large primes!
}
Run Code Online (Sandbox Code Playgroud)
...因为这是来自一个已建立的Java库,我知道它的工作正常.
然后我有一个Boundary类,它包含2个向量,"start"和"end"(表示一行的端点).这两个向量的值是边界的特征.
/*class Boundary*/
...
public int hashCode()
{
return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图为构成这个边界的唯一2元组向量(开始和结束)创建一个好的hashCode().我的问题:这个hashCode()实现是否有效?
(请注意,我在后一个hashCode()实现中使用了2个不同的素数;我不知道这是否有必要但是为了安全而不是为了避免常见因素更好,我猜 - 因为我认为这是为什么素数在散列函数中很受欢迎.)
我对VBO很困惑,
glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
Run Code Online (Sandbox Code Playgroud)
除了GL_ARRAY_BUFFER,还有其他目标类型:GL_ATOMIC_COUNTER_BUFFER,GL_COPY_READ_BUFFER ......
但是,Opengl手册没有提到这些目标的含义.我检查了glew.h:
#define GL_ARRAY_BUFFER 0x8892
Run Code Online (Sandbox Code Playgroud)
这是否意味着目标(如GL_ARRAY_BUFFER)是地址?
目标 - GL_ARRAY_BUFFER在glBindBuffer中的含义是什么?
在JBox2d中,存在以下代码Vec2.equals():
@Override
public boolean equals(Object obj) { //automatically generated by Eclipse
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Vec2 other = (Vec2) obj;
if (Float.floatToIntBits(x) != Float.floatToIntBits(other.x))
return false;
if (Float.floatToIntBits(y) != Float.floatToIntBits(other.y))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我想知道float < - > int位转换函数的用途是什么,这里.这是否提供了一种解决Java浮动比较不准确问题的方法(如果可能的话)?还是完全不同的东西?我想知道它是否是epsilon方法的替代方案:
if (Math.abs(floatVal1 - floatVal2) < epsilon)
Run Code Online (Sandbox Code Playgroud)
PS.为了完整和兴趣,这里是Vec2.hashCode():
@Override
public int hashCode() { //automatically generated by Eclipse
final int prime = 31;
int …Run Code Online (Sandbox Code Playgroud) 在给定的绘图调用中解除使用glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)和/或glBindBuffer(GL_ARRAY_BUFFER, 0)结束时,对我来说似乎更清晰.我喜欢确定什么都不应该是不应该的; 但是,这有很大的性能影响吗?
有人会认为这样做是"干净"的方式吗?或者我应该沿着快速而漫长的路线走下去?
(是的,我知道绑定的缓冲区对象将被下一个要绑定在该目标上的缓冲区对象替换 - 无论是在这个还是下一个渲染更新中.是的,我可以进行性能测试.但是快速的人类反应会很好.)
我需要能够划分二进制数据流.我正在考虑使用像ASCII EOT(传输结束)字符这样的东西.
但是我有点担心 - 我怎么能确定用于此(0b00000100)的特定二进制序列不会出现在我自己的二进制序列中,从而在分界上给出误报?
换句话说,如何最好地处理二进制分隔?
编辑:...不使用长度标题.对不起,伙计们,之前应该提到这个.
我有
public class First<T> {}
public class Second<T extends SomeConcreteClass> extends First<T> {}
public class Third<T> extends Second<T> {} //Compile-time error
Run Code Online (Sandbox Code Playgroud)
我得到编译时错误
Type argument T is not with bounds of type-variable T.
Run Code Online (Sandbox Code Playgroud)
当我构造a时Third,我希望能够将泛型参数作为SomeConcreteClass(或其派生类),并且如果我提供的类型不属于SomeConcreteClass继承层次结构,则会抛出运行时错误.
我认为声明中的规范Second只会向下传播,即它应该隐含在声明(以及任何实例化)中Third.
有什么错误?
我倾向于假设getter只是一个访问控制包装器,而不是一组相当轻量级的指令来返回一个值(或一组值).
结果,当我发现自己写的时间更长,处理器消耗更多的设置器正在我正在做的时候,我觉得也许这不是最聪明的举动.在我自己的代码中调用getter(特别是让我们引用C#,其中方法与getter调用之间存在语法差异),然后我做出一个隐含的假设,即这些是轻量级的 - 实际上可能不是案件.
对此有何普遍共识?除了使用其他人的图书馆,你会写出沉重的吸气剂吗?或者你倾向于将较重的吸气剂视为"完整方法"?
PS.由于语言的差异,我预计会有很多不同的想法......