小编Rob*_*ann的帖子

Node.js 0.12中提供ECMAScript 6功能

新的稳定版本的Node.js(0.12)最近已经升级了Google的v8 JavaScript引擎v3.28.73.

Node.js中当前存在哪些ECMAScript 6功能,而不使用该--harmony标志?

我检查了几个声称要列出ES 6功能的网站但是所有这些功能看起来都已过时 - 最突出的是,这个表(更新: 现在更新时的当前Node.js状态为0.12),因为有几个功能列为--harmony当我发现其中一些是默认启用时需要标志(地图,集合,符号,仅举几例).更新:节点特定表已经可用

此外,尝试谷歌这个信息纯粹为v8引擎提供了太新的信息 - 当前的v8版本是4.2.*,这远远超过了Node.js使用的.

我希望这个问题(及其答案)将成为Node.js开发人员现在可以使用的ES 6功能的全面总结.

在Node.js 0.12中启用ES 6功能我目前知道:

  • Maps,Sets/WeakMaps,WeakSets
  • 符号
  • Object.observe
  • 承诺
    • .isInteger
    • .isSafeInteger
    • .isNaN
    • 小量
    • .MIN_SAFE_INTEGER
    • .MAX_SAFE_INTEGER
  • 数学
    • .clz32
    • .imul
    • .标志
    • .log10
    • .log2
    • .log1p
    • .expm1
    • .cosh
    • .sinh
    • .tanh
    • .acosh
    • .asinh
    • .atanh
    • .trunc
    • .fround
    • .cbrt
    • .hypot

javascript v8 node.js ecmascript-6

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

允许重复属性名称的目的是什么?

我正在阅读MDN javascript参考,因此以下代码不再返回false:

