百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-09-29 16:11 28 浏览 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 的最新用法

独家资讯

相关推荐

国产linux操作系统(国产linux操作系统有什么版本)

中国对于操作系统的探索其实并不晚。  早在20世纪60年代中期中国就开始操作系统的研发,那时的比尔·盖茨还只是个迷恋计算机的小字辈,南京大学教授孙钟秀、北京大学杨芙清院士等都是我国操作系统的拓荒者...

免费无需排队的云电脑(不需要排队的云电脑)

目前市场上有一些云游戏平台提供无限时长且无需排队的服务。这些平台通常采用先进的云计算技术和高性能服务器,能够提供稳定流畅的游戏体验。用户可以随时登录并畅玩游戏,无需等待排队。这些平台还提供多种游戏选择...

视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
  • 视频播放器下载量排名(2020视频播放器排行榜)
wps官方下载(wps官方下载官网电脑版网址)

具体的步骤如下:1、首先在电脑上打开浏览器,在浏览器中输入“WPS”,找到WPS官方网站。2、接下来进入WPS官方网站中,找到WPS软件,点击“免费下载”。3、点击下载后在弹出来的对话框中修改下载位置...

win vista与win7有什么区别(win7与vista关系)

WindowsVista和Windows7是微软公司推出的两个桌面操作系统,它们之间有以下主要区别:1.界面设计:Windows7的界面设计更加简洁明了,而WindowsVista的界面...

winxp系统版本(winxp 版本)

1、微软官方3个版本:WINDOWSXPHOME(家庭版)、Professional(专业版)、MediaCenter2005(媒体中心版),每个版本的功能不一样。使用最多的是Professional...

打印机无法共享怎么回事(打印机无法共享出去)

共享打印机无法打印原因一:可能是由于病毒死机解决方法:确定是否由于病毒死机,找一张干净(确信无病毒)的系统盘,从A驱动舒上启动电脑,检查此时打印机和主机能否联机。如果正常联机,估计这种故障是由攻击硬件...

ipv6无网络访问权限怎么解决

ipv6无网络访问权限解决方法如下1、点击电脑左下角的开始,进入到开始的菜单栏,在菜单栏中找到“运行”。或者通过快捷键Windows+R打开运行窗口。  2、打开运行的窗口页面后,在页面上输入“CMD...

office ltsc版(Office LTSC版本区别)

office2021和2021ltsc的区别如下:1.更新策略不同。前者采用每个月月度更新的方法,提供功能更新、安全更新。后者不采用每个月月度更新的方法,且不提供功能更新。2.界面不同。2021采用了...

安装win7需要激活吗(现在安装win7旗舰版还需密钥吗)

要激活  Windows7如果是预装在计算机中的,买来之后便不用激活,这里预装指的是在厂商那里。正版的Windows7安装到计算机中,有三十天的试用期,若要永久使用,就要使...

originos 3升级计划公布(originos升级包)

2023年2月。1.OriginOS3.0系统第一批升级时间为11月25日。2、包含iQOONeo7,X80系列,S15系列,iQOO9、iQOO10系列,以及折叠屏XFold系列和大屏XNo...

鸿蒙系统适配第三方机型(鸿蒙 第三方适配)

最新华为官方公布了鸿蒙系统3.0支持的机型名单,具体如下。鸿蒙系统3.0升级名单:1.Mate系列:MateXs2、MateX2、MateXs、Mate40、Mate40Pro、Mate...

imei怎么下载(imei changer apk)

如果您的steam序列号激活了,可以尝试以下方法下载:1.使用steam自带的下载工具,如“下载工具”,在软件的“下载”选项卡中选择“序列号下载”。2.在下载页面中,选择要下载的游戏,然后点击“下...

电脑系统优化软件哪个好(系统优化软件排行榜)

有必要用,非常好用,WINDOWS优化大师是一个网络上下载率极高的系统维护软件。多年未曾清理过系统和硬盘的电脑,系统内部将产生大量的垃圾文件、临时文件、废旧程序等等win10系统不需要经常更新,关闭...

重装系统后硬盘不见了(重装系统后磁盘不见了)

硬盘不见可能是因为重装系统时未正确安装驱动程序或未对硬件进行正确设置。你可以按以下步骤排查问题:进入BIOS检查硬盘是否被识别,尝试重新连接数据线和电源线,更新或安装适当的硬件驱动程序,或者使用硬件故...

取消回复欢迎 发表评论: