小编las*_*owh的帖子

Go,AppEngine:如何为应用程序构建模板

人们如何在基于Go的AppEngine应用程序中处理模板的使用?

具体来说,我正在寻找一个提供以下内容的项目结构:

  • 模板和部分模板的分层(目录)结构
  • 允许我在我的模板上使用HTML工具/编辑器(在xxx.go文件中嵌入模板文本会使这很困难)
  • 在开发服务器上自动重新加载模板文本

潜在的障碍是:

  • template.ParseGlob()不会递归遍历.
  • 出于性能原因,建议不要将模板上载为原始文本文件(因为这些文本文件驻留在不同于执行代码的服务器上).

请注意,我不是在寻找使用模板包的教程/示例.这更像是一个应用程序结构问题.话虽这么说,如果你有解决上述问题的代码,我很乐意看到它.提前致谢.

google-app-engine go

46
推荐指数
1
解决办法
9763
查看次数

GCC:两个相似循环之间的矢量化差异

在编译时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)

唯一的区别在于内部循环中的表达式的结果是 …

c gcc loops vectorization compiler-optimization

33
推荐指数
1
解决办法
2816
查看次数

什么是PTHREAD_MUTEX_ADAPTIVE_NP

我在哪里可以找到"自适应"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)

c multithreading pthreads

26
推荐指数
3
解决办法
8012
查看次数

如何获取界面的reflect.Type?

为了确定给定类型是否使用反射包实现接口,您需要将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)

go

17
推荐指数
2
解决办法
1万
查看次数

由于预处理程序指令,SWIG错误

我们有一个供应商为我们提供了一个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)

所以我的问题是我的选择是什么,因为我可能不想更改供应商提供的标题?

swig c-preprocessor

13
推荐指数
1
解决办法
4918
查看次数

SIGSEGV优化版代码

我对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)

c assembly gcc segmentation-fault

10
推荐指数
1
解决办法
596
查看次数

LLVM/Clang分配器的特例

如果"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)

c compiler-construction llvm clang

8
推荐指数
1
解决办法
822
查看次数

使用Go 1.2的线程CGO

编辑:这个问题没有实际意义.我误读了提交日期,它包含在现有版本的Go工具中.谢谢,詹姆斯!

似乎即将发布的Go(1.3)将允许非Go线程调用CGO回调.

我想知道人们通常做了什么来解决这个限制.

也就是说,我有一个第三方库自己创建线程,我想从这些线程中获取一些信息到Go代码中.

某种从C线程到代码"C"端的Go线程的切换机制?有些方法可以在不调用Go的情况下将消息发送到队列中?其他想法?

multithreading thread-safety go cgo

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

单击以放大WebGL

我需要在WebGL中实现相当于"谷歌地图"风格的缩放效果.具体来说,我有一个简单的二维场景,总是垂直于相机.当用户点击场景时,摄像机应缩放到位于点击上方的位置,但更接近二维场景.

例如,看到这个实现场景但没有缩放的jsfiddle:

http://jsfiddle.net/JqBs8/4/

如果您有一个支持WebGL的浏览器,您应该看到在Z轴上以-7渲染的三角形和正方形(2维).我已经放置了一个占位符handleMouseUp()事件处理程序来记录任何点击事件,但我有点迷失了如何将click事件给出的坐标转换为相机的新位置(或者我猜相当于一个新的位置)查看矩阵).

(jsfiddle基于learningwebgl.com的教程1,并使用glMatrix http://code.google.com/p/glmatrix/库进行矩阵操作.请记住,这是WebGL,类似于OpenGL ES,并且无法使用glu*功能.)

opengl-es webgl

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

R:在调用rbind()时控制自动创建的列名

如果我做这样的事情:

> 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自动创建的列的名称?或者其他一些方法来做我在这里尝试做的事情?

r

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

"添加剂"glBlendFunc

如果我有两个重叠的三角形,每个都有灰色(0.1,0.1,0.1,0.1),我将如何设置glBlendFunc,使重叠部分比非重叠部分渲染得更亮(更接近白色)?

opengl

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