LWN:学习Rust内核开发的可用资源!

行政数据分析大屏实战:用Tableau从Excel到看板的完整搭建流程(含数据连接与字段计算避坑) 本文详细介绍了如何利用Tableau从Excel数据源搭建行政数据分析大屏的完整流程,涵盖数据准备、连接技巧、计算字段优化、看板设计及动态交互部署。通过五阶工作流,帮助用户高效处理多源异构数据,实现业务洞察与可视化呈现,提升行政数据分析效率。 阅读详情

关注了就能看到更多这么棒的文章哦~

Resources for learning Rust for kernel development

By Daroc Alden
September 23, 2024
Kangrejos 2024
Gemini-1.5-flash translation
https://lwn.net/Articles/990619/

Dirk Behme 在 Kangrejos 2024 上紧随 他关于错误处理的会议 之后主持了第二个会议,主题是讨论如何为内核 Rust 抽象的用户提供更好的指导。紧随其后,Carlos Bilbao 和 Miguel Ojeda 有他们自己的时间段,专门用于收集对想要快速了解内核 Rust 开发的人有用的资源。与会者在两场会议中都提供了很多指导,并讨论了他们可以做些什么来让来自非 Rust 背景的人更容易上手。

他从指出“你们大多数人都是专家”开始演讲 — 与会者大多已经熟悉 Rust。他们编写了驱动程序,发现缺少抽象,并编写了抽象。所以几乎会议室里的每个人都是专家,他们知道 Rust 在 Linux 内核中是如何工作的。然而,Behme 不是计算机科学出身,他的背景是电子工程。

他展示了 /Linux 设备驱动程序/, 第三版 的图片,问道:是否也需要一本关于 Rust 内核抽象的书?人们都说 Rust 的学习曲线很陡峭 — 而且 Rust-for-Linux 更加陡峭,因为它涉及以特定风格编写底层代码,并且内核始终处于高强度开发中。

为了说明他的观点,Behme 展示了一些初学者关于编写内核 Rust 的问题的示例。一个人在编写模块时遇到了麻烦。Alice Ryhl 回复了他们,说他们正在使用的抽象改变了它的 API,并解释了如何调整他们的模块。这不是一个少见的问题 — 他说,其他人也报告说需要时间去适应。Behme 自己也花了一些时间来弄清楚设备树的抽象 — 大约花了一周。他说这不是抱怨,只是举例说明学习必要的先决条件可能很困难,以及项目可以拥有更好的学习材料。

Andreas Hindborg 说,当一个抽象进入内核树时,要求是必须有一个该抽象的使用者 — 所以代码树中应该有一个示例。他说,实际上,进入树中的抽象往往在文档中也包含很好的示例。因此,该项目无疑希望 Behme 要求的这类学习材料存在。

Miguel Ojeda 指出,可能会有关于 Linux 设备驱动程序的书籍,但 Rust 在内核中仍然处于起步阶段。他说,这些书籍的编写需要时间。“我们当时在考虑写一本书,”他继续说道,但现在工作量太大。

Behme 回复说,他确实认为该项目在文档方面做得很好,但还不够。在他工作的地方,他询问过他们是否可以很快开始使用 Rust-for-Linux;他的经理说不行,不是因为技术原因,而是因为社会性的原因 — 从 C 转到 Rust 的学习曲线对于他公司的大多数工程师来说太陡峭了。

一位听众询问,这种陡峭的学习曲线是由于语言本身造成的,还是由于 Rust-for-Linux 项目造成的。Behme 说,主要问题是 Rust,但该项目在其基础上又额外增加了复杂性。他举了查看一些 Rust 代码并发现它调用了 spin_lock() 的例子,但是“为什么没有 unlock”?(答案: spin_lock() Rust 抽象返回一个保护对象,当该对象被丢弃时会自动释放锁 — 无论是程序员显式地丢弃,还是在函数结束时隐式地丢弃。)这些问题有示例,但底层的机制与 C 不同,这需要时间去学习。

Paul McKenney 指出,现代内核 C 代码实际上现在也有 类似的锁保护,也许这会让 Rust 使用锁保护对象不那么反直觉。Ryhl 很好奇,是否对不同语言之间常用的约定进行翻译会很有帮助。

