挑战
选择两种不同的编程语言,然后编写一个程序,将以下行打印到stdout(或等效文件):
This program errors out in <the current language> :P
然后在两种语言中都产生不同类型的错误。
规则
一些规则来自最初的挑战。
- 在输出中,语言名称应严格遵循:
- TIO上列出的名称,可以选择不包括版本号和/或实现名称(例如,如果您使用
JavaScript (Node.js)
其中一种语言,则可以使用JavaScript
您的语言名称,但不能使用JS
或Javascript
。) - 如果您选择的语言在TIO上不可用,则在官方网站(或GitHub存储库)上提供全名。
- TIO上列出的名称,可以选择不包括版本号和/或实现名称(例如,如果您使用
- 这两个程序都不应该接受用户的任何输入。
- 您可以使用两种语言的注释。
- 相同语言的两种不同版本计为不同语言。
- 如果这样做,程序应输出主要版本号,并且如果在两个不同的次要版本上运行,则还应报告次要版本。
- 您不应该使用预构建的版本函数(这包括在运行时已经评估过的变量)。
- 只要此标记不包含代码片段(例如,在C 语言中),根据该元共识,两种使用相同语言的不同命令行标记也会计为不同的语言
-Dblahblah...
。- 如果这样做,程序还应该输出使用的标志。
- 除非两个错误都由相同的语义生成(例如“除以零”,“分段错误”或“索引超出范围”),否则将认为这两个错误是不同的。
- 如果语言的运行时在发生错误后没有退出,而是以某种方式向用户报告该错误,则这是有效的错误。
- 如果一种语言不能区分错误消息,但是具有导致错误的已知原因列表,则必须指定原因,而不是错误消息。
一个示例是><>
,它只有一个错误消息something smells fishy...
,但是esolangs Wiki页面上有错误原因列表。
- 除非通过调用
eval()
或类似方法生成,否则不允许语法错误。 - 允许通过
throw
(JS),raise
(Python),die
(Perl)或类似方式手动投掷某些东西,但是所有这些都被视为一种错误。 - 也允许在2D或golflangs中通过无效命令进行错误(并将其视为一种错误)。
例子
Python和Ruby
- Python:
This program errors out in Python :P
到stdout,然后是未定义的标识符 - Ruby:
This program errors out in Ruby :P
到stdout,然后越界索引
C89和C99
- C89:
This program errors out in C 89 :P
到标准输出,然后除以零 - C99:
This program errors out in C 99 :P
到标准输出,然后分段错误
请注意,版本号应始终与语言名称用空格分隔。
Python 2.7.9和Python 2.7.10
- Python 2.7.9:
This program errors out in Python 2.7.9 :P
到stdout,然后在eval上出现语法错误 - Python 2.7.10:
This program errors out in Python 2.7.10 :P
输出到stdout,然后在dict上出现键错误
Perl和Perl -n
- Perl:
This program errors out in Perl :P
到stdout,然后无效的时间格式 - Perl
-n
:This program errors out in Perl -n :P
到stdout,然后尝试打开一个不存在的文件
获奖条件
这是code-golf,因此以字节为单位的最短代码获胜。但是,总是鼓励您发布一个有趣或有趣的答案,即使答案不是很短。
This program errors out in ...
包含制表符/空格而不是空格?