小编Joe*_*ams的帖子

为什么在C#中没有System.DateTime的"约会"速记?

int,long,ushort,uint,short,等.

为什么没有一个简短的手System.DateTime

.net c#

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

精确解释JavaScript < - > DOM循环引用问题

jQuery.data与原始expando属性(可以分配给DOM节点的任意属性)的一个被吹捧的优点是jQuery.data "不受循环引用的影响,因此没有内存泄漏".谷歌的一篇名为"优化JavaScript代码"的文章详细介绍:

Web应用程序最常见的内存泄漏涉及JavaScript脚本引擎和实现DOM的浏览器的C++对象之间的循环引用(例如,在JavaScript脚本引擎和Internet Explorer的COM基础结构之间,或者在JavaScript引擎和Firefox XPCOM基础结构之间).

它列出了两个循环引用模式的示例:

  • DOM元素→事件处理程序→闭包范围→DOM

  • DOM元素→通过expando→中间对象→DOM元素

但是,如果DOM节点和JavaScript对象之间的引用循环产生内存泄漏,这是否意味着任何非平凡的事件处理程序(例如onclick)都会产生这样的泄漏?我不知道事件处理程序如何避免引用循环,因为我看到它的方式:

  • DOM元素引用事件处理程序.

  • 事件处理程序引用DOM(直接或间接).在任何情况下,几乎不可能避免window在任何有趣的事件处理程序中引用,而不是编写setInterval从全局队列中读取操作的循环.

