问题列表 - 第15760页

C#编译器+带有装箱+约束的通用代码

让我们检查为以下通用方法生成的MSIL代码:

public static U BoxValue<T, U>(T value)
  where T : struct, U
  where U : class
{
  return value;
}
Run Code Online (Sandbox Code Playgroud)

看:

.method public hidebysig static !!U  BoxValue<valuetype .ctor
 ([mscorlib]System.ValueType, !!U) T,class U>(!!T 'value') cil managed
{
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  box        !!T
  IL_0006:  unbox.any  !!U
  IL_000b:  ret
}
Run Code Online (Sandbox Code Playgroud)

但对于上面的通用代码,更有效的IL表示应该是:

  IL_0000:  ldarg.0
  IL_0001:  box        !!T
  IL_0006:  ret
Run Code Online (Sandbox Code Playgroud)

从约束中可知,该值被加框为引用类型.Unbox.any操作码是完全冗余的,因为在box操作码之后,IL栈的值已经是有效的引用!!U,可以在没有任何拆箱的情况下使用.

为什么C#3.0编译器不使用约束元数据来发出更高效的通用代码?Unbox.any提供了一个小的开销(只比4x-5x慢),但为什么不在这种情况下发出更好的代码呢?

c# generics boxing unboxing cil

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

多线程程序中的std :: string

鉴于:

1)C++ 03标准没有以任何方式解决线程的存在

2)C++ 03标准让实现决定是否std::string应该在其拷贝构造函数中使用Copy-on-Write语义

3)Copy-on-Write语义经常导致多线程程序中不可预测的行为

我得出以下看似有争议的结论:

您无法在多线程程序中安全且可移植地使用std :: string

显然,没有STL数据结构是线程安全的.但至少,使用std :: vector,您可以简单地使用互斥锁来保护对向量的访问.使用使用COW的std :: string实现,如果不在供应商实现中深入编辑引用计数语义,您甚至无法可靠地执行此操作.

现实世界的例子:

在我的公司,我们有一个多线程应用程序,经过彻底的单元测试,无数次通过Valgrind.该应用程序运行了几个月,没有任何问题.有一天,我在另一个版本的gcc上重新编译应用程序,突然之间我总是得到随机的段错误.Valgrind现在在std :: string复制构造函数中报告libstdc ++中的无效内存访问.

那么解决方案是什么?好吧,当然,我可以将typedef std::vector<char>作为一个字符串类 - 但实际上,这很糟糕.我还可以等待C++ 0x,我祈祷将要求实现者放弃COW.或者,(颤抖),我可以使用自定义字符串类.我个人总是反对在预先存在的库可以正常运行时实现自己的类的开发人员,但老实说,我需要一个字符串类,我可以肯定它不使用COW语义; 和std :: string根本不保证.

我是不是正确的,std::string根本无法可靠地使用在所有便携式,多线程程序?什么是好的解决方法?

c++ stl

35
推荐指数
3
解决办法
2万
查看次数

正则表达式PHP,匹配具有特定文本的所有链接

我在PHP中寻找一个正则表达式,它将锚点与其上的特定文本相匹配.例如,我想获得带有文本mylink的锚:

<a href="blabla" ... >mylink</a>
Run Code Online (Sandbox Code Playgroud)

所以它应该匹配所有锚点,但只有它们包含特定文本所以它应匹配这些字符串:

<a href="blabla" ... >mylink</a>

<a href="blabla" ... >blabla mylink</a>

<a href="blabla" ... >mylink bla bla</a>

<a href="blabla" ... >bla bla mylink bla bla</a>
Run Code Online (Sandbox Code Playgroud)

但不是这个:

<a href="blabla" ... >bla bla bla bla</a>
Run Code Online (Sandbox Code Playgroud)

因为这个不包含单词mylink.

这个也不应该匹配:"mylink is string"因为它不是锚.

有人有什么想法吗?

Thanx Granit

php regex pattern-matching html-parsing

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

start-stop-daemon引用的参数被误解了

我一直在尝试使用start-stop-daemon创建一个init脚本.我被困在守护进程的参数上.我想将这些保存在脚本顶部的变量中,但我无法正确地过滤掉报价.

我会在这里使用ls,所以我们不必查看大多数人不会知道或关心的二进制文件和参数.

我正在寻找的最终结果是开始 - 停止...运行ls -la"/带空格的文件夹/"

DAEMON=/usr/bin/ls 
DAEMON_OPTS='-la "/folder with space/"'

start-stop-daemon --start --make-pidfile --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS
Run Code Online (Sandbox Code Playgroud)