Hindborg 同意学习一门语言需要时间,而且就命令式语言而言,Rust 确实很难学习。但是“你需要投入时间学习,它不是可以自然而然掌握的”。一旦你投入了时间,就会有很大的收益。他建议 Behme 告诉他的经理这一点,并指出 Google 声称使用 Rust 可以提高 3 倍的生产力。他还说,虽然 Rust-for-Linux 在普通 Rust 的基础上增加了一些额外的细节,但这对于内核来说并不是什么新鲜事 — 内核中的 C 与用户空间中的 C 相差很大。

Ryhl 询问,根据其他与会者的经验,教其他开发人员编写 Rust 需要什么。她指出,实际上,在 RustConf 上将有一个关于这个主题的演讲。另一位与会者指出,Rust-for-Linux 的补丁就像任何内核补丁一样,通过邮件列表进行处理 — 所以解释或说明更改的文档通常就在那里。Behme 询问是否可以为每个内核获得类似于发行说明的东西,谈论一下发生了什么变化。

Hindborg 回复说,所有更改都在 Git 中。Ojeda 建议,当 Behme 看到 API 的更改时,他应该去查看相应的提交。

Greg Kroah-Hartman 指出,内核的 C 开发人员没有提供内核内部更改信息 — 那么为什么 Rust 开发人员应该这样做呢?相关地,他建议不要使用 Linux 设备驱动程序,因为它现在已经严重过时了。Ojeda 同意,并指出 Behme 强调的所有更改都是针对内部 Rust API 的 — 就像其他内核接口一样,它们随时可能发生变化,这一点没有保证。

Richard Weinberger 认为 Behme 的观点很好 — 他指出,大多数编写设备驱动程序的人是电子工程师,而不是计算机科学家。从这个角度来看,Rust 看起来“离奇且充满敌意”。他说,如果你了解 OCaml 和 Haskell,Rust 看起来很棒。Rust-for-Linux 开发人员应该注意不要假设只了解 C 的内核黑客有相同的积极印象。

Hindborg 回复说,他理解 Weinberger 的观点,但他自己也是一名电子工程师,他先学习了 C,然后学习了 Rust。他说,这不是不可能的,你可以期望人们学习新工具。

“是的,但是你需要给他们学习的动力,”Weinberger 回复道。Benno Lossin 说,作为一名 Rust 文档编写者,他经常不知道初学者会理解什么。如果你从 Rust 的角度来看,代码中没有对应的 unlock() 的原因很清楚。他说,我们需要听取来自内核方面的人们的意见,他们遇到了问题,以便改进我们的文档。他要求 Behme 写下他遇到的问题,以便他们可以将其转化为一些文档。Behme 同意了。

Lossin 也同意,对 Rust API 的更改令人沮丧,但它们可以随着时间的推移变得更好 — 已经有一个预先的计划,将 kernel crate 的一些功能拆分为更小的 crate,因此这些 crate 的更改频率应该更低。他说,现在有这么多人在开发 kernel crate,以至于任何人都很难知晓所有更改。

Gary Guo 认为,Rust 实际上对于编写设备驱动程序的开发人员来说会大放异彩。他说,期望每位工程师都理解 C 的许多尖锐之处是不现实的。在 Rust 中,API 还没有完全到位,但有可能他们只需要编写安全的 Rust 代码。所以,让经验不足的工程师编写 Rust 实际上是有价值的 — 编译器会帮助他们编写更少的错误。

Simona Vetter 说,根据她的经验,普通内核 C 开发人员也不理解 C。理论上,有五个人可以有能力编写无错误的驱动程序,而实际上是没有人能做到。她说,编写无错误的内核代码实际上是不可能的。

Behme 回复说,在行业中,你必须编写驱动程序。因此,从真正的工程师那里获得可接受的驱动程序是必须的。Vetter 认为 Rust 实际上可以在这方面提供帮助 — 她的希望是,新工程师可以用 Rust 编写“随机代码”,并获得一个正确的驱动程序,这在 C 中永远不会发生。

Hindborg 认为这是一个有趣的观察。他预测,如果他们的雇主要求他们编写 Rust,很多人会很生气,因为没有人喜欢被编译器训斥。但尽管如此,当必要的库到位后,也许我们永远不会编译出有错误的驱动程序。

Ryhl 指出,她已经看到其他人为她的驱动程序做出了贡献的同时却没有添加任何抽象。所以至少在一个领域中,情况已经发展到大多数东西都很稳定的地步。

收集资源

此时,正式到了下一个会议的时间。但是,幸运的是,下一个会议计划是总结不同的教育材料,目的是为在内核中学习 Rust 生成推荐列表。

