小编Bai*_*ker的帖子

绑定超出范围的变量可以加速您的代码吗?

我最近在Node JS中做了很多工作,并且重点是异步模块使我依赖于对闭包应用bind函数来将异步调用包装在循环内(以保留函数调用时变量的值)。这让我开始思考。将变量绑定到函数时,可以将传递的值添加到该函数的本地范围。因此,在Node(或通常引用超出范围变量的任何JS代码)中,将超出范围变量(例如模块)绑定到函数以便在使用时它们成为局部范围的一部分是否有利?

普通JS中的示例:

var a = 1,
    func1 = function(b) { console.log(a,b); },
    func2 = (function(a,b) { console.log(a,b); }).bind(null, a);

//func1(2) vs func2(2)
Run Code Online (Sandbox Code Playgroud)

节点中的示例

var fs = require('fs'),
    func1 = function(f) { fs.stat(f, function(err, stats){}); },
    func2 = (function(fs, f) { fs.stat(f, function(err, stats){}); }).bind(null, fs);

//func1('file.txt') vs func2('file.txt')
Run Code Online (Sandbox Code Playgroud)

在我上面的示例中,func1或func2是否会比其他示例明显更快(不包括外部因素,例如获取文件统计信息需要多长时间)?


这是我凑在一起的一个JSFiddle,它做了一个快速而肮脏的基准测试:http : //jsfiddle.net/AExvz/

  1. 谷歌浏览器14.0.797.0 dev-m
    • Func1:2-4ms
    • Func2:30-46ms
  2. Google Chrome 14.0.800.0金丝雀
    • Func1:2-7ms
    • Func2:35-39ms
  3. Firefox 5.0
    • Func1:0-1ms
    • Func2:35-42ms
  4. Opera 11.11内部版本2109
    • Func1:21-32ms
    • Func2:68-73ms
  5. Safari 5.05(7533.21.1)
    • Func1:23-34ms
    • Func2:71-78ms
  6. Internet Explorer 9.0.8112.16421
    • Func1:10-17毫秒
    • Func2:14-17毫秒 …

javascript bind node.js

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

IE8中输入文件中缺少浏览按钮?

我已经为IE 9和8 截取了我的文件输入法的截图.为什么IE不显示浏览按钮?该表位于如下形式:

<table>
    <tr>
        <td colspan="2"><h3>Upload Photo</h3></td>
    </tr>      
    <tr> 
        <td colspan="2"><input type="file" name="mapimage" id="mapimage"/></td>
    </tr>
    <tr>
        <td><input type="submit" value="Upload" name="update_image" id="update_image"/>      </td> 
        <td><img id="loading" src="images/loading.gif" alt="working.." style="visibility: hidden;" /></td> 
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加一个大小属性,但它仍然没有出现.IE 8及以下版本是否有任何解决方法或这是一个已知问题?

html file-upload internet-explorer-8

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

PUSH的Intel REX编码

GAS对以下说明进行了以下编码:

push rbp    # 0x55
push rbx    # 0x53
push r12    # 0x41 0x54
push r13    # 0x41 0x55
Run Code Online (Sandbox Code Playgroud)

AMD64规范(页313):

PUSH reg64 50 +rq  将64位寄存器的上下文压入堆栈.

由于用于偏移rbprbx5个和3个,分别为第一两种编码有意义.但是我不明白最后两个编码是怎么回事.

据我所知,0x40-0x4f是一个REX前缀和0x41具有REX.B位集(其是一个扩展的MSB MODRM.rmSIB.base,根据该外部参考).规范提到要访问所有16个GPR,你需要使用REX,但目前还不清楚截止点在哪里.

通过查阅MODRM和SIB的文档,我不认为使用了SIB,因为它的目的是使用base + offset寄存器进行索引(虽然说实话,我不能真正告诉你如何区分MODRM和SIB只是给出了编码).

所以,我怀疑这里使用的是MODRM.考虑到当前的push r12(0x41 0x54)(注意到r12有偏移12),我们有:

