Swift 周报 第四十八期

在这里插入图片描述

在这里插入图片描述

文章目录

    • 前言
    • 新闻和社区
      • 苹果突然不造车了,雷军:非常震惊!分析师:马斯克或是最大赢家
      • 你会爱上的开发者活动
    • 提案
      • 通过的提案
      • 正在审查的提案
    • Swift论坛
    • 推荐博文
    • 话题讨论
    • 关于我们

前言

本期是 Swift 编辑组自主整理周报的第四十八期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。

Swift 周报在 GitHub 开源,欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。

倚高山之巅,方见大河奔涌。读Swift社区,便知书海浩瀚。渺小与博大,总是同伴己身!👊👊👊

周报精选

新闻和社区:苹果突然不造车了,雷军:非常震惊!分析师:马斯克或是最大赢家

提案:自定义 SerialExecutor 的隔离检查

Swift 论坛:讨论在整个应用程序中共享变量

推荐博文:使用 MLX 和 Swift 进行设备端机器学习研究

话题讨论:

如果 2024 年购车,你选择买那种车?

上期话题结果

我认为应该鼓励人们在面对工作中的挑战和不如意时保持乐观和积极的态度。被裁员可能是一个人职业生涯中的一次挑战,但也是一个机会去探索新的职业道路和发展方向。因此,即使面对困难,也应该以积极的心态去应对,寻找新的机会和可能性。

新闻和社区

苹果突然不造车了,雷军:非常震惊!分析师:马斯克或是最大赢家

苹果的造车项目最终还是黄了。

于 2014 年正式启动的“泰坦计划”曾经承载着苹果的美好憧憬:分食全球近两千亿美元的电动车市场。然而,十年过去,苹果却未能让其野心开花结果,项目在高管更迭和试驾事故等波折中反复挣扎,并于 2 月 27 日走向终局。

据彭博社,放弃“泰坦计划”是由苹果首席运营官杰夫·威廉姆斯 (Jeff Williams) 和负责造车项目的副总裁凯文·林奇 (Kevin Lynch) 共同做出的。随着造车项目被叫停,相关项目小组(内部称为“特殊项目小组”或 SPG)的近 2000 名员工也面临着未知的前路。

据悉,SPG 部分人员将在高管约翰·詹南德雷亚 (John Giannandrea) 的领导下专注于生成式AI项目。而其他数百名成员(其中许多是硬件工程师和汽车设计师)要么可以在苹果内部申请另一份工作,要么将被解雇。目前尚不清楚将有多少人会被裁员。

从整个大环境看,苹果大举砍掉造车项目的背后也是电动车市场的转冷。据彭博社预测,2024 年美国电动汽车销量的增长将不超过 9%,而过去三年的复合年增长率高达 65%。苹果的这一决策公开后,特斯拉 CEO 马斯克在X上进行了回应。在竞争激烈的市场环境中,特斯拉作为行业领头羊,或许会是苹果此次抉择的最大受益者。

“泰坦计划”折戟之后,苹果能否如愿在生成式AI的天地中重塑其辉煌,外界只能拭目以待。

对此,正在造车的小米创始人雷军在微博发文称:看到这个新闻,非常震惊!小米战略是“人车家全生态”,我们深知造车难度,3 年前依然做了无比坚定的战略选择,认认真真为米粉造一辆好车!”

理想汽车 CEO 李想 2 月 28 日在微博发文称,苹果放弃造车,选择聚焦人工智能是绝对正确的战略选择,时间点也合适。李想表示,战略层面,新业务能聚焦一个,就决不做两个。另外,选择那个最大的,以及距离自己核心优势最近的,知难而上大概率不是好战略。

特斯拉首席执行官埃隆·马斯克则在社交媒体网站X上发了一个敬礼的表情符号和一支香烟。有中国网友戏称,马斯克的“香烟”表情是在给苹果汽车“上香”。

你会爱上的开发者活动

2024 年 2 月 14 日