Ojeda 要求人们列出他们在学习 Rust 时发现最有帮助的资源。就他个人而言,他发现布朗大学 认知工程实验室 的 在线书籍 对他很有帮助,这本书有一个交互式借用(borrow)检查器。

Guo 开玩笑说,学习 Rust 的最好方法是学习 C++,讨厌它,然后学习 Rust。他说,很多概念都对应得上,但 Rust 好多了。Adrian Taylor 建议使用 New Rustacean 播客。他认为,用音频来学习一门编程语言很奇怪,但他很喜欢这种方式。他还建议了一系列文章,"以危险的方式学习 Rust",这篇文章展示了将 C 程序逐步转换为 Rust 的过程。

Kroah-Hartman 说,Linux 基金会有一个 免费在线课程 用于学习 Rust。Hindborg 说,谷歌也有一个免费的为期五天的课程,"全面的 Rust"。

Lossin 给出了一个更一般的建议 — 阅读博客。他说,有很多关于高级主题的好文章。他尤其喜欢 Amos Wenger 关于 Pin 的解释。Ojeda 建议使用 Aria Desires 的硕士论文 "你不能在 Trust 中拼写 Rust" 作为高级主题的良好资源。她还写了 "用太多链表学习 Rust",这本书当时没有人推荐,但它也是为有 C 语言经验的程序员提供的 Rust 入门书籍。

在收集了这些资源后,讨论转向了如何处理它们。Bilbao 说,该项目应该区分刚入门的人和在 Linux 中编写 Rust 有段时间的人 — 他们的需求不同。他建议使用 Rust-for-Linux 网站 作为托管好博客文章的中心位置,但也认为该项目必须“认真”地确保所有内容都有良好的文档。

Lossin 指出,已经有一个 linter 规则要求对所有公共项(函数和类型)进行文档化。他们简短地讨论了当前内核中为 C 代码编写文档的约定。

Vetter 最终指出了 kernel-doc 的一个问题, kernel-doc 是一个用于检查 C 代码是否已文档化的工具。当没有注释时,它不会抱怨,但如果有一个注释,而其他一些注释仍然缺失,它就会抱怨。这使得人们不想在还没有文档的地方添加文档。她说,Rust 领先一步,因为它只是要求文档存在,即使人们没有付出努力,也更容易在以后进行改进。她指出,善于编写复杂代码的人和善于编写文档的人之间往往没有很大的重叠 — 所以很适合鼓励人们合作。

总而言之,人们普遍认为,Rust-for-Linux 项目可以让人们更容易地掌握编写内核 Rust 所需的知识。因此,该项目将继续鼓励良好的文档标准,集中学习资源,并与其他内核开发人员合作,解决他们提出的痛点,找出还需要涵盖的内容。

[ 感谢 Linux 基金会,LWN 的旅行赞助商,为我们对 Kangrejos 的报道提供支持。 ]

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

39e8040a5b756aca25c89dcafe4e7871.jpeg

华为的C语言编程规范.pdf 华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。 立即下载

相关推荐

在win10系统上安装opnet14.5注意事项和步聚

opnet 14.5安装避坑!

miracle_eicont的专栏 1037

LWN:Rust 另一些对 kernel 有用的特性!

关注了就能看到更多这么棒的文章哦~More Rust concepts for the kernelBy Jonathan CorbetSeptember 20, 2021Kangrejo...

Linux News搬运工 476

国际参考电离层2020模型Matlab(IRI-2020)

