[240610] 5 种 Non-Posix Shell 在 x-cmd 上的支持 | Perl 发布 5.40.0

2024-06-11 03:28

本文主要是介绍[240610] 5 种 Non-Posix Shell 在 x-cmd 上的支持 | Perl 发布 5.40.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • @[TOC](目录)
    • 5 种非 Posix SHell - nushell,fish,xonsh,csh,pwsh
      • nushell
      • fish
      • xonsh
      • csh
      • pwsh
    • Perl 发布 5.40.0
      • 核心增强
      • 安全性
      • 不兼容的变化
      • 弃用
      • 性能提升
      • 模块和编译指示
      • 文档
      • 诊断
      • 配置和编译
      • 平台支持
      • 内部变化
      • 选定的错误修复
      • 已知问题
      • 先前版本的勘误表
      • 致谢
      • 报告错误
      • 致谢
      • 另请参阅

5 种非 Posix SHell - nushell,fish,xonsh,csh,pwsh

利用三天假期,我开始动手增加了对各种 Non-Posix shell 的 x-cmd 支持。
在这个过程中,边学边用了 nushell / fish / xonsh / csh 。

进展比较顺利,现在 nushell/fish/xonsh/csh 可以调用 x , 以及 c 启动我们的快速路径切换,以及 @gpt, @gemini, @o 进行 LLM Agent 的调用。相关的工作会在 v0.3.10 发布;但注意,对非 posix shell 的支持仍是 beta 特性。

nushell

nushell 的流式设计与 jq 很接近,并引入大量 函数编程 的理念 – 彼之砒霜,汝之蜂密 。

我对此非常感兴趣,nushell 以数据流为目标,与 x-cmd 下一步的设计理念非常契合。

fish

fish 设计很清爽,其成型较晚,集各 shell 之大成 但仍能保持语法的简明。
虽然近十年不时注意 fishshell 的新闻,但也前天才发现开始 fish 也开始 rust 化,这是一个好的兆头 – 重写这个行为本身就会向该项目注入新的活力 – 至少,我们可以期待 portable fish 的出现。

xonsh

python 的元素故然让人振奋,但整体看上来有点复杂。
也许站在 python 高阶用户的角度,这种复杂度毫无压力。

python 自带电池 的设计理念,使其很容易整合大量有趣的功能。xonsh 可谓这个流派的集大成者,python 发烧友切勿错过。

csh

虽然 Freebsd 的 default shell 是 poxis 的 bsh,但其 login shell 是 csh 。

在使用过程,发现 csh 以 word list 为首要数据假设的思路非常有趣 – 我现在算是想明白了,也许 bash 的作者因为不舍得这个特性,才导致复杂性剧增。

csh 支持 goto,但不支持 function – 对于有 eval 的动态语言,有限地解决这个问题也不算困难。也许在最早期的语言设计时, 最小化语言设计应该包含什么元素,仍是百花齐放,并无一致的共识。

不过,我遇到了一个问题,无法在不依赖外部文件的方式解决。就此问题我向 tcsh 官方发了 issue。
https://github.com/tcsh-org/tcsh/issues/108

pwsh

我们一直都通过 pwsh 模块,调用 powershell 以复用 windows 上已有的强大的命令行能力(系统信息的获取,scoop 安装以及增强)。

不过,由于 git-for-windows 上的 UNIX 路径转换 ,以及一些可能未知的设计细节( windows/posix 之间衔接的复杂性 ),我们会在七月份才开始 pwsh 的收尾工作。

Perl 发布 5.40.0

Perl 5.40.0 更新摘要

核心增强

  • 新增 __CLASS__ 关键字:class 特性中,方法、ADJUST 块和字段初始化表达式可以使用 __CLASS__ 关键字获取运行时类名,方便方法调度。 (参考 perlfunc 中的 __CLASS__)
  • 字段变量的 :reader 属性: class 特性中,字段变量可以使用 :reader 属性自动生成读取器方法。 (参考 perlclass 中的 :reader)
  • -M 命令行选项允许空格: -M 开关和模块名之间允许有空格。
  • 限制 use VERSION 声明: 将 5.11 以上版本的 use VERSION 声明降级到 5.11 以下版本现在是致命错误。连续使用 use VERSION 声明,且其中一个版本大于等于 5.39,也是致命错误。
  • 新增 builtin::infbuiltin::nan 函数 (实验性): 提供浮点数无穷大和非数字值。
  • 新增 ^^ 逻辑异或运算符: 补充了中等优先级逻辑运算符。
  • try/catch 特性不再是实验性的: 从 Perl 5.34.0 开始引入的 try/catch 错误处理机制现在被认为是稳定的。
  • for 迭代多个值不再是实验性的: 从 Perl 5.36.0 开始引入的 for 迭代多个值特性现在被认为是稳定的。
  • builtin 模块不再是实验性的: 从 Perl 5.36.0 开始引入的 builtin 模块现在被认为是稳定的,但其中一些函数仍然是实验性的。
  • :5.40 特性包添加了 try: 最新的版本特性包现在包含最近稳定的 try 特性。
  • use v5.40; 导入内置函数: 除了导入特性包之外,use v5.40; (或更高版本) 还导入相应的内置版本包。

安全性

  • CVE-2023-47038: 修复了通过非法用户定义的 Unicode 属性导致的缓冲区溢出漏洞。
  • CVE-2023-47039: 修复了 Windows 平台上的二进制劫持漏洞。

不兼容的变化

  • reset EXPR 现在会调用标量的 set-magic 方法: 这可能会导致以前没有效果的代码现在产生效果,甚至抛出异常。
  • 调用未知包的 import 方法会产生警告: 这有助于在不区分大小写的文件系统上检测 use 语句中的大小写错误。
  • return 不再允许间接对象: 这消除了语法上的歧义和潜在的混乱。

弃用

  • 使用 goto 从外部作用域跳转到内部作用域已被弃用,并将在 Perl 5.42 中完全移除。

性能提升

  • 优化了否定运算符的性能。

模块和编译指示

  • 新增模块: Term::TableTest2::Suite
  • 更新模块: 包括 Archive::TarattributesautodieBB::DeparseBenchmarkbignumbuiltinbytesCompress::Raw::Bzip2Compress::Raw::ZlibCPAN::Meta::RequirementsData::DumperDB_FileDevel::PeekDevel::PPPortdiagnosticsDynaLoaderEncodeErrnoexperimentalExporterExtUtils::CBuilderExtUtils::ManifestExtUtils::MiniperlFcntlfeaturefieldsFile::CompareFile::FindFile::GlobFile::SpecFile::statFindBinGetopt::LongGetopt::StdHash::UtilHash::Util::FieldHashHTTP::TinyI18N::LanginfoIOIO-CompressIO::Socket::IPIO::ZliblocaleMath::BigIntMath::BigInt::FastCalcModule::CoreListModule::MetadatamroNDBM_FileOpcodeperl5db.plperlfaqPerlIO::encodingPerlIO::scalarPerlIO::viaPod::CheckerPod::HtmlPod::SimplepodlatorsPOSIXreSafeSelfLoaderSocketstrictTest::HarnessTest::SimpleText::TabsText::Wrapthreadsthreads::sharedTie::FileTime::gmtimeTime::HiResTime::LocalTime::localtimeTime::tmUNIVERSALUser::grentUser::pwentversionwarningsXS::APItestXS::Typemap

文档

  • 更新了文档以反映此版本中的更改。
  • perlapiperlclassperlfuncperlgutsperlclibperlhacktipsperllolperlreperlrefperlopperlvar 进行了其他改进。

诊断

  • 添加了新的错误和警告消息。
  • 改进了现有诊断消息的清晰度和准确性。

配置和编译

  • 移除了 microperl
  • 修复了在不同语言环境下探测 LC_ALL 语法的 here-doc 问题。
  • 现在可以使用 -Accflags=-DPERL_USE_HWM-Accflags=-DPERL_NO_HWM 分别启用或禁用非调试和调试构建的高水位线检查。

**测试

  • 添加和更改了测试以反映此版本中的其他添加和更改。
  • 对测试套件进行了重大改进,包括更新 nm 输出解析、处理 BusyBox 系统上的测试失败、使用更便携的方式获取对象文件中定义的名称以及添加广泛的语言环境处理压力测试。

平台支持

  • 新增平台: Serenity OS。
  • 平台特定说明: Windows、Linux、MacOS/Darwin 和 VMS。

内部变化

  • 添加了 PERL_RC_STACK 构建选项,该选项目前是实验性的,并默认禁用。
  • 添加了一个新的 API 函数 newLISTOPn(),用于简化创建 LISTOP optree 片段的 C (或 XS) 代码。
  • eval_sv() API 现在接受 G_USEHINTS 标志,该标志使用来自 PL_curcop 的提示(例如 strict 和 features),而不是默认的默认提示。
  • 修复了 PERL_VERSION_LE 以正确检查“小于或等于”,而不是“小于”。
  • dAXdITEMSdXSARGS 现在将 AXitems 声明为 Stack_off_t,而不是 SSize_t
  • 为 XS 代码添加了一个新函数 sv_langinfo,它提供与现有 Perl_langinfo8 相同的信息,但返回一个 SV 而不是 char *
  • glibc 有一个未记录的等效函数来查询 locale(),当使用此函数时,它消除了 perl 保留自己记录的需要,因此效率更高,并保证准确。可以通过定义 NO_NL_LOCALE_NAME 构建选项来禁用此函数的使用。

选定的错误修复

  • 修复了与 Unicode 定界符、use 5.36、闭包清理、字符串操作、类继承、state 变量、数组操作、-X 标志、内存泄漏、词法作用域、join() 函数、dbstate 操作符、语言环境处理、正则表达式引擎 、临时堆栈、词法子例程和 prepare_export_lexical() 函数相关的大量错误。

已知问题

  • Windows 上的 perlivp 缺少 streamzip。

先前版本的勘误表

  • 更新了 perl5300delta,以包含与 $[ 同时删除的 arybase 模块的删除。

致谢

  • 感谢所有为 Perl 5.40.0 做出贡献的人员。

报告错误

  • 如果您发现任何问题,请在 https://github.com/Perl/perl5/issues 上提交问题报告。

致谢

  • 您可以通过运行 perlthanks 程序来感谢 Perl 5 移植者。

另请参阅

  • Changes 文件:详细说明如何查看更改的详细信息。
  • INSTALL 文件:介绍如何构建 Perl。
  • README 文件:介绍一般内容。
  • ArtisticCopying 文件:版权信息。

以上文章采用 Gemini Pro 1.5 生成摘要,命令如下:

x jina r 'https://perldoc.perl.org/5.40.0/perldelta' | \@gemini -t 0 '以大纲方式生成一份摘要,列举更多的数据支撑,用中文'

更多内容请查阅 : blog-240610


关注微信官方公众号 : oh my x

获取开源软件和 x-cmd 最新用法

这篇关于[240610] 5 种 Non-Posix Shell 在 x-cmd 上的支持 | Perl 发布 5.40.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050079

相关文章

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分