Apple 开发者活动正在火热进行中,让我们来看看具体都有哪些活动:

参加 App Store 专家主持的在线讲座:了解如何如何最大程度地减少用户流失并赢回订阅者。
共庆国际妇女节:参加在班加罗尔、库比蒂诺、上海、新加坡、悉尼和东京举办的特别线下活动。
参加世界各地的 Apple Vision Pro 开发者实验室 (库比蒂诺、伦敦、柏林、新加坡、悉尼和东京皆有举办):测试和完善你的 App,让它们在无边的空间画布中提供出色的体验。
与 Apple 团队成员会面,探讨为遵守《数字市场法》而对在欧盟分发的 App 产生影响的 iOS、Safari 浏览器以及 App Store 的变更。
全年我们都将以线上和线下的形式,举办各种涵盖多种语言的活动。

提案

通过的提案

SE-0422 表达式宏作为调用方默认参数 提案通过审查。该提案已在 四十七期周报 正在审查的提案模块做了详细介绍。

SE-0421 推广 AsyncSequence 和 AsyncIteratorProtocol 的效果多态性 提案通过审查。该提案已在 四十七期周报 正在审查的提案模块做了详细介绍。

SE-0420 继承 actor 隔离性 提案通过审查。该提案已在 四十七期周报 正在审查的提案模块做了详细介绍。

SE-0419 Swift Backtrace API 提案通过审查。该提案已在 四十七期周报 正在审查的提案模块做了详细介绍。

正在审查的提案

SE-0423 非严格并发上下文中的动态 actor 隔离执行 提案正在审查。

许多 Swift 程序需要与用 C/C++/Objective-C 编写的框架进行交互,这些框架的实现无法参与静态数据竞争安全性。同样,许多 Swift 程序依赖项尚未采用严格的并发性检查。@preconcurrency import 语句会降级与并发相关的错误消息,因为程序员无法解决的根本问题在其中一个依赖项中。为了在与预并发依赖项一起工作时加强 Swift 的数据竞争安全性保证,该提案在运行时为同步隔离函数添加了 actor 隔离检查。

SE-0424 自定义 SerialExecutor 的隔离检查 提案正在审查。

SE-0392(自定义 Actor 执行器)增加了对自定义 actor 执行器的支持,但其支持还不完整。像 Actor.assumeIsolated 这样的安全检查在通过任务在 actor 上运行代码时能够正常工作,但当代码被安排在 actor 的执行器上通过其他机制运行时则无法正常工作。

例如,如果一个 actor 使用串行 DispatchQueue 作为其执行器,那么使用 DispatchQueue.async 直接将函数调度到队列时,无法使用 assumeIsolated 来断言 actor 当前是否被隔离。该提案通过允许自定义 actor 执行器为这些安全检查提供自己的逻辑来解决此问题。

Swift论坛

  1. 提议解决 DistributedActor 协议(针对服务器/客户端应用程序)

内容大概

讨论了解决 Swift 中服务器/客户端应用程序的 DistributedActor 协议的提案。 该提案旨在促进分布式系统之间的通信,同时仍然有效地利用参与者。 发帖人赞赏所提出的优雅解决方案,特别强调了宏的使用。 他们提出了有关在客户端实现分布式系统的简化版本、跨不同语言创建共享 API 的潜力的问题,并询问有关类似概念的现有框架或研究论文。

这篇文章还提到了分布式 Actor 的多功能性,并引用了 Akka 和 Orleans 的例子,表明它们适合实时和耦合系统。 此外,它还提到了 2023 年 Google 研究人员发表的一篇论文,该论文倡导受参与者模型启发的分布式系统,强调了位置透明的好处。

根据这个建议,可以编写以下内容:

// API module
import Distributed

@DistributedProtocol
public protocol Greeter: DistributedActor
    where ActorSystem: DistributedActorSystem<any Codable> {

  distributed func greet(name: String) -> String
}
// Client module
import API // declared Greeter
import Distributed