国际参考电离层 (IRI) 是一个国际项目 由空间研究委员会 (COSPAR) 和国际 无线电科学联盟 (URSI)。这些组织组成了一个工作组 (在 60 年代后期产生了电离层的经验标准模型, 基于所有可用数据源 (几个稳步改进的版本 模型已经发布。电子密度、电子温度、离子温度、 离子组成(O+、H+、He+、N+、NO+、O+2、簇离子)、赤道垂直离子漂移、垂直电离层电子含量(vTEC;

weixin_44392003的博客 4880

LWN: Linux kernel 中的Rust!

关注了就能看到更多这么棒的文章哦~The Rust for Linux projectBy Jonathan CorbetSeptember 16, 2021KangrejosDeepL ...

Linux News搬运工 838

告别Keil4!手把手教你用Keil C51 V9.61编译51单片机代码(附最新激活方法)

本文详细介绍了Keil C51 V9.61在51单片机开发中的全栈升级指南,包括编译速度提升、调试器性能优化和现代开发支持等核心优势。通过智能安装方案、项目迁移实战和新特性深度应用,帮助开发者告别Keil4,大幅提升开发效率。附有最新激活方法和实用技巧,适用于嵌入式开发工程师。

weixin_26886855的博客 419

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

LWN: 内核 Rust 实验的现状

关于将核心内核(core-kernel)对 Rust 代码的依赖性,Airlie 表示,这在未来一两年内不应该发生。Kroah-Hartman 说,他曾担心核心内核和 Rust 驱动程序之间的交互,但发现交互比他预期的少得多。Ojeda 说他已经调查过,认为它应该可以工作,但他不知道目前的状况。Ojeda 总结说,用 Rust 工作的能力成功地吸引了新的开发者和新的维护者,这是该项目最初的目标之一。他说,更重要的消息是,运行 6.12 内核的 Android 16 系统正在搭载 Rust 编写的。

Linux News搬运工 200

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

LWN:Asterinas,兼容Linux的一个内核项目!

Asterinas 使用硬件隔离来允许运行任何编程语言编写的用户空间程序,旨在通用化,并提供 Linux 兼容的 ABI,而 RedLeaf 则是一个微内核,其设计目的/不/是使用硬件的隔离特性,并且该项目关注点不同。显然,对 Linux virtio 设备的支持已经存在,因此一个主要的障碍已经清除。另外两个是 OSTD(被描述为“一个 Rust OS 框架,旨在促进用 Rust 编写的操作系统内核的开发和创新”)和 OSDK(一个 Cargo 插件,用于辅助基于 OSTD 的内核的开发、构建和测试)。

Linux News搬运工 1916

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1909

ctfshow WEB web4

ctfshow WEB web4

weixin_68416970的博客 720

LWN: Rust 中对于Linux kernel有用的关键特性!

关注了就能看到更多这么棒的文章哦~Key Rust concepts for the kernelBy Jonathan CorbetSeptember 17, 2021Kangrejos...

Linux News搬运工 518

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1710

LWN:2022年底总结!

关注了就能看到更多这么棒的文章哦~Wrapping up 2022By Jonathan CorbetDecember 21, 2022DeepL assisted translationhttps://lwn.net/Articles/917752/又是一年即将过去。这说明现在是时候来重复 LWN 的一个长期传统了:回顾我们在一月份所做的预测,并给予应有的嘲弄。请继续阅读,看看这些预测是如何进行...

Linux News搬运工 833

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LWN:Rust实现文件系统!

关注了就能看到更多这么棒的文章哦~Rust for filesystemsBy Jake EdgeJune 21, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/978738/在 2024 年的Linux 存储、文件系统、内存管理和 BPF 峰会 (Linux Storage, Filesystem, Memo...

Linux News搬运工 2698

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linus正面回应Linux内核“Rust之争”:未来必定使用,完全生产级别尚需时日!...

Linux 从诞生发展到今天,已经过去了 33 年,期间虽然伴随过各种争议,但有 Linux 之父 Linus Torvalds 坐阵,整体发展还算平稳。然而,自从 2022 年 Linux 内核宣布引入 Rust 语言以来,这个社区内部掀起了一场意料之外的风波。不久前,Rust for Linux...

优快云资讯 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LWN: 2025 年回顾

帮助我们实现这一目标并普遍惠及 LWN 的最佳方式是务必订阅,或者更好的是,让您的雇主购买团体订阅。我们这边,我们将一如既往地做我们一直在做的事情:努力为我们的社区提供最好的报道。美国国内的变化,除其他外,几乎保证在一段时间内很少有重要的技术会议会在那里举行——而且许多在美国工作的人将因害怕无法返回而无法参加其他地方的活动。今年,我们的保险提供商通知我们,这项保险的费用将增加 14%——这只是连续两位数增长中的又一次。这一事件再次清楚地表明,除非付出明显的努力来保存,否则互联网上的历史是短暂的。

Linux News搬运工 141

LWN:2025年值得期待的那些事!

关注了就能看到更多这么棒的文章哦~Some things to expect in 2025By Jonathan CorbetJanuary 2, 2025Gemini-1.5-flash translationhttps://lwn.net/Articles/1003780/日历提醒我们,新的一年又开始了。这意味着什么?是时候大胆预测一些几乎肯定不会发生的事情了!这可是传统,我们必须尝试一下。...

Linux News搬运工 993

LWN:对2024年的预测!

关注了就能看到更多这么棒的文章哦~LWN's guide to 2024By Jonathan CorbetJanuary 2, 2024ChatGPT translationhttps://lwn.net/Articles/954544/时光荏苒,日历已经翻到 2024 年,又迎来了新的一年。在 LWN,我们对于这一年将带来什么,其实并不比其他人知道更多,但这并不妨碍我们冒险来尝试进行一些预测。...

Linux News搬运工 366

LWN:Tyr (Arm Mali 的 Rust 驱动)的未来!

目前的设计假设使用 drm_gpu_scheduler,但在 GPU 固件可以自行调度任务的时代,这已成为某些驱动程序的障碍,并且一直受到难以解决的生命周期问题的困扰。此外,还有一些悬而未决的问题,例如如何在不使用锁的情况下共享 GPU 缓冲区的非重叠区域,最好能在类型系统中编码并在编译时检查。这个原型将起到指导我们上游工作的作用,并让我们能够尝试不同的设计。这可能是第一个可供 C 驱动程序使用的 Rust 内核组件,是 Rust 在内核中的又一个里程碑,也是 C 和 Rust 之间无缝互操作性的标志。

Linux News搬运工 120

LWN:Linux SVSM 项目!

关注了就能看到更多这么棒的文章哦~The Linux SVSM projectJanuary 30, 2023This article was contributed by Carlos BilbaoDeepL assisted translationhttps://lwn.net/Articles/921266/如果说传统网络像是只有少数几扇门的个人住宅,只有少数人拥有钥匙,那么基于云的环境就像...

Linux News搬运工 1153

LWN:新年预测

关于发行版的讨论最为激烈,用户认为发行版的核心价值在于软件包的“人工策展”、安全审计以及提供统一受信任的软件源,以避免 Linux 陷入类似 Windows 的软件分发乱象。基于 GCC 的编译器的可用性将使许多人的过渡变得更容易,特别是那些使用基于 LLVM 的 rustc 编译器不支持的体系结构(architecture)的人。同时,*Linux 和自由软件(Free Software)的整体兴趣将会增加* ,这将由受监控担忧、强制升级、不受欢迎的 AI 功能以及不断上涨的硬件价格的共同推动。

Linux News搬运工 134

LWN: 6.1 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 6.1 merge windowBy Jonathan CorbetOctober 7, 2022DeepL assisted translationhttps://lwn.net/Articles/910312/6.1 合并窗口正在顺利进行中:自从窗口打开以来,已经有 5,752 个 non-merge changes...

Linux News搬运工 368

LWN:撤回 revocable (可撤销资源管理)

内核开发人员/维护者一年只‘被允许’进行一次重大争论/斗争,我真的不想在今年这么早的时候就耗尽我 2026 年的额度:)”他要求 Shih 仔细研究反馈,并准备一个新的系列补丁进行评审,运气好的话,可能会合并到未来的内核版本中。他指出,由于“语言限制”,C 语言的实现无法以同样的方式工作,但他认为可撤销系列补丁是在探索如何最好地将 Rust 模式应用到 C 侧的一个有价值的尝试。啊,但我确实认为这是前进的方向,因为这种模式/想法在内核的 Rust 侧是行得通的,而且这正是我多年来一直要求的:)

Linux News搬运工 112

Ubuntu大佬神操作!Rust版Linux调度器秀麻了,性能远超C!

近日,一位Linux内核工程师出于兴趣用Rust编写了一个Linux调度器。这位来自Ubuntu制造商Canonical的工程师名叫Andrea Righi。他在X(推特)上发文谈到,他利用圣诞假期进行了这项实验。没想到这个只是“出于好玩”而进行的项目却带来了意外惊喜。初步结果显示:通过sched_ext实现并基于eBPF技术、能够在运行时加载的Rust调度器具有很大的潜力和希望。

IT界那些事儿 322

如何快速掌握底层编程:lowlevelprogramming-university完整学习指南

底层编程是接近计算机硬件的开发领域,涉及汇编、C语言和系统架构等核心知识。lowlevelprogramming-university项目提供了从理论到实践的完整学习路径,帮助初学者系统掌握底层开发技能,成为Linux内核工程师或嵌入式系统专家。 ## 📚 底层编程核心理论基础 底层开发需要两大理论支柱:**计算机体系结构**与**操作系统原理**。建议通过在线课程建立知识框架,重点理解CP

gitblog_00727的博客 682
上一篇: LWN:gccrs开发进展!
下一篇: LWN:处理复杂摄像头!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值