[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

相关文章

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

【服务器运维】CentOS7 minimal 离线安装 gcc perl vmware-tools

0. 本机在有网的情况下,下载CentOS镜像 https://www.centos.org/download/ 1. 取出rpm 有的情况可能不需要net-tools,但是如果出现跟ifconfig相关的错误,就把它安装上。另外如果不想升级内核版本的话,就找对应内核版本的rpm版本安装 perl-Time-Local-1.2300-2.el7.noarch.rpmperl-Tim

WordPress网创自动采集并发布插件

网创教程:WordPress插件网创自动采集并发布 阅读更新:随机添加文章的阅读数量,购买数量,喜欢数量。 使用插件注意事项 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化,主要包括: 界面设置:用户现在可以更便捷地设置文章分类和发布金额。代码优化:改进了采集和发布代码,提高了插件的稳定

AI赋能天气:微软研究院发布首个大规模大气基础模型Aurora

编者按:气候变化日益加剧,高温、洪水、干旱,频率和强度不断增加的全球极端天气给整个人类社会都带来了难以估计的影响。这给现有的天气预测模型提出了更高的要求——这些模型要更准确地预测极端天气变化,为政府、企业和公众提供更可靠的信息,以便做出及时的准备和响应。为了应对这一挑战,微软研究院开发了首个大规模大气基础模型 Aurora,其超高的预测准确率、效率及计算速度,实现了目前最先进天气预测系统性能的显著

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器,它是Apache基金会的Jakarta 项目中的一个核心项目,由Apache, Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 在Tomcat中,应用程序的成部署很简

hbase中shell命令

HBase scan命令详解 - 简书https://www.jianshu.com/p/0ccfd59d73f4 Hbase中多版本(version)数据获取办法_牛奋lch-CSDN博客_hbase 多版本前言:本文介绍2种获取列的多版本数据的方式:shell和spring data hadoop一、hbase shell中如何获取    1、在shell端创建一个Hbase表create

基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结

最近刚刚接触XILINX的ZYNQ板,刚接触没有十天。XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多。据说今年TI的最新产品也加入了ZYNQ板。 之前的MIPS处理器设计与实现的项目就算做告一段落,搞了将近7个月,成果显著,收获颇多,最近打算搞搞ZYNQ。 之前MIPS也有一套交叉编译工具,不过是老师提供的,自己也尝试搞了搞,太辛苦了,而且也没什么成果,因为我

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开