let someActorSystem = // <the actor system you're using>
let remote = try $Greeter.resolve(id: id, using: someActorSystem)

let reply = try await remote.greet(name: "Caplin")
print(reply) // Dzień dobry, Caplin!
// oh, we didn't know the remote implementation is PolishGreeter!

这允许开发人员发布具有协议描述的 API 包,并对客户端应用程序完全隐藏服务器实现类型。

  1. 提议按位复制标记协议

内容大概

该提案建议在 Swift 中引入一种名为 BitwiseCopyable 的新标记协议,以识别可以有效复制、移动和销毁的类型。 该协议将允许通过启用直接内存操作(例如 memcpy)来优化低级代码。 通过将泛型函数限制为 BitwiseCopyable 类型,开发人员可以减少开销并提高性能,特别是对于涉及批量内存复制的操作。

该提案概述了标准库中的基本类型和开发人员定义的类型如何符合 BitwiseCopyable,并由编译器推断某些情况下的一致性。 但是,对于其他模块中定义的类型或可能并不总是满足 BitwiseCopyable 要求的类型,需要显式一致性。 此外,讨论还深入探讨了泛型类型的 BitwiseCopyable 一致性的可确定性以及库演化的注意事项。

完整的提案可以在这里找到:BitwiseCopyable

  1. 提议不可复制值的分段消耗

内容大概

该提案建议放宽对某些不可复制类型的限制,以允许它们在特定场景中分段使用,旨在促进 Swift 代码中对不可复制值的更自然的操作。 目前,处理聚合中的不可复制字段面临着挑战,例如在不可复制的 Pair 类型中交换值等函数的编写困难。 所提出的解决方案建议允许在逐个字段的基础上使用非弹性、不可复制的聚合而不使用反初始化器,从而实现诸如在 Pair 内交换值之类的操作。 然而,该提案有意保留了限制:它不支持带有反初始化器的聚合的部分消耗或已消耗字段的重新初始化,并且弹性聚合永远不能被部分消耗。 讨论还包括对源代码破坏性更改的考虑以及了解部分消耗的类型布局的必要性。

完整的提案可以在这里找到:https://github.com/apple/swift-evolution/pull/2317

  1. 讨论如何识别/关联 swiftinterface 声明与原始声明?

内容大概

讨论围绕识别 .swiftinterface 文件中的声明并将其与其原始声明关联起来,主要是为了提取有关 Swift 库中 @_spi 属性的信息。 但是,将 .swiftinterface 文件中的完整签名映射到 lib/SymbolGraphGen 发出的部分签名存在不确定性,因为它缺乏 @_spi 意识。 提出了各种建议,包括扩展 SymbolGen 以发出相关信息或使用索引存储来弥合 USR 和解析的源位置之间的差距。 对话还涉及为 Swift 包生成文档以及与工具链兼容性相关的挑战。

此外,还考虑使用夜间工具链编译包,同时使用不同版本的工具链发出符号图 JSON。 总的来说,讨论探讨了潜在的解决方法和解决方案,以解决将 Swift 接口声明与其原始对应项关联的问题。

  1. 讨论在整个应用程序中共享变量?

内容大概

这篇文章讨论了 Swift 应用程序中全局变量的使用,特别是在多个视图之间共享数据。 用户创建一个 Global.swift 文件,在其中使用 @State 属性包装器声明一些变量。然后他们询问是否正确使用这些全局变量。

然而,出于安全考虑,另一位用户建议不要将用户凭据等敏感信息存储在全局变量中,并建议使用用户的钥匙串。 此外,他们警告不要共享可变状态,并建议研究 @EnvironmentObject 和 @Environment 以在 SwiftUI 中的视图之间共享通用逻辑。

  1. 宣布类型安全的日历计算

内容大概

