公开发布Perl 1.0(1987年12月18日)和当前稳定版本5.10.1(2009)之间已经有22年了.

在这22年中,出现了以下显着的发布:

> Perl 1.0(1987 – 初始版本)
> Perl 2(1988 – 更好的正则表达式)
> Perl 3(1989 – 支持二进制数据流)
> Perl 4(1991 – 识别骆驼书中描述的Perl版本)
> Perl 5(1994年 – 主要修改介绍,接近完整翻译)
> Perl 5.6(2000 – 64位支持,unicode字符串,大文件支持)
> Perl 5.8(2002 – 改进的unicode支持,新的IO实现)
> Perl 5.10(2007 – 新开关语句,正则表达式更新,智能匹配运算符)

我正在寻找Perl历史中向后不兼容的具体例子.

题:

>在Perl的22年历史中,有没有Perl向后不兼容的例子,Perl源代码针对Perl X版本不会在Y版本(其中Y> X)下运行?

请尽可能包含参考和代码示例.

解决方法

最大的故意不兼容之一是在Perl 4和Perl 5之间改变的阵列插值.
my @example = qw(1 2 3);
print "foo@example.com";

在Perl 4中将是:

foo@example.com

在Perl 5中将是:

foo1 2 3.com

幸运的是,如果阵列不存在,Perl会警告您有关“可能的意外插补”.

线程在5.005和5.6之间发生了很大变化. “5005线程”使用所有全局数据共享的传统POSIX线程模型.虽然理论上这是更快的,因为那时Perl只能使用POSIX线程,这是Perl编码器的一个噩梦.大多数Perl模块不是线程安全的.它从来没有真的很好.

在5.6中,ActiveState和其他人在Windows上做了fork().当您在Windows上使用fork()时,Perl将创建一个解释器对象的副本并运行两个口译的操作码.这被称为“多重性”.

在5.8中,亚瑟·伯格曼(Arthur Bergman)跑了,用它来创建ithreads.因为多重性正在模拟单独的进程,所以默认情况下不会共享数据.只有您所说的数据是共享的.这使得它们使用起来更安全,尽管在使用电脑之前需要很长时间.像Elizabeth Mattijsen和Jerry Hedden这样的人就这样做了.

5005线最终在5.10.0中被清除.存在兼容性层,但我怀疑它将在生产代码中真正有效.

另一个很大的不兼容性在5.6和5.8之间引起了Unicode. Unicode在5.6爆炸.字符串是否是Unicode是由周围范围决定的.它在5.8中完全重新设计,所以现在字符串的Unicodeiness与字符串绑定.使用5.6的Unicode编写的代码通常必须在5.8中重写,通常是因为要使5.6的Unicode正常工作,你必须做丑陋的黑客.

最近,5.10.1对智能匹配做了一大堆不兼容的更改.幸运的是,它们是在5.10.0中引入的,所以没有什么大不了的. Perl 6的故事介绍了智能匹配概念,并且被引用到Perl 5的开发版本.时间已经过去,Perl 6的智能匹配思想发生了变化.没有人告诉Perl 5个人,它在5.10.0没有变化. Larry Wall noticed and did the equivalent of OMG YER DOIN IT WRONG!!!新的Perl 6版本看起来更好,所以5.10.1修正了.

