GVKun编程网logo

Swift 2 有哪些新特性(swift的特性)

2

在本文中,我们将详细介绍Swift2有哪些新特性的各个方面,并为您提供关于swift的特性的相关解答,同时,我们也将为您带来关于AWESOMESWIFT-swift.libhunt.com-swift

在本文中,我们将详细介绍Swift 2 有哪些新特性的各个方面,并为您提供关于swift的特性的相关解答,同时,我们也将为您带来关于AWESOME SWIFT-swift.libhunt.com-swift类库网站、C++17 有哪些新特性?、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Chrome 58 测试版发布,有哪些新特性?的有用知识。

本文目录一览:

Swift 2 有哪些新特性(swift的特性)

Swift 2 有哪些新特性(swift的特性)

总结

以上是小编为你收集整理的Swift 2 有哪些新特性全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

AWESOME SWIFT-swift.libhunt.com-swift类库网站

AWESOME SWIFT-swift.libhunt.com-swift类库网站

https://swift.libhunt.com/categories/688-events

29 Events libraries and projects

  • ORDERED BY POPULARITY
  • ORDER BY DEV ACTIVITY
  •  ReactiveCocoa

      10.0   7.3  Objective-C
    ReactiveCocoa (RAC) is a Cocoa framework inspired by Functional Reactive Programming. It provides APIs for composing and transforming streams of values over time.
  •  RxSwift

      9.9   8.8 L3  Swift
    Microsoft Reactive Extensions (Rx) for Swift and iOS/OSX platform.
  •  PromiseKit

      9.8   8.7 L5  Swift
    async promise programming lib.
  •  ReSwift

      9.6   6.3 L5  Swift
    Unidirectional Data Flow in Swift
  •  Bond

      9.3   8.8 L1  Swift
    a Swift binding framework.
  •  BrightFutures

      8.3   4.7 L4  Swift
    promise and future lib for swift.
  •  Katana

      8.2  8.7 L4  Swift
    Swift apps a la React and Redux.
  •  ReactorKit

      7.8   6.4  Swift
    A framework for reactive and unidirectional application architecture.
  •  ReactKit

      7.4   0.0 L3  Swift
    Swift Reactive Programming.
  •  FutureKit

      6.4  0.7 L2  Swift
    A Swift based Future/Promises Library.
  •  SwiftEventBus

      6.4   3.2 L5  Swift
    A publish/subscribe event bus optimized for iOS.
  •  EmitterKit

      5.7  3.5 L5  Swift
    an implementation of event emitters and listeners in swift.
  •  Signals

      4.9   3.3 L5  Swift
    replaces delegates and notifications.
  •  Safe

      4.9   0.0 L2  Swift
    A modern concurrency and synchronization for Swift.
  •  snail

      4.5   7.1 L5  Swift
    An observables framework for Swift
  •  Reactor

      4.1   2.4 L5  Swift
    Powering your RAC architecture.
  •  VueFlux

      3.8  6.8  Swift
    Unidirectional Data Flow State Management Architecture
  •  SignalKit

      3.7   0.0 L5  Swift
    Swift event and binding framework.
  •  Observable

      3.7   6.2  Swift
    The easiest way to observe values.
  •  When

      3.4   5.4 L5  Swift
    A lightweight implementation of Promises in Swift.
  •  Caravel

      3.3   0.0 L2  Swift
    A Swift event bus for UIWebView and JS.
  •  Future

      2.5   0.0 L4  Swift
    A micro framework providing Future.
  •  NoticeObserveKit

      2.3   0.0 L5  Swift
    NoticeObserveKit is type-safe NotificationCenter wrapper that associates notice type with info type.
  •  Aftermath

      1.8   0.0 L5  Swift
    Stateless message-driven micro-framework in Swift.
  •  Notificationz

      1.6   2.5 L5  Swift
    Helping you own NSNotificationCenter by providing a simple, customizable adapter.
  •  Forbind

      1.2   0.0 L4  Swift
    Functional chaining and Promises in Swift.
  •  ReduxSwift

      1.0   0.0 L5  Swift
    Predictable state container for Swift apps too
  •  PureFutures

      0.7   0.0 L4  Swift
    Futures and Promises library.
  •  SSEventFlow

      0.3  4.4 L5  Swift
    A type safe alternative to NSNotification, inspired by Flux.

C++17 有哪些新特性?