该公告推出了 Time 1.0.0,这是一个专为 Swift 中类型安全日历计算而设计的包。 它庆祝其前身 Time 0.9.0 一周年,并强调其已升级至 1.0.0 版本。 Time 提供了广泛的日期和时间操作功能,强调安全性和便利性。 主要功能包括获取设备时间、舍入时间值、按特定间隔提前时间、检索日历信息以及格式化时间数据。

Time 通过 Swift 的类型系统确保正确性,并为无效操作提供错误处理。 它可在 GitHub 上获取,并具有有关 Swift 包索引的全面文档。 此外,Time 还提供高级功能,例如创建自定义时钟、监听时间变化、时区和区域设置之间的转换、计算日历值之间的差异等等。 总体而言,Time 简化了日期和时间操作,同时确保准确性和安全性。

  1. 讨论迁移 ThreadSafe 类以使用最新的并发

内容大概

讨论了寻求迁移线程安全类的指导,该类利用异步写入和同步读取的同步技术,以使用现代并发技术,例如 Swift Actors。 他们提供了 A 类的代码示例,该类通过共享队列将任务发送到另一个类(缓存)来同步读取和异步写入。 他们询问在迁移到 Actor 或现代并发时如何在类之间执行类似的同步。 A 类(ThreadSafeClassA)包含读取和写入消息的方法,而 B 类(ThreadSafeClassB)则异步处理消息检索。 用户有兴趣在迁移过程中维持这种同步模式。

推荐博文

使用 MLX 和 Swift 进行设备端机器学习研究

摘要: 文章介绍了使用MLX和Swift进行设备上机器学习研究的新方法。 Swift 编程语言具有与 Python 类似的易用性和高级语法,同时又具有类似 C++ 的编译语言的速度。 MLX 是专为在苹果芯片上进行机器学习研究而设计的数组框架,提供了硬件加速和自动微分等关键功能。

MLX Swift 将 MLX 扩展到 Swift 语言,为机器学习研究人员提供了一个全面的实验平台。该平台包括全面的 Swift API、高级神经网络和优化器包,以及文本生成和MNIST训练等示例。这一步骤标志着ML研究人员可以更轻松地在苹果设备上进行机器学习实验,并且所有组件都以MIT许可证开放源代码。通过本文,读者可以了解到如何快速开始使用 MLX Swift ,并利用其在机器学习研究中的潜力。

Swift 字面量

摘要: 这篇博客主要讨论了 Swift 中的字面量(Literal)的概念及其在编写代码时的重要性。文章以 Franz Boas 在 1911 年的观察为引子,指出不同语言对于相同概念的命名方式可能存在差异,从而呈现出语言相对性的现象。Swift 提供了多种类型的字面量,包括标准字面量和自定义类型支持的字面量初始化方法。通过示例展示了如何自定义类型支持字面量初始化,以及如何扩展已有类型以支持不同类型的字面量初始化。

文章还介绍了未来可能出现的一些发展趋势,如原始字符串字面量和通过强制执行的字面初始化,以及它们对 Swift 语言和开发者的影响。最后,强调了编程语言中的词汇选择对开发者的思维方式和代码编写方式的影响,鼓励开发者利用 Swift 提供的特性使代码更加自然和高效。

在 Swift 中创建服务层

摘要: 本文介绍了在Swift中创建服务层的方法。服务层允许将与框架和 API 相关的逻辑转移到它们自己的类或结构体中,通过创建协议并实现方法和属性,可以使代码更具可重用性、可测试性和可读性。

示例项目使用了 UIKit、MVVM 设计模式和 Combine 框架的一部分。文章通过代码示例详细说明了如何创建服务层、编写单元测试以及实现模拟服务等内容。通过添加服务层,可以使代码库保持模块化,并从可重用性、单元测试覆盖率、可读性和可替换性中受益。

话题讨论

如果 2024 年购车,你选择买那种车?

  • 油车
  • 混动
  • 电车

欢迎在文末留言参与讨论。

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/496065.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】16.事务管理(重点) -- 2

