人们如何在基于Go的AppEngine应用程序中处理模板的使用?
具体来说,我正在寻找一个提供以下内容的项目结构:
潜在的障碍是:
请注意,我不是在寻找使用模板包的教程/示例.这更像是一个应用程序结构问题.话虽这么说,如果你有解决上述问题的代码,我很乐意看到它.提前致谢.
在编译时gcc -O3,为什么以下循环没有矢量化(自动):
#define SIZE (65536)
int a[SIZE], b[SIZE], c[SIZE];
int foo () {
int i, j;
for (i=0; i<SIZE; i++){
for (j=i; j<SIZE; j++) {
a[i] = b[i] > c[j] ? b[i] : c[j];
}
}
return a[0];
}
Run Code Online (Sandbox Code Playgroud)
什么时候呢?
#define SIZE (65536)
int a[SIZE], b[SIZE], c[SIZE];
int foov () {
int i, j;
for (i=0; i<SIZE; i++){
for (j=i; j<SIZE; j++) {
a[i] += b[i] > c[j] ? b[i] : c[j];
}
}
return a[0];
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别在于内部循环中的表达式的结果是 …
我在哪里可以找到"自适应"pthread互斥锁的文档?符号PTHREAD_MUTEX_ADAPTIVE_NP是在我的系统上定义的,但我在网上找到的唯一文档没有说明自适应互斥锁是什么,或者什么时候适合使用.
那么......它是什么,何时才能使用它?
作为参考,我的libc版本是:
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10.5) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.50 system on 2013-09-30.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon …Run Code Online (Sandbox Code Playgroud) 为了确定给定类型是否使用反射包实现接口,您需要将reflect.Type传递给reflect.Type.Implements().你怎么得到这些类型之一?
作为一个例子,试图获得未初始化的os.Error(接口)类型的类型并没有工作(它吓坏了你就可以调用类())
var err os.Error
fmt.Printf("%#v\n", reflect.TypeOf(err).Kind())
Run Code Online (Sandbox Code Playgroud) 我们有一个供应商为我们提供了一个C++库和标题,我正在尝试使用SWIG进行包装.看来他们使用预处理器指令过于聪明了一半:
// top.h
#define DECLARE_WITH_COMMA(a) a,
Run Code Online (Sandbox Code Playgroud)
然后
// foo.h
#include "top.h"
#define MY_TYPES(d) \
d(One) \
d(Two) \
d(Three) \
NumElems
enum MyTypes {
MY_TYPES(DECLARE_WITH_COMMA)
};
Run Code Online (Sandbox Code Playgroud)
当我尝试在"foo.h"上运行SWIG(版本2.0.4)时,这是一种长篇大论的说法,我得到:
foo.h:12: Error: Syntax error in input(1).
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我的选择是什么,因为我可能不想更改供应商提供的标题?
我对intel指令集的了解有点生疏.你能告诉我为什么我可能在我的功能的优化版本中遇到分段错误(如果你能告诉我为什么我没有在代码的-O0版本中得到它的话可以获得奖励积分.
它是由GCC 4.1.2编译的C代码.
这是崩溃时GDB的"disas"命令的结果:
0x00000000004263e5 <+0>: sub $0x8,%rsp
0x00000000004263e9 <+4>: movsd %xmm2,(%rsp)
0x00000000004263ee <+9>: divsd %xmm1,%xmm0
0x00000000004263f2 <+13>: callq 0x60f098 <log@plt>
=> 0x00000000004263f7 <+18>: andpd 0x169529(%rip),%xmm0
0x00000000004263ff <+26>: movsd (%rsp),%xmm1
0x0000000000426404 <+31>: ucomisd %xmm0,%xmm1
0x0000000000426408 <+35>: seta %al
0x000000000042640b <+38>: movzbl %al,%eax
0x000000000042640e <+41>: add $0x8,%rsp
0x0000000000426412 <+45>: retq
Run Code Online (Sandbox Code Playgroud)
这是函数的原始来源:
char is_within_range(double a, double b, double range) {
double ratio = a / b;
double logRatio = fabs(log(ratio));
return logRatio < range;
}
Run Code Online (Sandbox Code Playgroud)
这里是参考的非优化版本:
0x00000000004263e5 <+0>: push %rbp
0x00000000004263e6 <+1>: …Run Code Online (Sandbox Code Playgroud) 如果"alloc.c"中包含以下代码:
typedef __typeof__(sizeof(int)) size_t;
extern void *calloc (size_t __nmemb, size_t __size)
__attribute__ ((__nothrow__ )) __attribute__ ((__malloc__)) ;
extern void free (void *__ptr) __attribute__ ((__nothrow__ ));
struct _astruct {
int l;
};
int main() {
struct _astruct *f = (struct _astruct*)calloc(1, sizeof(struct _astruct));
f->l = 99;
int x = f->l;
free(f);
return x;
}
Run Code Online (Sandbox Code Playgroud)
(我知道这不是声明calloc/free的首选方法,但它是为了简化下面的输出.)
然后clang -O3 -S -emit-llvm alloc.c用Clang/LLVM 3.3 运行" ",你得到:
; ModuleID = 'alloc.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: nounwind …Run Code Online (Sandbox Code Playgroud) 编辑:这个问题没有实际意义.我误读了提交日期,它包含在现有版本的Go工具中.谢谢,詹姆斯!
似乎即将发布的Go(1.3)将允许非Go线程调用CGO回调.
我想知道人们通常做了什么来解决这个限制.
也就是说,我有一个第三方库自己创建线程,我想从这些线程中获取一些信息到Go代码中.
某种从C线程到代码"C"端的Go线程的切换机制?有些方法可以在不调用Go的情况下将消息发送到队列中?其他想法?
我需要在WebGL中实现相当于"谷歌地图"风格的缩放效果.具体来说,我有一个简单的二维场景,总是垂直于相机.当用户点击场景时,摄像机应缩放到位于点击上方的位置,但更接近二维场景.
例如,看到这个实现场景但没有缩放的jsfiddle:
如果您有一个支持WebGL的浏览器,您应该看到在Z轴上以-7渲染的三角形和正方形(2维).我已经放置了一个占位符handleMouseUp()事件处理程序来记录任何点击事件,但我有点迷失了如何将click事件给出的坐标转换为相机的新位置(或者我猜相当于一个新的位置)查看矩阵).
(jsfiddle基于learningwebgl.com的教程1,并使用glMatrix http://code.google.com/p/glmatrix/库进行矩阵操作.请记住,这是WebGL,类似于OpenGL ES,并且无法使用glu*功能.)
如果我做这样的事情:
> df <- data.frame()
> rbind(df, c("A","B","C"))
X.A. X.B. X.C.
1 A B C
Run Code Online (Sandbox Code Playgroud)
您可以看到该行被添加到空数据框中.但是,列会根据数据的内容自动命名.
如果我以后想要这会导致问题:
> df <- rbind(df, c("P", "D", "Q"))
Run Code Online (Sandbox Code Playgroud)
有没有办法控制由rbind自动创建的列的名称?或者其他一些方法来做我在这里尝试做的事情?
如果我有两个重叠的三角形,每个都有灰色(0.1,0.1,0.1,0.1),我将如何设置glBlendFunc,使重叠部分比非重叠部分渲染得更亮(更接近白色)?