C++17 有哪些新特性?

这个问题的答案是 社区的努力。编辑现有答案以改进这篇文章。它目前不接受新的答案或交互。

C17 现在功能完整,因此不太可能经历大的变化。针对 C17 提出了数百个提案。

在 C17 中,哪些特性被添加到 C 中?

当使用支持“C1z”的 C 编译器时,当编译器更新到 C++17 时,哪些功能将可用?

答案1

小编典典

语言特点:

模板和通用代码

  • 类模板的模板参数推导

    • 就像函数如何推断模板参数一样,现在构造函数可以推断类的模板参数
    • http://wg21.link/p0433r2 http://wg21.link/p0620r0 http://wg21.link/p0512r0
    • template <auto>

    • 表示任何(非类型模板参数)类型的值。

    • 非类型模板参数修复
  • template<template<class...>typename bob> struct foo {}

  • (折叠 + … + 表达式)和修订

  • auto x{8};是一个int

  • using使用...和列表进行现代化

拉姆达

  • constexpr lambda

    • 如果 Lambda 符合条件,则为隐式 constexpr
    • *this在 lambda 中捕获

    • [*this]{ std::cout << could << " be " << useful << ''\n''; }

属性

  • [[fallthrough]], [[nodiscard]],[[maybe_unused]]属性

  • [[attributes]]namespaces 和enum { erator[[s]] }

  • using在属性中,以避免必须重复属性命名空间。

  • 现在要求编译器忽略它们无法识别的非标准属性。

    • C++14 的措辞允许编译器拒绝未知的作用域属性。

语法清理

  • 内联变量

  • 像内联函数

  • 编译器选择实例实例化的位置

  • 弃用 static constexpr redeclaration,现在隐式内联。

  • namespace A::B

  • static_assert(expression);没有字符串的简单

  • 没有throw,除非throw(),并且throw()noexcept(true)

更清洁的多回流和流量控制

  • 结构化绑定

  • 基本上,一流std::tieauto

  • 示例: * const auto [it, inserted] = map.insert( {"foo", bar} ); * 创建变量it并使用从返回inserted的推导出的类型pairmap::insert

  • 适用于 tuple/pair-likes & std::arrays 和相对扁平的结构

  • 实际上在标准中命名了结构化绑定

  • if (init; condition)switch (init; condition)

  • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)

  • 将 扩展if(decl)decl不能明智地转换为布尔的情况。

  • 泛化基于范围的 for 循环

    • 似乎主要支持哨兵,或与开始迭代器类型不同的结束迭代器,这有助于空终止循环等。
    • 如果 constexpr
  • 很多要求的功能来简化几乎通用的代码。

杂项

  • 十六进制浮点文字

  • 过度对齐数据的动态内存分配

  • 保证复制省略

    • 最后!
    • 并非在所有情况下,但将您“只是创建某些东西”的语法与“真正的省略”区分开来。
    • 修复了(某些)表达式的求值顺序并进行了一些修改

    • 不包括函数参数,但现在禁止函数参数评估交错

    • 主要使一堆损坏的代码工作,并.then在未来工作。
    • 枚举的直接列表初始化
  • 前向进度保证 (FPG)(也称为并行算法的FPG )

  • 我认为这是在说“实现可能不会永远停止线程”?

  • u8''U'', u8''T'', u8''F'', u8''8''字符文字(字符串已经存在)

  • 类型系统中的“noexcept”

  • __has_include

    • 测试头文件包含是否会出错
    • 使从实验到标准的迁移几乎无缝
    • 指针转换修复数组
  • 继承的构造函数修复了一些极端情况(有关行为更改的示例,请参见P0136R0 )

  • 聚合初始化与继承。

  • std::launder, 类型双关语等

图书馆补充:

数据类型

  • std::variant<Ts...>

  • 我上次检查几乎总是非空的?

  • 标记联合类型

  • {真棒|有用}

  • std::optional

    • 也许持有某物之一
    • 非常有用
    • std::any

    • 持有任何东西之一(可复制)

    • std::string_view

    • std::string像对字符数组或子字符串的引用

    • 永远不要再拿一个string const&。还可以使解析速度更快。
    • "hello world"sv
    • 常量表达式char_traits
    • std::byte超过他们可以咀嚼的。

    • 既不是整数也不是字符,只是数据