1. 事务隔离级别 如何理解隔离性1 MySQL服务可能会同时被多个客户端进程(线程)访问&#xff0c;访问的方式以事务方式进行一个事务可能由多条SQL构成&#xff0c;也就意味着&#xff0c;任何一个事务&#xff0c;都有执行前&#xff0c;执行中&#xff0c;执行后的阶段。而所…

基于Echarts的超市销售可视化分析系统(数据+程序+论文)

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示&#xff0c;帮助决策层更好地了解销售情况和趋势&#xff0c;进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…

基于随机森林与LSTM神经网络的住宅用电比较分析及预测 代码+论文 完整毕设

摘要 本文旨在探讨基于随机森林&#xff08;Random Forest&#xff09;与长短期记忆神经网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的住宅用电比较分析及预测方法。随机森林是一种集成学习方法&#xff0c;通过构建多个决策树进行预测&#xff0c;具有较强的鲁…

FL Studio21.2.3.4004音乐制作及里程碑及功能介绍

**FL Studio 21.2.3.4004&#xff1a;音乐制作的新里程碑** 随着数字音乐制作技术的不断发展&#xff0c;音乐制作软件也在不断迭代升级。今天&#xff0c;我们将聚焦于一款广受欢迎的音乐制作软件——FL Studio 21.2.3.4004&#xff0c;探讨它如何成为音乐制作领域的新里程碑…

【技巧】如何设置和解除PDF的“打开密码”?

在工作中&#xff0c;我们经常会接触到PDF文件&#xff0c;对于重要的文件&#xff0c;往往还会设置密码保护&#xff0c;那PDF的“打开密码”如何设置和解除呢&#xff1f;下面小编分享两种方法&#xff0c;一起来看看吧&#xff01; 方法一&#xff1a;使用PDF编辑器 大部分…

基于连续深度编解码器网络的医学图像鲁棒边界分割

基于连续深度编解码器网络的医学图像鲁棒边界分割 摘要引言相关工作方法-----III. PROPOSED METHOD Robust_Boundary_Segmentation_in_Medical_Images_Using_a_Consecutive_Deep_Encoder-Decoder_Network 摘要 图像分割通常用于定位目标和边界。它在许多临床应用中是必不可少的…

一步一步搭建,功能最全的权限管理系统之动态路由菜单

一、前言 这是一篇搭建权限管理系统的系列文章。 随着网络的发展&#xff0c;信息安全对应任何企业来说都越发的重要&#xff0c;而本系列文章将和大家一起一步一步搭建一个全新的权限管理系统。 说明&#xff1a;由于搭建一个全新的项目过于繁琐&#xff0c;所有作者将挑选核心…

1320亿参数,性能超LLaMA2、Grok-1!开源大模型DBRX

3月28日&#xff0c;著名数据和AI平台Databricks在官网正式开源大模型——DBRX。 DBRX是一个专家混合模型&#xff08;MoE&#xff09;有1320亿参数&#xff0c;能生成文本/代码、数学推理等&#xff0c;有基础和微调两种模型。 根据DBRX在MMLU、HumanEval和 GSM8K公布的测试…

蓝牙双模音频模块支持串口AT指令控制介绍

目录 一、BT401蓝牙音频模块简介 蓝牙音频模块支持串口AT指令控制介绍&#xff0c;这里推荐BT401蓝牙模块&#xff0c;功能简介如下&#xff1a; BT401模块是一款支持蓝牙、U盘、TF卡播放的5合1的解决方案。模组的亮点在支持无损音乐的播放&#xff0c;以及简单明了的串口控制…

婴儿专用洗衣机哪个牌子好?四大爆款婴儿洗衣机合集安利

婴儿的衣物需要特别的护理&#xff0c;因为婴儿的皮肤非常娇嫩&#xff0c;需要一个无菌&#xff0c;没有刺激性的洗涤环境&#xff0c;于是婴儿洗衣机应运而生。如果你非常注重婴儿衣物的卫生问题&#xff0c;那么婴儿洗衣机则是非常理想的选择。毕竟&#xff0c;在婴儿吃奶或…