function haveES6DuplicatePropertySemantics(){
  "use strict";
  try {
    ({ prop: 1, prop: 2 });

    // No error thrown, duplicate property names allowed in strict mode
    return true;
  } catch (e) {
    // Error thrown, duplicates prohibited in strict mode
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

在ECMAScript 5严格模式代码中,重复的属性名称被认为是SyntaxError.通过引入计算属性名称可以在运行时进行复制,ECMAScript 6已经删除了此限制.

我的问题是,在初始化器中允许重复的属性名称有什么实际好处?我可以看到,当动态分配对象属性时,有时会发生这种情况,但由于优先顺序显然决定了在新创建的对象上实际设置了哪些属性 - 这似乎不仅仅是最好避免的无限行为.

javascript standards ecmascript-6

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

LDAP操作错误

我有ldap连接的问题.

$hostname="ldap://sub.domain.com";
$ds=ldap_connect($hostname, 389);
ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals');
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');

if ($ds)
{
$dn = "OU=Users,OU=ro,DC=sub,DC=domain,DC=com";

if (!($ldapc=ldap_bind($ds))) { 
    echo "<p>Error:" . ldap_error($ds) . "</p>"; 
    echo "<p>Error number:" . ldap_errno($ds) . "</p>"; 
    echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>"; 
    die;
} 

$attributes = array("sn");
$filter = "(sn=*)";
$result = ldap_search($ds, $dn, $filter, $attributes);

echo $result;
$info = ldap_get_entries($ds, $result);
for ($i=0; $i < $info["count"]; $i++) { …
Run Code Online (Sandbox Code Playgroud)

php ldap

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

这个功能可以被垃圾收集吗?

考虑一下这块蛋糕......呃,代码:

'use strict'

function doWork () {
  return new Promise(function (resolve, reject) {
    // work work work...
    // Done! But... where's the resolve() ???
  })
}

doWork().then(function doMoreWork () {
  // Some more work to do...
})
Run Code Online (Sandbox Code Playgroud)

一旦Promise的构造函数中的函数完成......

  1. Promise对象垃圾收藏?
  2. doMoreWork()垃圾收藏?

我的猜测是doMoreWork()不能直接进行GC编辑,因为Promise保留了对它的引用,但是一旦promise的主体完成并将执行上下文返回到上部(?)范围,堆栈就会展开(因为这里没有更多的语句)被执行)并且Promise变得无法访问,因此是垃圾收集的.

你能否证实我对这个主题的理解是正确的?

我怎么能凭经验观察这种行为?换句话说,我如何监控哪些对象正在进行GC编辑?何时?我纯粹在Node.js中开发,如果这有任何区别.

javascript garbage-collection v8 node.js

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

Swift包和冲突的依赖项

我见过的每个包管理器最具挑战性的任务之一是处理冲突的依赖项.

让我们使用以下虚构的应用程序SwiftApp,它取决于一些第三方软件包.

- SwiftApp - packageA@latest - packageC@1.0.0 - packageD@latest - packageB@latest - packageC@2.0.0 - packageE@latest

从上面的依赖图中,我们可以看到SwiftApp的两个依赖项都使用packageC,但使用不同的主要版本标识符.对于大多数语言生态系统而言,这成为一个问题 - 主要的版本冲击通常意味着对代码进行了更改,这些更改与以前的主要版本不向后兼容.

根据语言/编译器/其他相关组件的技术功能,可以通过以下方式之一实现包管理器:

  1. 拒绝安装/编译(php,ruby,python?,其他?)
  2. 不关心,让开发人员处理潜在的编译器错误(???)
  3. 独立为两个软件包安装packageC(Node.js,其他?)

第三种选择只能通过语言或编译器本身的适当支持来实现.

可以在没有Swift破坏的情况下实现这种依赖图吗?

换句话说,packageA在技术上是否可以拥有(和使用)packageC 1.0.0版,而packageB将拥有2.0.0版本?

鉴于最近宣布Swift现在是开源的并且自带一个软件包管理器,我认为这个问题对于对Swift软件包开发感兴趣的未来读者可能非常有价值.

swift swift-package-manager

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

使用Hugo插件

我正在尝试使用杰克沃顿开发的Hugo库.

我补充说:

compile 'com.jakewharton.hugo:hugo-plugin:1.2.1'

在应用程序级别的build.gradle文件中的依赖项.

然后,当我尝试使用@DebugLog我的方法进行注释时,它显示为红色,就好像IDE无法识别它一样.

我尝试输入一个导入语句,如:

import com.jakewharton.hugo;

jakewhartonimport语句的部分显示为红色,表示它看不到它.

我用谷歌搜索,发现像:

classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'

我不确定compile和classpath之间的区别是什么.

另外,我看到了一个参考:

apply plugin: 'hugo'

应该去哪儿?

你可以看到我完全迷失了.关于如何使这项工作的任何想法都非常适合.

android android-studio

9
推荐指数
2
解决办法
3768
查看次数

优化参数有什么用?

众所周知,arguments在JavaScript 中使用不当可能会导致函数无法优化(请参见此处此处):

function notOptimisable (a, b) {
  // Optimising compiler says: Nope.
  var args = [].slice.call(arguments)
}
Run Code Online (Sandbox Code Playgroud)

但是,到目前为止,没有一个消息来源能够解释为什么这会阻止优化的发生.

这更令人难以置信,因为我所要做的就是

function optimisable (a, b) {
  // Optimising compiler says: I can do this!
  var args = new Array(arguments.length)
    , i = 0

  // Copy the arguments into an actual array, very carefully...
  for(i; i < args.length; ++i)
     args[i] = arguments[i]
}
Run Code Online (Sandbox Code Playgroud)

和voilá - 我有一个副本,arguments它是一个实际的数组,并且可以优化该功能:

node --trace_opt --trace_deopt script.js # Exerpt below …
Run Code Online (Sandbox Code Playgroud)

javascript optimization v8

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

git保持多长时间的分支外提交?

假设我在我的本地存储库中创建一个feature1基于名称的分支,master并添加一个或两个提交.然后我切换回master并决定feature1不会成功并删除分支.

我假设分支基本上是指向特定提交对象的"指针".

现在回答实际问题.

  1. 以上假设是否正确,或许在某种简化意义上?
  2. 提交对象在文件系统上还存在多长时间(以后我可以这样做git checkout SHA1-HERE)?是否存在某种"保留策略",它将删除不属于任何现有分支历史记录或标记的提交(不确定是否在此使用正确的术语......)?
  3. 以上任何一个都将依赖于git服务器的实现(gitosis,github等...)?
  4. 如果对象永远存在并且在一段时间/事件后没有自动清理,是否意味着将git的receive.denyNonFastForwards设置为防止数据丢失的措施是没有意义的?

这个问题的原因:我目前正在开展一个项目,该项目的receive.denyNonFastForwards执行基础是它避免丢失任何承诺的工作(我怀疑receive.denyDeletes也是强制执行的).我想确保没有更好的方法来保存已经完成但没有合并的工作,并且能够清理旧的分支以避免混乱.

git

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

确定去优化的原因

首先,问题是:

如何确定我的功能去优化的原因?

例如,这是我的一个函数的deoptimisation条目:

[deoptimizing (DEOPT eager): begin 0x3ca09e9f4d1 mergeObjects (opt #50) @12, FP to SP delta: 96]
            ;;; jump table entry 8: deoptimization bailout 12.
  translating mergeObjects => node=43, height=64
    0x7fff5fbfecd0: [top + 128] <- 0xcd290004121 ; [sp + 144] 0xcd290004121 <undefined>
    0x7fff5fbfecc8: [top + 120] <- 0x3ca09e9ca19 ; [sp + 136] 0x3ca09e9ca19 <an Object with map 0x4c8d818621>
    0x7fff5fbfecc0: [top + 112] <- 0x2c9b8b1b95a9 ; [sp + 128] 0x2c9b8b1b95a9 <an Object with map 0x7e33a207821>
    0x7fff5fbfecb8: [top + 104] <- 0x2c9b8b1b9229 …
Run Code Online (Sandbox Code Playgroud)

javascript optimization v8 node.js

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

自定义node.js上的建议/最佳实践CLI工具配置文件:位置和命名?

我会尽量保持这个问题的简短,但请分为两部分,请:

  1. 应该在哪里保存nodejs/npm CLI工具的配置文件?
  2. 他们应该叫什么?

假设我编写了一个node.js CLI工具,例如,抓取今天的天气并在终端中显示它.我叫它weather-getter.注意,主要目标不是以编程方式调用,而是像BASH一样输入终端.它旨在通过在全局安装后键入其简单名称通过用户的local/bin中的目录来运行.(安装时不需要Sudo.)

该项目将通过npm正常安装.它可以通过以下参数接收邮政编码:

gavin@localhost:~$ weather-getter -z "12345"
Run Code Online (Sandbox Code Playgroud)

好的程序运行正常.我的下一步是允许用户在某处保存配置文件,并从该配置文件中提取默认值.类似于.vimrc文件.此配置可能如下所示:

{
  "zipcode": "12345",
  "language": "en",
  "unit": "fahrenheit"
}
Run Code Online (Sandbox Code Playgroud)

我想它应该以点开头.我还假设它应该位于npm模块安装中,而不是〜/.或者我应该考虑像许多其他程序一样使用〜// etc /〜/ .config〜/ .local?节点程序是否应该尝试使用公共目录,例如〜/ .config/node /〜/ .config/npm /?如果文件在那里,它应该在没有点的情况下开始吗?

注意:我的问题不是关于使用node.js读取/写入文件,而是关于配置位置和命名约定的建议.谢谢!

command-line-interface node.js npm

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

Date.parse(0)返回2000年的午夜,为什么?

当我尝试Date.parse()一个整数或字符串时0,它返回946681200000,转换为以下日期:

周一01 01 01 00:00:00 GMT + 0100(CET)

为什么?

我假设解析器将单个零解释为2000年,但规格并未说明单字符年份定义 - RFC 2822ISO 8601都要求字符串中包含四个字符的年份.

我想更好地理解如何将字符串'0'解析为Date,为什么它被接受为有效日期(如果它不是NaN或者某些如此?)以及为什么选择2000年而不是例如1900.

更新

经过一些试验和错误后,我发现单个数字在不同的数值范围内实际上有不同的解释.

  • 0 - 12:2000年的一个月
  • 13 - 31: NaN
  • 32 - 49:一年+ 2000,其他所有值都设置为默认值
  • 50 - 99:一年+ 1950,所有其他值设置为默认值
  • 100 - ??:一年,所有其他值都设置为默认值

javascript v8

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

如何从 hyper::client::Request 正确读取字节序列并将其作为 UTF-8 字符串打印到控制台?

我正在探索 Rust 并尝试发出一个简单的 HTTP 请求(使用 hyper crate)并将响应正文打印到控制台。响应实现std::io::Read. 阅读各种文档来源和基本教程,我得到了以下代码,我使用以下代码编译和执行RUST_BACKTRACE=1 cargo run

use hyper::client::Client;
use std::io::Read;

pub fn print_html(url: &str) {
    let client = Client::new();
    let req = client.get(url).send();

    match req {
        Ok(mut res) => {
            println!("{}", res.status);

            let mut body = String::new();

            match res.read_to_string(&mut body) {
                Ok(body) => println!("{:?}", body),
                Err(why) => panic!("String conversion failure: {:?}", why)
            }
        },
        Err(why) => panic!("{:?}", why)
    }
}
Run Code Online (Sandbox Code Playgroud)

预期的:

由 HTTP 服务器传送的正文的一个漂亮的、人类可读的 HTML 内容被打印到控制台。

实际的:

use hyper::client::Client;
use std::io::Read;

pub …
Run Code Online (Sandbox Code Playgroud)

bytebuffer utf-8 rust

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