新的稳定版本的Node.js(0.12)最近已经升级了Google的v8 JavaScript引擎v3.28.73.
--harmony
标志?我检查了几个声称要列出ES 6功能的网站但是所有这些功能看起来都已过时 - 最突出的是,这个表(更新: 现在更新时的当前Node.js状态为0.12),因为有几个功能列为--harmony
当我发现其中一些是默认启用时需要标志(地图,集合,符号,仅举几例).更新:节点特定表已经可用
此外,尝试谷歌这个信息纯粹为v8引擎提供了太新的信息 - 当前的v8版本是4.2.*,这远远超过了Node.js使用的.
我希望这个问题(及其答案)将成为Node.js开发人员现在可以使用的ES 6功能的全面总结.
我正在阅读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已经删除了此限制.
我的问题是,在初始化器中允许重复的属性名称有什么实际好处?我可以看到,当动态分配对象属性时,有时会发生这种情况,但由于优先顺序显然决定了在新创建的对象上实际设置了哪些属性 - 这似乎不仅仅是最好避免的无限行为.
我有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) 考虑一下这块蛋糕......呃,代码:
'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的构造函数中的函数完成......
Promise
对象垃圾收藏?doMoreWork()
垃圾收藏?我的猜测是doMoreWork()
不能直接进行GC编辑,因为Promise保留了对它的引用,但是一旦promise的主体完成并将执行上下文返回到上部(?)范围,堆栈就会展开(因为这里没有更多的语句)被执行)并且Promise变得无法访问,因此是垃圾收集的.
你能否证实我对这个主题的理解是正确的?
我怎么能凭经验观察这种行为?换句话说,我如何监控哪些对象正在进行GC编辑?何时?我纯粹在Node.js中开发,如果这有任何区别.
我见过的每个包管理器最具挑战性的任务之一是处理冲突的依赖项.
让我们使用以下虚构的应用程序SwiftApp,它取决于一些第三方软件包.
- SwiftApp
- packageA@latest
- packageC@1.0.0
- packageD@latest
- packageB@latest
- packageC@2.0.0
- packageE@latest
从上面的依赖图中,我们可以看到SwiftApp的两个依赖项都使用packageC,但使用不同的主要版本标识符.对于大多数语言生态系统而言,这成为一个问题 - 主要的版本冲击通常意味着对代码进行了更改,这些更改与以前的主要版本不向后兼容.
根据语言/编译器/其他相关组件的技术功能,可以通过以下方式之一实现包管理器:
第三种选择只能通过语言或编译器本身的适当支持来实现.
换句话说,packageA在技术上是否可以拥有(和使用)packageC 1.0.0版,而packageB将拥有2.0.0版本?
鉴于最近宣布Swift现在是开源的并且自带一个软件包管理器,我认为这个问题对于对Swift软件包开发感兴趣的未来读者可能非常有价值.
我正在尝试使用杰克沃顿开发的Hugo库.
我补充说:
compile 'com.jakewharton.hugo:hugo-plugin:1.2.1'
在应用程序级别的build.gradle文件中的依赖项.
然后,当我尝试使用@DebugLog
我的方法进行注释时,它显示为红色,就好像IDE无法识别它一样.
我尝试输入一个导入语句,如:
import com.jakewharton.hugo;
但jakewharton
import语句的部分显示为红色,表示它看不到它.
我用谷歌搜索,发现像:
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
我不确定compile和classpath之间的区别是什么.
另外,我看到了一个参考:
apply plugin: 'hugo'
应该去哪儿?
你可以看到我完全迷失了.关于如何使这项工作的任何想法都非常适合.
众所周知,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) 假设我在我的本地存储库中创建一个feature1
基于名称的分支,master
并添加一个或两个提交.然后我切换回master
并决定feature1
不会成功并删除分支.
我假设分支基本上是指向特定提交对象的"指针".
现在回答实际问题.
git checkout SHA1-HERE
)?是否存在某种"保留策略",它将删除不属于任何现有分支历史记录或标记的提交(不确定是否在此使用正确的术语......)?这个问题的原因:我目前正在开展一个项目,该项目的receive.denyNonFastForwards
执行基础是它避免丢失任何承诺的工作(我怀疑receive.denyDeletes
也是强制执行的).我想确保没有更好的方法来保存已经完成但没有合并的工作,并且能够清理旧的分支以避免混乱.
首先,问题是:
例如,这是我的一个函数的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) 我会尽量保持这个问题的简短,但请分为两部分,请:
假设我编写了一个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读取/写入文件,而是关于配置位置和命名约定的建议.谢谢!
当我尝试Date.parse()
一个整数或字符串时0
,它返回946681200000,转换为以下日期:
周一01 01 01 00:00:00 GMT + 0100(CET)
我假设解析器将单个零解释为2000年,但规格并未说明单字符年份定义 - RFC 2822和ISO 8601都要求字符串中包含四个字符的年份.
我想更好地理解如何将字符串'0'解析为Date,为什么它被接受为有效日期(如果它不是NaN
或者某些如此?)以及为什么选择2000年而不是例如1900.
更新
经过一些试验和错误后,我发现单个数字在不同的数值范围内实际上有不同的解释.
NaN
我正在探索 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) javascript ×6
v8 ×5
node.js ×4
ecmascript-6 ×2
optimization ×2
android ×1
bytebuffer ×1
git ×1
ldap ×1
npm ×1
php ×1
rust ×1
standards ×1
swift ×1
utf-8 ×1