文件上传失败原因分析与解决

图片文件上传失败 问题描述&#xff1a;在前端开发时&#xff0c;需要通过表单元素上传图片或其他文本&#xff0c;但是上传不成功&#xff0c;后端接口也没问题 html <!--onChange用来绑定数据 handleUpload用来提交数据--><form onSubmit{handleUpload}><…

Cadence HDL导出BOM并将网页数据导入Excle

【仅供个人学习记录&#xff0c;勿作他用。转载注明出处】 1. 如何导出BOM&#xff1f; 【说明】将后缀改为网页“html”&#xff0c;并勾选下面的网页。 之后就会跳出浏览器中你的BOM表就会显示。 2. 将网页BOM导入Excle&#xff1f; 不想要这个 想要这个&#xff01;&…

vscode配置c/c++调试环境

本文记录win平台使用vscode远程连接ubuntu server服务器下&#xff0c;如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器&#xff0c;第一步安装编译构建套件&#xff08;gcc、g、make、链接器等&#xff09;和调试器&#xf…

眼底 Fundus、OCT 图竞赛分析

眼底 Fundus、OCT 图竞赛分析 眼底 Fundus 图竞赛&#xff08;8分类&#xff09;算法设计ResNet简介双路ResNet2d网络的工作原理应用数据预处理训练和验证 代码分析 眼底 OCT 图&#xff08;8分类&#xff09;代码分析眼底图分类最新研究 MuReD 视网膜疾病 &#xff08;20分类&…

必须进行App测试吗?专业第三方软件测试机构分享移动App测试好处

在这个移动互联网时代&#xff0c;移动应用程序App已经成为人们生活中必不可少的一部分。然而&#xff0c;随着市场上App数量不断增加&#xff0c;质量的好坏成为用户选择的重要标准。因此&#xff0c;在发布之前&#xff0c;一个必不可少的步骤就是对移动App进行软件测试。 移…

FlashDB移植到STM32F103内部flash,FatFs、FlashDB 、EasyFlash的不同

文章目录 一、前言二、FatFs、FlashDB 、EasyFlash 区别2.1 FlashDB2.2 EasyFlash2.3 FATFS 三、FatFs、FlashDB、EasyFlash 区使用环境3.1 FlashDB:3.2 FATFS:3.3 EasyFlash: 四、FlashDB移植4.1 项目 GITEE 地址4.2 项目目录4.3 移植的目录树4.4 MDK keil 添加文件4.5 添加头…

Python---Numpy学习

首先&#xff0c;先来认识一下Numpy数组对象&#xff0c;以及如何创建它 import numpy as np# 1.认识数组对象 # 指定取值范围和跨度创建数组对象 # 创建一个3行4列的数组 data np.arange(12).reshape(3, 4)print(data)print(type(data))# 维度 print(data.shape)# 维度的个数…

架构师之路--docker命令实践整理

安装docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine sudo yum install -y yum-utils sudo yum-config-manager --add-repo http://mirrors.aliyun.com/…

谭浩强第五版C语言课后习题(编程题)+答案

谭浩强第五版作为初学C语言必读的一本教材&#xff0c;课后习题具有非常大的参考价值&#xff0c;也是很多高校期末考试或者考研的重要参考。在这里我整理了一部分个人认为比较重要的编程题&#xff0c;供大家作参考 1.输入两个数&#xff0c;求他们的最大公约数和最小公倍数&…

Vector授权狗驱动安装方法

安装好主体软件后&#xff0c;建议先安装最新官方正版驱动&#xff1a;Vector Driver Setup。然后再复制补丁到C盘指定位置&#xff0c;替换原文件。如果你之前已安装老版本的驱动&#xff0c;则建议先卸载老版本的驱动&#xff0c;主体软件不需要卸载。卸载建议用原来安装时用…