Perl版本中后向不兼容性的一些具体示例是什么?的更多相关文章

  1. iOS 6 API和向后兼容性

    可以在支持早期iOS版本的应用中使用iOS6中引入的API和框架吗?这只能通过解决方法和代码来实现,例如:或者我可以在支持早期版本的iOS而不指定版本的应用程序中使用更新的框架,API等?而且,我能否使用Xcode4.5,还是要坚持现在的公开发行版?

  2. ios – Swift 4向后兼容性

    一起使用.有没有办法在两个版本的Xcode中使这个工作?Swift4是否应该向后兼容?

  3. Swift快速入门五集合

    相关文章Swift快速入门(一)第一个Swift程序Swift快速入门(二)基本数据类型Swift快速入门(三)运算符Swift快速入门(四)流程控制前言Swift提供了数组和字典两种集合类型来存储数据,Swift的数组用来存储顺序相同类型相同的类型,字典则采用kay-value的形式存储数据。修改字典字典提供了updataValue()方法来修改字典的value值,该方法会返回一个Sting?

  4. 译:Swift ABI (一)

    作为Swift社区的一份资源,这份文档也为SwiftABI的发展指明了方向。这些内容记录了和SwiftABI相关的工程和设计任务。在运行时,通过Swift编写的二进制程序通过ABI和其他的程序库或组件进行交互。但Swift是一门和C截然不同的语言,它需要为每一种平台定义自己的ABI。而这份文档中中的绝大部分内容都是和平台无关的,和具体平台相关的考量会影响到SwiftABI的设计和实现细节。

  5. 苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单

    源代码兼容性是Swift未来的目标。为了实现这一目标,建立了一个源兼容性测试套件,用于根据Swift源代码语料库对编译器进行回归测试更改。添加向项目模板等更多内容请查看Swift官方网站

  6. Swift 3 iOS兼容性

    所以现在我使用Swift3,默认情况下部署目标设置为iOS10.0这意味着我将无法使其运行在例如iOS8-9?“CosinSwift3我使用新的功能,在后来的操作系统中不可用您可以在iOS8&9将DeploymentTarget设置为其中一个版本。Swift3.x与iOS8兼容较新。与Swift2.2的唯一区别是您必须使用Xcode8。当您将部署目标设置为比iOS10更早版本的应用程序时,您应该意识到不能使用iOS10中新增的API,但使用Swift3应该没有问题。编辑:您现在可以使用Xcode8.0GM

  7. Android P预览上的Espresso测试:检测到API兼容性错误的问题

    我正在使用Espresso进行仪器测试并在AndroidPreviewPEmulator上运行它们.我的测试类中有5个测试用例,其中一个测试在运行测试套件时失败并得到以下错误.DetectedproblemswithAPIcompatibility失败的测试用例在单独运行而不是在套件中运行时通过.由于对话框显示在显示检测到的API兼容性问题的视图上,因此在层次结构异常中找不到匹配的视图以及上述错误

  8. android – 如果最低SDK = 14,则为Lollipop提供Appcompat,兼容性和支持库

    我们有一个现有的Android应用程序支持最高级别为18的API级别.我们使用了兼容性库19.1.0.现在我们正在改变/升级到:>最低SDK=14>目标=android-22现在假设有不同版本的v4,v7,v13支持,兼容性和appcompat库,我不确定要包含哪些,哪些不包含.我们使用maven进行依赖管理并使用MavenSDKdeployer解决方法如果您使用的是14的minSDK,那么从技术

  9. 使用Android API Level 15时如何保持向后兼容性?

    冰淇淋三明治介绍了很多新的UI设计元素,但市场渗透率仍然只有4%左右.如果想要面向未来的应用程序,并利用Honeycomb/IceCreamSandwich引入的一些设计元素,例如动作栏,配色方案等,那么确保您保持一些向后的方式是最好的方法兼容性?解决方法虽然我同意@OllieC,我认为除了使用ActionbarSherlock图书馆之外,还有其他选择可以添加,而这个我会积极参与ABS社区,并同意

  10. vue中引入mousewheel事件及兼容性处理方式

    这篇文章主要介绍了vue中引入mousewheel事件及兼容性处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