有人可以提供JavaScript↔DOM循环引用问题的精确解释吗?我想澄清的事情:

  • 什么浏览器受影响?jQuery源代码中的评论专门提到IE6-7,但谷歌文章表明Firefox也受到了影响.

  • expando属性和事件处理程序在内存泄漏方面有何不同?或者这些代码片段是否容易受到同类内存泄漏的影响?

    // Create an expando that references to its own element.
    var elem = document.getElementById('foo');
    elem.myself = elem;
    
    // Create an event handler that references its own element.
    var elem = document.getElementById('foo');
    elem.onclick = function() {
        elem.style.display = 'none';
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果页面由于循环引用而泄漏内存,则泄漏是否会持续到整个浏览器应用程序关闭,或者窗口/选项卡关闭时是否释放内存?

javascript internet-explorer memory-management

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

在共享IORef时,只要我使用atomicModifyIORef编写,使用readIORef读取是否安全?

如果我IORef在多个线程之间共享,并使用atomicModifyIORef写入它:

atomicModifyIORef ref (\_ -> (new, ()))
Run Code Online (Sandbox Code Playgroud)

用普通的旧版读取价值是否安全readIORef?或者有可能readIORefatomicModifyIORef修改后在另一个线程中返回旧值吗?

我认为这就是文档所暗示的:

atomicModifyIORef充当重新排序的障碍.多个atomicModifyIORef操作以严格的程序顺序发生.在任何早期(在程序顺序中)IORef操作之前,或在任何后来的IORef操作之后,都不会发现atomicModifyIORef.

我只是想确定一下.

haskell thread-safety ioref

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

在Visual Studio中使用Git,如何导航存储库文件?

我在Visual Studio 2012中为Git安装了Visual Studio Tools,它看起来就像Git支持Visual Studio 2013开箱即用.我转到"连接到团队项目"并使用Local Git Repositories下的"Add"添加现有的Git存储库.当我打开它时,我看不到浏览代码的选项:

在此输入图像描述

"解决方案资源管理器"窗格也是空的.

如何在Visual Studio中导航Git存储库文件?对于Git来说,没有像TFVC那样的"Source Control Explorer"吗?

git visual-studio-2012 visual-studio-2013

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

C的Variant数据类型库

是否有一个像样的开源C库来存储和操作
动态类型的变量(又名变种)?我主要对原子值(int8,int16,int32,uint,字符串,blob等)感兴趣,而JSON样式的数组和对象以及自定义对象也很好.这种库有用的一个主要情况是使用SQL数据库.

这种库最明显的特征是所有支持值的单一类型,例如:

struct Variant {
    enum Type type;
    union {
        int8_t int8_;
        int16_t int16_;
        // ...
    };
};
Run Code Online (Sandbox Code Playgroud)

其他功能可能包括将Variant对象转换为C结构(使用绑定表),将值转换为/从字符串转换,以及与现有数据库库(如SQLite)集成.

注意:我不相信这个问题是C中通用数据类型任何库的重复吗?,指的是"队列,树木,地图,名单".我所谈论的内容更多地侧重于使用SQL数据库与在解释语言中使用它们一样顺畅.

c variant c-libraries

7
推荐指数
3
解决办法
5738
查看次数

在撰写评论时,将复数形式设为复数是一种好方法?

在撰写评论时,我有时会发现自己需要在撰写评论时以复数形式谈论类型(类,结构等),例如:

/*
 * getThings
 *    Get a list of --> Things <-- from somewhere.
 */
Thing *getThings(void);
Run Code Online (Sandbox Code Playgroud)

问题是,类型名称是单数(即Thing),但我想在评论中以复数形式谈论它们.

如果我说Things,它向读者建议它正在谈论一种叫做的类型Things,但事实并非如此.如果我说Thing's,它看起来很尴尬,因为它在语法上是不正确的(它要么是占有欲,要么是"Thing is",而不是复数).我可以谈谈这个问题然后说a list of Thing items

在编写复数形式时,坚持什么是好的约定?

comments comment-conventions

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

当字符串成为"this"时,为什么字符串会被删除?

我发现了JavaScript(或者我的浏览器的想法)的一个特点:

var s = "Hello, world";

function foo(arg)
{
    console.log(arg);
    console.log(this);
}

foo.call(s, s);
Run Code Online (Sandbox Code Playgroud)

在启用Firebug控制台的情况下运行上述操作,我得到:

Hello, world
String { 0="H", 1="e", more...}
Run Code Online (Sandbox Code Playgroud)

为什么在成为this传递给字符串之前,字符串会自动变成一个奇怪的对象foo

我称之为奇怪对象的原因是因为jQuery会对它产生影响.例如:

$.each(["one", "two", "three"], function(i, x) {
    $('<p></p>').text(x)   .appendTo('body'); // Works
    $('<p></p>').text(this).appendTo('body'); // Doesn't work
});
Run Code Online (Sandbox Code Playgroud)

javascript

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

ConnectEx要求套接字"初始绑定",但是要什么?

ConnectEx功能需要一个"未连接的,以前绑定的插座".实际上,如果我省略了我的示例中的绑定步骤(见下文),ConnectEx将失败并使用WSAEINVAL.

这是我目前的理解:在调用ConnectEx之前,套接字绑定INADDR_ANY端口0(除非它已绑定):

struct sockaddr_in addr;
ZeroMemory(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = 0;
rc = bind(sock, (SOCKADDR*) &addr, sizeof(addr));
if (rc != 0) { ... bind failed; call WSAGetLastError to see why ... }
Run Code Online (Sandbox Code Playgroud)

或者对于IPv6套接字:

struct sockaddr_in6 addr;
ZeroMemory(&addr, sizeof(addr));
addr.sin6_family = AF_INET6;
addr.sin6_addr = in6addr_any;
addr.sin6_port = 0;
rc = bind(sock, (SOCKADDR*) &addr, sizeof(addr));
if (rc != 0) { ... …
Run Code Online (Sandbox Code Playgroud)

windows network-programming winsock overlapped-io

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

Shift-reduce:何时停止减少?

我正在尝试学习shift-reduce解析.假设我们有以下语法,使用强制执行操作顺序的递归规则,受ANSI C Yacc语法的启发:

S: A;

P
    : NUMBER
    | '(' S ')'
    ;

M
    : P
    | M '*' P
    | M '/' P
    ;

A
    : M
    | A '+' M
    | A '-' M
    ;
Run Code Online (Sandbox Code Playgroud)

我们想要使用shift-reduce解析来解析1 + 2.首先,1被移动为NUMBER.我的问题是,它是否减少到P,然后是M,然后是A,然后是S?它是如何知道停在哪里的?

假设它确实一直减少到S,然后转移'+'.我们现在有一个堆栈包含:

S '+'
Run Code Online (Sandbox Code Playgroud)

如果我们转移'2',减少可能是:

S '+' NUMBER
S '+' P
S '+' M
S '+' A
S '+' S
Run Code Online (Sandbox Code Playgroud)

现在,在最后一行的任一侧,S可以是P,M,A或NUMBER,并且在任何组合都是文本的正确表示的意义上它仍然有效.解析器如何"知道"来实现它

A '+' M
Run Code Online (Sandbox Code Playgroud)

这样它可以将整个表达式减少到A,那么S?换句话说,在转移下一个令牌之前,它如何知道停止减少?这是LR解析器生成的关键难点吗?


编辑:问题的补充如下.

现在假设我们解析1+2*3.一些转移/减少操作如下:

Stack    | Input | Operation
---------+-------+----------------------------------------------
         | 1+2*3 …
Run Code Online (Sandbox Code Playgroud)

theory parsing context-free-grammar formal-languages shift-reduce

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

JavaScript中的基本流控制

请您解释一下,如何在JavaScript中编写真正基本的流控制?谢谢.

flow([

  function(callback) { /* do something */ callback(); /* run next function */ },
  function(callback) { /* do something */ callback(); /* run next function */ },
  function(callback) { /* do something */ callback(); /* run next function */ },
  function(callback) { /* do something */ callback();  }

], function() {

  alert("Done.");

});
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
2
解决办法
1828
查看次数