调用东西

  • std::invoke

    • 使用一种语法调用任何可调用对象(函数指针、函数、成员指针)。来自标准的 INVOKE 概念。
    • std::apply

    • 接受一个类函数和一个元组,并将元组解包到调用中。

    • std::make_from_tuple,std::apply应用于对象构造
  • is_invocable, is_invocable_r, invoke_result

  • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0077r2.html

  • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0604r0.html

  • 弃用result_of

  • is_invocable<Foo(Args...), R>是“你能打电话FooArgs...得到兼容的东西吗R”,这R=void是默认的。

  • invoke_result<Foo, Args...>但显然std::result_of_t<Foo(Args...)>不那么令人困惑?

[文件系统 TS v1](http://www.open-

std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r0.html)

  • [class.path]

  • [class.filesystem.error]

  • [class.file_status]

  • [class.directory_entry]

  • [class.directory_iterator][class.recursive_directory_iterator]

  • [fs.ops.funcs]

  • fstreams 可以用paths 打开,也可以用const path::value_type*字符串打开。

新算法

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • 添加用于线程目的,即使您不使用线程也暴露

穿线

  • std::shared_mutex

    • 不定时,如果你不需要它可以更有效。
    • atomic<T>::is_always_lockfree
  • scoped_lock<Mutexes...>

    • std::lock一次锁定多个互斥体时可以节省一些痛苦。
    • 并行 TS v1

    • 2014年的链接文件可能已过时

    • 算法的并行版本std和相关机器
    • hardware_*_interference_size

(部分)[图书馆基础知识 TS v1](http://www.open-

std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html)未在上面或下面介绍

  • [func.searchers][alg.search]

    • 一种搜索算法和技术
    • [pmr]

    • 多态分配器,例如std::function分配器

    • 和一些标准的内存资源一起去。
    • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html
    • std::sample,从一个范围内采样?

容器改进

  • try_emplaceinsert_or_assign

    • 在某些虚假移动/复制不好的情况下提供更好的保证
    • 拼接为map<>, unordered_map<>, set<>, 和unordered_set<>

    • 廉价地在容器之间移动节点。

    • 便宜地合并整个容器。
    • 字符串的非常量.data()
  • 非会员std::size, std::empty,std::data

    • 喜欢std::begin/end
    • 容器中的最小不完整类型支持
  • 连续迭代器“概念”

  • constexpr迭代器

  • emplace函数族现在返回对创建对象的引用。

智能指针变化

  • unique_ptr<T[]>修复和其他unique_ptr调整。
  • weak_from_this和一些固定分享的

其他std数据类型改进:

  • {}建设std::tuple和其他改进
  • TriviallyCopyable reference_wrapper,可以提升性能

杂项

  • C++17 库基于C11 而不是 C99

  • std[0-9]+为未来的标准库保留

  • destroy(_at|_n), uninitialized_move(_n), uninitialized_value_construct(_n), uninitialized_default_construct(_n)

  • 已在大多数std实现中公开的实用程序代码

  • 特殊数学函数

  • 科学家可能会喜欢它们

  • std::clamp()

    • std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )大致
    • gcdlcm
  • std::uncaught_exceptions

    • 如果您只想在对析构函数安全的情况下抛出,则为必需
    • std::as_const
  • std::bool_constant

  • 一大堆_v模板变量

  • std::void_t<T>

    • 在编写模板时非常有用
    • std::owner_less<void>

    • like std::less<void>,但要根据内容对智能指针进行排序

    • std::chrono抛光
  • std::conjunction, std::disjunction,std::negation暴露

  • std::not_fn

  • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html

  • noexcept 内的规则std

  • std::is_contiguous_layout,对于高效散列很有用

  • std::to_chars/std::from_chars,高性能,与语言环境无关的数字转换;最后一种将序列化/反序列化为人类可读格式(JSON & co)的方法

  • std::default_order ,间接超过std::less. (由于名称修改而破坏了某些编译器的 ABI ,已删除。)

  • memory_order_consume, 添加了更喜欢使用的语言memory_order_acquire

性状

  • 交换
  • is_aggregate
  • has_unique_object_representations

已弃用

  • 一些 C 库,
  • <codecvt>
  • result_of, 替换为invoke_result
  • shared_ptr::unique,它不是非常线程安全的

Isocpp.org 有一个自 C++14
以来的独立更改列表;它已被部分掠夺。