双重逃避选项并尝试无数的引用变化无济于事......然后他们最终在守护进程中总是搞砸了.将$ DAEMON_OPTS包含在引号中会改变一些事情...然后它们被视为一个引用...但从来没有正确的数字:)

回应命令行(开始 - 停止......)将正确的内容打印到屏幕上.但守护进程(真正的守护进程,而不是ls)抱怨错误的参数数量.

如何指定变量以使其中的引号正确地带到守护程序?

linux shell debian

21
推荐指数
2
解决办法
4万
查看次数

哪些字符对JavaScript变量名有效?

哪些字符可用于命名JavaScript变量?

我想在这里为我的非JavaScript用户创建一个小的"扩展库"(当涉及到语言时,他们似乎都很娇气).我喜欢jQuery和Prototype都使用$美元符号,因为我使用jQuery,我正在寻找另一个好用的单字符符号.

我意识到我可以测试一些角色,但我希望能够缩小我的角色列表(考虑到未来可能与另一个流行的库集成).

javascript character

532
推荐指数
9
解决办法
30万
查看次数

你如何组织你的工作?

你如何工作的?更具体地说,您如何保持编程任务的有序性.

当我在家里进行Mac开发时,我使用称为大纲的软件来组织,记录笔记并优先处理我需要做的任务.我开始使用一个名为Deep Notes的程序 ,这是一个很好的简单免费工具.但现在我使用命中列表.

我一直在Windows平台上寻找一个相当好的程序,但到目前为止还没找到.到目前为止,我已经尝试过FusionDesk并且对它不满意.我开始想要编写自己的软件,但我想先问一下,看看是否有人知道我在这个庞大的互联网上找不到的好产品.

更新

如果您从未使用过大纲来组织想法,请参阅以下简要概述. http://en.wikipedia.org/wiki/Outliner 一个好的大纲比一个简单的平面分层TODO列表更复杂,但很简单,只是一个小技巧.大纲者最重要的功能之一是能够创建嵌套的任务层次结构.例如:

  • 实现功能A.
  • ---在数据级别添加支持
  • ---为功能A创建快速界面
  • ---创建将接口连接到数据层的业务逻辑
  • ---优化界面

您还可以折叠嵌套任务,如文件夹结构.如果我没有使用功能A,那么我应该能够折叠树,这样它的子任务就不可见了.

project-management

17
推荐指数
3
解决办法
4930
查看次数

如何从Perl匹配运算符中将匹配提取到变量中?

如果我有匹配运算符,如何将括号中捕获的字符串部分保存在变量中而不是使用$1,$2等等?

... = m/stuff (.*) stuff/;
Run Code Online (Sandbox Code Playgroud)

左边的是什么?

perl

15
推荐指数
3
解决办法
4万
查看次数

阻止IE加载动态包含的脚本两次

我在misc中包含了一些相关的内容.通过在<script>标记末尾添加标记<body>然后加载其他javascript文件来添加网页.这个流程有点复杂,所以在问我的问题之前我会尝试解释它:

  • 浏览器载入页面与我们<script>接近结束元素<body>元素
  • 脚本标记的src属性指向javascript文件(在某些情况下)注入第二个<script>元素
  • 注入<script>元素的src属性指向另一个javascript文件,最终在页面的相应部分注入一些内容.

我们使用这种两阶段方法在决定是否包含最终内容之前能够进行一些基本处理,这可能需要一些时间来加载.

问题是IE8(可能是旧版本)加载最后一次javascript两次.似乎设置src属性的行为将触发加载,但是将脚本标记附加到DOM.有什么方法可以避免这种情况吗?

我已经创建了一个问题的简单演示.如果您有某种方式来跟踪HTTP请求,您将看到IE8加载js_test2.js两次.

javascript jquery internet-explorer

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

类别页面magento中的"Shop By"功能

我的问题是我在magento中使用主题并使用2-column left模板的布局.我想在类别页面中显示" shop by "功能.当我在网站上搜索任何内容时,它显示" shop by "块是网站的链接.

请帮忙

magento

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

检查Python中的对象是否像文件一样

类文件对象是Python中的对象,其行为类似于真实文件,例如具有read()和write方法(),但具有不同的实现.它是鸭子打字概念的实现.

在文件预期的任何地方允许类似文件的对象被认为是一种好的做法,例如可以使用StringIO或Socket对象来代替真实文件.所以执行这样的检查是不好的:

if not isinstance(fp, file):
   raise something
Run Code Online (Sandbox Code Playgroud)

检查对象(例如方法的参数)是否"类似文件"的最佳方法是什么?

python file

86
推荐指数
6
解决办法
4万
查看次数