+----------------+--------------------+
| 0x41           | 0x54               |
+----------------+--------------------+
| REX            | MODRM              |
+--------+-------+-----+--------+-----+
| Prefix | WRXB  | mod | reg …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 intel gnu-assembler machine-code

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

返回 GADT 任何构造函数结果的函数

当我尝试创建一个返回函数Thing aThingGADT 在哪里)时,我目前正在与类型检查器进行斗争。一个最小的例子:

{-#LANGUAGE GADTs, EmptyDataDecls #-}
module Main where

-- Define a contrived GADT
data TFoo
data TBar
data Thing a where
  Foo :: Int -> Thing TFoo
  Bar :: String -> Thing TBar

combine :: [Thing a]
combine = [Foo 1, Bar "abc"]

main :: IO ()
main = undefined
Run Code Online (Sandbox Code Playgroud)

a类型检查器对不匹配感到不高兴TBar。想必这是因为它已经推断出来aTFoo。但是,这是令人惊讶的,因为使用常规求和类型,您可以执行以下操作:

data Thing = Foo Int | Bar String

combine :: [Thing]
combine = [Foo 1, Bar …
Run Code Online (Sandbox Code Playgroud)

haskell typing gadt

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

RESTful处理子资源

我一直在创建RESTful应用程序,并且我未决定如何处理不返回资源的所有实体或返回多个资源(GET /resource/all请求)的请求.请允许我一些时间来设置这种情况(我会尝试尽可能地概括这一点,以便它可以适用于除我之外的其他人):

假设我正在创建一个产品API.为简单起见,假设它返回JSON(在发送正确的接受标头之后).可以访问产品/product/[id].产品有评论,可以访问/products/[id]/review/[id].

我的第一个问题在于这种子资源模式.由于您在获取产品时可能并不总是想要评论,因此可以通过其他URI访问它们.根据我的内容,我应该包含请求的URI,该URI将返回产品请求响应中产品的所有审核URI.我应该如何解决这个问题,以便它遵守RESTful标准?它应该是标题,Reviews-URI: /product/123/review/all还是应该在响应正文中包含URL,如下所示:

{ 'name': 'Shamwow',
  'price': '$14.99',
  'reviews': '/product/123/review/all'
}
Run Code Online (Sandbox Code Playgroud)

我的第二个问题是关于/product/[id]/review/all请求应该如何运作.我听说我应该发送所有评论的URL并让用户获取每个评论,而不是将所有评论打包成一个请求.我应该如何根据RESTful标准指出这一系列的评论URI?我应该使用标头或列出响应正文中的URI,如下所示:

{ 'reviews': [ '/product/123/review/1',
               '/product/123/review/2',
               '/product/123/review/3'
             ]
}
Run Code Online (Sandbox Code Playgroud)

api rest http

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

使用PHP以正确的方式路由页面请求

我需要知道"正确"执行网站导航的术语和最佳做法吗?类似于stackoverflow在你通过url提出问题时如何路由你:

"http://stackoverflow.com/questions/ask"

根据我对PHP编程的了解,我可能会像这样编写代码:

"http://stackoverflow.com/index.php?p=questions&act=ask"

希望你明白我的意思.我想知道这种页面导航和请求/响应处理方法的术语,如果可能的话,在使用此标准/方法设计Web应用程序时需要记住的最佳实践,限制或其他任何内容.我甚至不知道这是用PHP还是用ASP或Ruby编写的一些网络后端完成的,或者你有什么,所以我用猜测填充了标签.

php apache mod-rewrite url-routing

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

postgresql 关闭连接:无法从客户端接收数据:对等方重置连接

我有 3 个odoos在使用 ubuntu16 和postgresql 9.5 的aws 中正常运行到 ec2 ,但几天前有 1 个 odoo 实例死亡,在我的日志 odoo 中我看到:

2018-01-11 06:15:56,343 28311 ERROR ? openerp.addons.bus.bus: Bus.loop error, sleep and retry
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/openerp/addons/bus/bus.py", line 136, in run
    self.loop()
  File "/usr/lib/python2.7/dist-packages/openerp/addons/bus/bus.py", line 122, in loop
    conn.poll()
OperationalError: SSL connection has been closed unexpectedly

2018-01-11 06:15:58,283 28311 INFO ? openerp.service.server: Initiating shutdown
Run Code Online (Sandbox Code Playgroud)

在我的 postgresql 日志中,我得到:

2018-01-11 01:07:52 -05 LOG:  could not receive data from client: Connection reset …
Run Code Online (Sandbox Code Playgroud)

python postgresql odoo-8

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

动态模式匹配嵌套的GADT从包装器中返回

我最近问过如何制作一个GADT实例的同源列表:函数返回 GADT 的任何构造函数的结果

TL;博士

{-#LANGUAGE GADTs, EmptyDataDecls #-}
module Main where

-- Define a contrived GADT
data TFoo
data TBar
data Thing a where
  Foo :: Int -> Thing TFoo
  Bar :: String -> Thing TBar

data SomeThing = forall a. SomeThing (Thing a)

combine :: [SomeThing]
combine = [Something $ Foo 1, SomeThing $ Bar "abc"]
Run Code Online (Sandbox Code Playgroud)

现在,我在动态"展开"它们时遇到了一些麻烦.假设我们有这个(仍然是人为的,但更接近我的实际用例)代码:

{-#LANGUAGE GADTs, EmptyDataDecls #-}
module Main where

-- Define a contrived GADT
data Thing a where
  Thing :: TKind a -> …
Run Code Online (Sandbox Code Playgroud)

haskell typing pattern-matching gadt

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

返回具有相同生命周期的结构的迭代器的方法的生命周期

假设以下人为的例子:

struct Board {
    squares: Vec<i32>,
}

struct Point<'a> {
    board: &'a Board,
    x: i32,
    y: i32,
}

impl<'a> Point<'a> {
    pub fn neighbors(&self) -> impl Iterator<Item = Point<'a>> {
        [(0, -1), (-1, 0), (1, 0), (1, 0)]
            .iter().map(|(dx, dy)| Point {
                board: self.board,
                x: self.x + dx,
                y: self.y + dy,
            })
    }
}
Run Code Online (Sandbox Code Playgroud)

这不能编译,因为根据我的理解,在lambda中创建的点的生命周期是不正确的:

error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
  --> src/main.rs:14:25
   |
14 |               .iter().map(|(dx, dy)| Point {
   |  _________________________^
15 | | …
Run Code Online (Sandbox Code Playgroud)

lifetime rust borrow-checker

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

包装可能无效的可调用返回

假设我有一些包装函数,我想做一些设置,调用回调(并保存其结果),做一些清理,然后返回回调返回的内容:

#include <functional>
#include <utility>

template<class F, typename... Args>
decltype(auto) wrap(F&& func, Args&... args) {
    // Do some stuff before
    auto result = std::invoke(std::forward<decltype(func)>(func),
                              std::forward<Args>(args)...);
    // Do some stuff after
    return result;
}
Run Code Online (Sandbox Code Playgroud)

一个实际的例子是一个计时器实用程序函数,它返回函数调用的经过时间及其返回值(也许在元组中).

这样的函数适用于具有返回类型的callables:

void foo() {
    auto a = 1;
    wrap([](auto a) { return 1; }, a);
}
Run Code Online (Sandbox Code Playgroud)

但是使用void返回类型的可调用,在模板特化期间编译器抱怨auto result具有不完整类型void:

void foo() {
    auto a = 1;
    wrap([](auto a) {}, a);
}
Run Code Online (Sandbox Code Playgroud)

这当然是有道理的,因为虽然你可以return void(),但你不能将它存储在一个变量中.

我想wrap为两种类型的callables工作.我试图用std::function两个签名wrap:

  1. template<class T, …

c++ closures c++17

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