[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

相关文章

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