随机推荐

  1. 数组 – Perl中有什么神奇的数组?

    在Perldocumentationforreverse中,我发现:“请注意,将数组反转到自身(如@a=reverse@a)将尽可能保留不存在的元素;即对于非魔法数组或具有EXISTS和DELETE方法的绑定数组.什么属性区分神奇和非魔法阵列?解决方法一个神奇的阵列是一个执行它的操作不仅仅是改变内容.只有内置的魔术阵列是@ISA,而且这是非常不明显的.正如句子所暗示的,魔术阵列主要是一个绑定的阵列

  2. perl – 使用“isa”方法的最佳方式?

    什么是“最好的”使用方式“isa()”可靠?解决方法Scalar::Util实现明确更好.它避免了eval{}的开销,它总是导致设置一个附加变量.Scalar::Util实现更容易阅读.如果eval也失败了,我相信发生的是你在树之前向后走到eval之前的状态–这是如何实现复位状态.这带来了额外的故障开销.基准根本不是一个对象对象传递isa检查对象出现故障现象检查测试代码:我使用这是为i486-linux-gnu-thread-multi建立的perl,v5.10.1(*),以及Scalar::Util,1

  3. 在CORE :: GLOBAL中哪些Perl内置函数不能被覆盖?

    解决方法toke.c中任何值为负的值都可以被覆盖;所有其他人可能不会.你可以看源码here.例如,我们来看看第10,396行的waitpid:由于waitpid为负数,因此可能会被覆盖.grep怎么样?这是积极的,所以不能被覆盖.这意味着以下关键字不能被覆盖:chop,defined,delete,do,dump,each,else,elsif,eval,exists,for,foreach,format,glob,goto,grep,if,keys,last,local,m,map,my,next,no

  4. 如何在Perl中打印由换行符分隔的列表元素?

    什么是最简单的打印所有列表的元素以Perl中的换行符分隔的元素?解决方法在Perl5.10中:其他方式:或:或者怎么样?

  5. 使用Perl如何获取文件大小(以兆字节为单位)?

    我想以磁盘的形式获取磁盘上的文件大小.使用-s运算符给出了以字节为单位的大小,但是我将假设,然后将其除以魔术数字是一个坏主意:我应该使用只读变量来定义1024,还是有一种编程方式来获取一千字节的字节数?

  6. perl – 如何测试/分类CPAN模块的utf8正确性

    例如:File::Slurp,如果你将读取该文件您将根据命令行开关获得不同的结果,并且perl-CSDA将无法正常工作.伤心.(是的,我知道比Encode::decode(“utf8”,read_file($file,binmode=>’:raw’));将帮助,但是SAD.我的问题:>在这里任何首选方式,如何测试/分类什么CPAN模块是utf8安全/准备/正确?>这里是像Perl::Criticforutf8这样的东西–什么将检查模块源可能的utf8不正确?总结以上是DEVMAX为你收集整理的perl–如

  7. 如何删除Perl字符串中的空格?

    如果我声明一个值为’3’的变量$myString.是否有任何功能来删除返回值的空格.有点像SomeFun然后返回’3′.输出:你可以注意到’vid’=>‘0’,上面的代码从theanswer.我正在研究它.总结以上是DEVMAX为你收集整理的如何删除Perl字符串中的空格?如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  8. 如何在mod_perl2下运行Devel :: Cover?

    Unfortunately,Devel::Coverdoesnotyetworkwiththreads.它也不适用于prefork.在startup.pl中使用,Devel::Cover问题perl5.8.9,Apache2.2.13.我的操作系统是FreeBSD,如果重要.同样的问题是reportedforwin32.更新:PerlTrace全部输出解决方法邪恶之源似乎是Apache::DBI.

  9. 如何使用Perl中的C类?

    我有一套用C写的课.从Perl脚本中调用它们的最佳方法是什么?

  10. perl – 在Emacs中以双模式更好的缩进

    我正在使用Emacs来修改Perl和Verilog交织的代码.我正在使用two-mode-mode在两者之间切换,这样可以预期.问题是perl代码与//一行一行地表示;如下图所示:而双模式则认识到它是Perl,它是逐行的,所以缩进等在线上无意义.我想做的是使Perl代码像往常一样格式化,但忽略//;字符.有什么想法吗?我刚刚开始偷看模式文件,它们是可以理解的复杂的,所以任何提示都不会感激!

返回
顶部