自然地,TS 工作并行继续,因此有些 TS 还不够成熟,必须等待下一次迭代。下一次迭代的目标是之前计划的 C20,而不是一些传言暗示的
C
19。已避免使用 C++1O。

最初的列表取自这个 reddit
帖子和这个
reddit
帖子,并通过谷歌搜索或从上面的
isocpp.org 页面添加链接。

从SD-6功能测试列表中掠夺的其他条目。

clang
的功能列表和库功能列表是接下来要被掠夺的。这似乎不可靠,因为它是
C1z,而不是 C17。

这些幻灯片在其他地方缺少一些功能。

虽然没有询问“删除了什么”,但这里列出了一些在 C17 中从 C 中删除的内容((大部分?)以前已弃用):

删除:

  • register, 关键字保留供将来使用
  • bool b; ++b;
  • 三元组
    • 如果您仍然需要它们,它们现在是源文件编码的一部分,而不是语言的一部分
  • ios 别名
  • auto_ptr,旧<functional>东西,random_shuffle
  • 分配器std::function

有改写。我不确定这些是否对代码有任何影响,或者它们是否只是标准中的清理:

尚未整合到上面的论文:

  • P0505R0 (constexpr chrono)

  • P0418R2(原子调整)

  • P0512R0(模板参数推导调整)

  • P0490R0(结构化绑定调整)

  • P0513R0(更改为std::hash

  • P0502R0(并行异常)

  • P0509R1(更新异常处理限制)

  • P0012R1(使异常规范成为类型系统的一部分)

  • P0510R0(变体限制)

  • P0504R0(可选/变体/任何标签)

  • P0497R0(共享 ptr 调整)

  • P0508R0(结构化绑定节点句柄)

  • P0521R0(共享指针使用计数和唯一更改?)

规格变更:

  • 异常规范和抛出表达式

进一步参考:

  • 按年份分组的论文;并非全部接受

  • https://isocpp.org/files/papers/p0636r0.html

    • 应在此处更新为“对现有功能的修改”。

Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望

Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望

Chris Lattner 写了一篇文章:回顾 Swift 3,展望 Switf 4,以下是这篇文章的关键内容:

  • 开源大有益处,但无法让所有人满意。

  • Swift 3 将在 2016 年秋到来。Swift 3.x 会在 2017 年春公布,Swift 4 会在 2017 年秋发布,这其中不包括修复 bug、提升兼容性之类的小更新(例如 3.0.1)。

  • Swift 4 在交付时一定会保障代码的稳定性,增加容错性、ABI,优化泛型与字符串等等。

  • 语法糖的优先级最低,没有提上日程。

  • 安排进度有些困难。开发的目标并非是对交付的保证。从一开始安排计划与进度就是最主要的事。

下面是全文:


大家好呀,

Swift 3 的正式版已经基本完成,是时候让我们回顾一下这个版本了,从开发过程中汲取经验,并用于总结我们(Swift 社区)在这一年内所做的事。总体上来说,Swift 3 毫无疑问将是一个 amazing 的版本,我们完成了很多出色的工作。感谢所有为它付出的人。相比于立刻着手推进新计划,盘点过去、展望未来同样重要。

提示:这封 email 长得吓人,其中涵盖了各方面的话题。比起直接回复,更好的选择是开一个新话题来讨论。只需在主题上标记“[Swift 4]”即可。

Swift 3 回顾

每年 Swift 的新版本都与前一年完全不同,我希望 Swift 4 能继续保留这个传统。为了每一年都有提升与进步,以下是一些对 Swift 3 的回顾与建议:

  • 开源有许多好处。见证一个充满活力的团队合作得如此之好,大家几乎彻夜为其付出,让人不可思议、充满惊喜。与这样一个才华横溢并充满热情的团队合作,实在是太棒了!

  • 开源也带来挑战。比起“闭源设计”,“开源设计” 进度更慢且更加不可预料,我想这么说应该是公允的。然而,开源的结果明显更好,因此权衡之下开源是值得的。“感谢你们”,献给所有帮助 Swift 发展进化的人。

  • 预估 软件开发的进度(特别是开源项目)依然困难到近乎不可能。我们在着手开发 Swift 3 的时候设立了许多高目标,在后期不得不进行修整。设立一些高目标是好事,但我们需要在沟通上更努力,让其他人知道“目标”不等于“承诺”,避免误导他们。

  • 整个社区得益于在有限的主题上保持专注,因为如果有太多事项同时进行,没有人可以持续跟进所有部分。参与到前面所提的关键讨论中,对核心团队而言非常重要。在 Swift 3 的开发周期中,很多人在代码评审结束前都没有时间来跟进讨论,这是一个问题。

  • 确立清晰的目标是一种解脱。特别是在去年十二月到今年一月,我们大致圈出了那些适合放入 Swift 3 的点子,同时开启了几个项目,这些项目最后远超出我们的能力范围。在后来的版本中,我们确立了几个具体目标(比如“不再加入新计划”),使所有人能更轻松地关注重要事项。

  • 皆大欢喜是不可能的,尤其是在我们讨论优先开发哪些功能时,因为这会降低其他一些功能的优先级。这是一个无解的局面,因为我们并没有办法将所有有意思的工作都放在一个只有一年长的开发周期中。幸运的是,将来“总会有下一个版本”,每一个新版本都会加入一些重大的改进。

在上述回顾的基础上,我们来展望未来!

Swift 发布计划

在接下来一年里,核心团队预计会发布两个主要的版本:2017 年春发布 Swift 3.x,2017 年秋发布 Swift 4。除了主要版本之外,我们也会发布一些小的更新(如 Swift 3.0.1)来修复 Bug,或满足核心库的需求,或其他的 swift.org 的项目。

Swift 4 发布计划

从我们在 Swift 3 中获得的经验来看,我们需要挑出一些重点。对 Swift 4 来说,主要目标是从 3.0 开始要保证交付的代码的稳定性,并为标准库提供 ABI 的稳定性。因此,核心团队决定在接下来的一年中实施两个阶段的计划:

第一阶段:专注于提升代码及 ABI 稳定性,全心投入只完成这项必要的工作。这意味着如果一些功能不会从根本上改变现有语言特性的 ABI ,或是对标准库的 ABI 进行了破坏性的改动,那么现阶段都不会考虑开发它们。举个例子,泛型中的条件一致性(Conditional conformances)是一个附加特性,但由于它会对标准库造成众多更改,我们在第一阶段就要实现它。另一方面,正则表达式不会对现有 ABI 造成影响,也不会给标准库带来大量改动,所以第一阶段不会考虑它。

第一阶段的工作非常重要(下面会详细介绍),所以春季之前我们大概一直会很忙。

第二阶段:当第一阶段功能的设计与实现工作较好得完成之后,我们将基于剩余时间,选择一些大型的功能进行开发。我乐观估计将有剩余时间,来从长长的功能列表中选几个来开发,但具体选哪几个,得看最后剩多少时间。

除了新功能之外,我们也需要重新评估那些在 Swift 3 中尚未实现的、对代码造成破坏性变动的提案。这些提案不一定会被通过,我们需要在 Swift 4 的基础上来评估它们,挨个决定如何处理。

最后,虽然与 Swift 的进步没有特别大的关系,但我想提一提质量与性能问题。核心团队想要进一步提升质量,包括修复编译器的 Bug、改进错误与警告检测功能。性能是开发中另一个需要重视的部分,包括提升编译后的代码质量,改善标准库的实现,加快编译速度等。这些工作在任何开发阶段都需要重视。

Swift 4 第一阶段目标

为了专注于代码与 ABI 的稳定性,核心团队对第一阶段的工作有一个初步的讨论。下面是我们对第一阶段功能排序后的结果:

  • 代码稳定性相关功能:这一部分工作量相对较小,但很重要。举个例子,我们需要类似于“-std=swift3”的编译器标志。我们也需要一个新方法来开启一些大型的功能,这些功能尚在开发,并不稳定,有了这个方法,调试会更简单。

  • 适应力(Resilience):这个功能提供了一种方式,在保证 ABI 稳定性同时,公有 API 可以随时间改进。一个例子,我们不想让 C++ 的“fragile base class” 问题发生在 Swift 中。更多设计与实现上的工作已经在 Swift 3 中完成了,但仍有重要工作未完成,包括模型中用户可见的部分(例如新的属性)。

  • ABI 细节:代码生成模型中仍有大量细节需要审核与改进。这一部分与 Swift 开发更相关,与 Swift 的演进关系不大。

  • 泛型改进需要在标准库的基础上进行:我希望条件一致性能在功能清单中处在最高位置,递归协议要求(recursive protocol requirements)与更强大的关联类型约束能处在随后的相近位置。然而,标准库的开发者们需要大量时间来解析出至关重要的部分,最终消除那些“_”协议,并正确展现标准库中的公有 API。

  • 字符串相关改进:字符串是 Swift 中最重要的基本类型之一。标准库的开发者有很多点子,能改进它的编程范式而不影响到提供 unicode-correct-by-default 范式。我们的目标是在字符串处理上比 Perl 做得更好!

  • 内存所有权模型(Memory ownership model):许多系统开发者,以及想要可预测及确定性的性能(如在实时音频处理中)的人们,都非常希望 Swift 中能有一个(可选的)类似于 Cyclone / Rust 的内存所有权模型。从 Swift 4 的目标上来说,这个功能很重要,因为它从根本上改变了 ABI。这一模型会通知编译器“inout”事件的产生,解释底层“addressors”如何在 ABI 中运作,影响 Swift runtime,并对类型系统及命名管理产生显著影响。

我们对上面这些功能都有了一些想法,但它们在正式成为提案之前仍有很长路要走。我期待它们会在 Swift 4 的早期成为主要讨论内容。不仅如此,由于我们还没有全部找出那些影响 ABI 稳定性的部分,可能还有其他需要增加的条件。最后,我们也可能选择其他一些对 SwiftPM 这个包管理器,或其他对 swift.org 有高价值的小功能。

可能的 Swift 4 第二阶段工作

如我之前所提到的,在这个点上不可能知道还有多少时间留给第二阶段,因此也不知道第二阶段能完成哪些工作。核心团队也希望比 Swift 3 更早完成 Swift 4 开发版的合流,以便在版本发布之前有更多时间修复 BUG,仔细斟酌。

也就是说,我乐观估计我们能够挑一些大家都想要的新功能来开发。为了让你对这些功能有个概念,我列了张表。请注意这并不是开发的计划或承诺,而只是列了一些大家都希望有的功能:

  • 反射:核心团队正致力于为 Swift 添加强大的动态机制。举个例子,Swift 3 中大致完成了数据反射的基础结构(已被用在 Xcode 的 memory debugger 中)。我们应在这些基础结构之上,搭建一些强大的面向用户的 API。同样,我们想要设计并实现动态方法反射的 runtime 与 API 支持。

  • 最重要的并发:Actors、异步 / 等待(async / await)、atomicity、内存模型(memory model)以及相关话题。这些是大家都想要的,因为有了它们,就可以在客户端、服务端等之上开发更多新功能。我们计划在第二阶段正式讨论这件事,但非常明确地告诉大家,新的并发模型在 Swift 4 发布时还无法完成。我们需要超过一年的时间来进行设计与开发,我们也希望把这件事做好做对。需要这么多时间,也是因为在开发内存所有权模型之前能更深入的理解它。

  • 泛型改进:泛型的开发计划中包含来许多激动人心的功能,能改进现有泛型系统。在提升标准库的 ABI 稳定性时并不需要这些功能,但它们会使 Swift 的泛型更加强大易懂。

  • .swiftmodule 的稳定性:在某些方面我们需要使“.swiftmodule”的二进制文件格式稳定下来(或用不同的机制替代它),允许开发第三方的二进制框架。这个工作量很大,并需要标准库 ABI 保持稳定。

  • 新的脚本功能:包括正则表达式、多行字符串字面量等。有了这些功能,Swift 在密集型文本处理任务及搭建 web 等方面会更有吸引力。这些功能也有助于完善字符串模型。

  • 属性行为:这一功能承诺为现有属性模型提供强大的抽象能力。在被推迟的 SE-0030 提案中对它有完整描述。

  • 其他功能:子模块、数值类型间的隐式转换、导入 C++ API、hygenic macro system、尾调用约定、枚举类型遍历、带类型的“thorws”、用户定义属性、抽象方法 / 类、更好的 SIMD 支持、非 @objc 的动态支持、支持数据并行、更高等级的类型...

  • 语法糖:我不会把它们全部列出来,但有大量零散的小提案会经常出现,特别是那些其他语言中出现过、用于解决特定问题的。这些在 Swift 4 开发中都属于最低优先级。

好了,这是一封超长的邮件,列出了一些关于明年要做的事的想法与点子。有一点要提醒一下大家,目前 Swift 3 尚未完成。当对代码的破坏性改动(将要)完成时,需要留有一些时间来修复 Bug 并提升代码质量,这对于正式发布版很重要。

我认为如果我们马上花一些时间来讨论明年开发计划的一些基本事项,会很有帮助,然后再从概念上分解一些第一阶段的特性。只有在对它们有深入了解之后,我们才应该开始写一些提案。核心团队不希望被太多提案淹没,以至于无法跟踪它们的进展,或让我们无法专注于那些高优先级的项目中。

谢谢大家。再次提醒一下,如果大家想要更深入讨论某个话题,请重新开一个分支。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

Chrome 58 测试版发布,有哪些新特性?

Chrome 58 测试版发布,有哪些新特性?

除非另外注明,否则下面介绍的更改均适用于最新 Chrome Beta 渠道版(Android、Chrome 操作系统、Linux、Mac 和 Windows)。

IndexedDB 2.0

现在,Chrome 完全支持 IndexedDB 2.0 标准,在此浏览器中,可以更轻松地处理大数据集。IDB 2.0 采用新的架构管理和批量操作方法,故障处理方式也更标准化。

网站数据库的结构对性能的影响很大,而且很难改变。为简化更新操作,现在,在重构后,可以原地重命名对象存储和索引。网站也可以使用更多自然关键字,而无需担心性能受到影响,因为二进制关键字可压缩自定义关键字表示。

使用 getKey() 和 openKeyCursor() 方法,可以简化数据检索,在只需一个数据库关键字时,还可提升性能。使用新的 continuePrimaryKey() 游标方法,可以更轻松地分割跨事务、跨页面加载的大数据访问,而不必担心出现重复的主键。getAll() 和 getAllKeys() 方法无需使用游标,即可批量恢复整个数据集。

改进 iframe 导航

自动重定向页面的第三方内容(例如广告)可能给用户带来困扰,带来安全问题。因此,开发者可以将第三方内容置于沙盒化的 iframes 中,避免出现此状况。但是,在某些情况下,与标准广告类似,点击此类内容需要导航顶级页面。

为解决此问题,Chrome 58 现在支持新的 iframe 沙盒关键字 allow-top-navigation-by-user-activation。此关键字使沙盒化的 iframes 在用户交互操作触发时能够导航顶级页面,同时阻止自动重定向。

PWA 沉浸式全屏体验

当 Progressive Web App (PWA) 从 Android 主屏幕启动时,这些 PWA 会以一种类似于独立应用的模式启动,此模式下会隐藏多功能框。这有助于营造一种富有吸引力的用户体验,并释放屏幕空间,以显示更多内容。但是,对于游戏、视频播放器或其他富媒体内容等更沉浸式的体验,系统栏等其他移动 UI 元素仍然会分散用户注意力。

现在,PWA 可以在其网络应用清单中设置 display: fullscreen,在网站从主屏幕启动时隐藏非应用 UI,提供完全沉浸式的体验。

 PWA 从主屏幕启动(左)、PWA 在独立模式下从主屏幕启动(中)和 PWA 在全屏模式下从主屏幕启动(右)。

此版本中的其他特性

  • 现在,工作线程和共享工作线程可以使用 data: 网址进行创建,通过为其赋予不透明的来源,可更安全地利用工作线程进行开发。

  • 通过 PointerEvents.getCoalescedEvents(),开发者可以访问上次提交 PointerEvent 以来的所有输入事件,使绘图应用可以更轻松地使用精确的点记录绘制更平滑的曲线。

  • 现在,开发者可以使用新的 ControlsList API,自定义 Chrome 的原生媒体控件,例如 download、fullscreen 和 remoteplayback 按钮。

  • 对于 Chrome(Android 版),使用改进的添加到主屏幕工作流安装的网站将可以不受限制地自动播放通过清单范围中包含的来源提供的音频和视频。

  • 对于 Chrome(Android 版),使用 autoplay 属性的视频在退出屏幕时将暂停播放,返回屏幕将继续播放,以保持跨浏览器的连贯性。

  • 现在,网站可以使用 color-gamut Media Query,获取 Chrome 和输出设备支持的颜色的大致范围。

  • 现在,无需手动重置 float 和 clear 等多种布局属性,网站可以使用 display: flow-root 添加一种新的块格式设置上下文。

  • 为缩短 JavaScript 分析时间,SVGPoint、SVGRect 和 SVGMatrix 已转移至 Geometry 外部的新界面中。

  • 使用新的 Selection API 函数 removeRange(),开发者现在可以通过编程移除指定的文本范围。

  • 现在 Chrome(Mac 版)支持 PointerEvent.tangentialPressure 和PointerEvent.twist 属性,可为触控笔设备和绘画应用提供更多信息。

  • 为简化开发者体验,现在 JavaScript 允许在形式参数和实际参数列表中使用终止逗号。

  • WebAudio API 新的播放AudioContextLatencyCategory 使开发者可以轻松地在延迟时间、功耗和 CPU 效率之间做出有意识的权衡。

弃用和互操作性的改善

  • Apple-interchange-newline、Apple-converted-space、Apple-paste-as-quotation、Apple-style-span 和 Apple-tab-span 已被弃用,因为它们是非标准 CSS 类。

  • usemap 属性现在使用区分大小写的匹配方式,而不使用兼容不区分大小写,以更好地符合相关规范。

  • 现在,根据 Chrome 针对一些重要功能的政策,使用 Notifications API 请求通知权限或创建非永久本地通知时,网站必须使用 HTTPS。

  • 为了更好地符合相关规范,现在当 cancelBubble 设置为 true 时被视为 stopPropagation() 的别名,在设置为 false 时则不执行任何操作。

  • VTTRegion 界面函数 addRegion() 和 removeRegion() 已从 WebVTT 规范中移除,因此也将从 Chrome 中移除。

  • 导航至 data: 网址的顶级页面的功能已被弃用,以进一步防止用户受到欺骗和钓鱼式攻击。 

  • HTMLEmbedElement 或 HTMLObjectElement 的实例不再可以作为函数调用,因为旧版调用程序已被移除。

  • 在 IETF 将这些算法标准化为 RFC 7539 和 RFC 7905 以及随后在 Chrome 41 中发布标准版本后,移除了标准化前的 ChaCha20-Poly1305 密码。

  • 为改善互操作性,如果增加的范围与现有范围重叠,Selection.addRange() 现在会忽略前者,而不是将两个范围合并。 

  • 根据 Chrome 针对一些重要功能的政策以及根据相关规范,已弃用通过不安全来源传输加密媒体扩展。

  • AudioBuffer 构造函数现在允许使用 AudioBufferOptions 词典的sampleRate 成员代替 context 参数,以简化界面,同时强调可以在 AudioContexts 之间共享 AudioBuffers。 

  • 现已在服务工作线程中弃用同步 FileReaderSync API,因为服务工作线程规范要求所有类型的同步请求都应在服务工作线程外部发起。

  • 现在 abbr 和 acronym 元素默认添加点式下划线,以符合 HTML 标准。

  • 现已移除 motion-path、motion-offset 和 motion-rotation CSS 属性,分别由以下新版本取代:offset-path、offset-distance 和 offset-rotate。

  • 在访问 selectionDirection、selectionStart 和 selectionEnd 等 Selection API 属性时,Chrome 原本会引发 InvalidStateError DOMException,但现在返回 null。

  • 现在,Selection API 的 setBaseAndExtent() 不会在无提示的情况下限制过大的偏移值,而是引发 IndexSizeError DOMException,以更好地符合相关规范。

  • 现在,Selection API 的 setBaseAndExtent()、extend() 和 collapse() 不会因 DocumentType 节点输入而在无提示的情况下失败,而是引发 InvalidNodeTypeError DOMException,以更好地符合相关规范。

  • 为更好地符合相关规范,getRangeAt() 现在始终返回新的位置规范化的 Range。

  • 现已移除 AudioSourceNode 接口,因为它不再属于 WebAudio 规范。

  • 现已移除 webkitdropzone 属性,因为它未得到广泛采用。

官方发布说明

转载自:谷歌开发者公众号

今天关于Swift 2 有哪些新特性swift的特性的分享就到这里,希望大家有所收获,若想了解更多关于AWESOME SWIFT-swift.libhunt.com-swift类库网站、C++17 有哪些新特性?、Chris Lattner 对 Swift 3 的总结与对 Swift 4 的展望、Chrome 58 测试版发布,有哪些新特性?等相关知识,可以在本站进行查询。

本文标签: