这几个难到令人发指的编程语言,学会了算我输

科技   2024-11-18 07:33   陕西  
如果你认为学习 C、C++ 或 Java 这些编程语言很难,那只能说太年轻了,这个世界上还存在着很多入门即放弃的编程语言。


1、Malbolge

Malbolge是一种深奥编程语言(esoteric programming language),由 Ben Olmstead 在 1998年设计,被认为是世界上最难理解和编写的编程语言之一。

Malbolge 语言采用三进制系统,只有三个操作符,并且代码在运行时会自我修复,这使得它非常难以理解和调试。

Malbolge 的执行过程具有随机性,每次运行都可能产生不同的结果。

Malbolge 被认为是“来自地狱的编程语言”。

以下为 Malbolge 程序输出 “Hello,world” 的代码:

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc


2、INTERCAL

INTERCAL 全称为 “Compiler Language With No Pronounceable Acronym”,是一种故意设计得难以理解和使用的编程语言

INTERCAL 语言由唐·伍兹(Don Woods)和詹姆斯·M·里昂(James M. Lyon)在 1972 年于普林斯顿大学创造。

INTERCAL 的创造初衷是为了讽刺当时存在的各种编程语言,以及 20 世纪 60 年代提出的语言结构和符号

以下为 INTERCAL 程序输出“Hello,world”的代码。

DO ,1 <- #13PLEASE DO ,1 SUB #1 <- #238DO ,1 SUB #2 <- #108DO ,1 SUB #3 <- #112DO ,1 SUB #4 <- #0DO ,1 SUB #5 <- #64DO ,1 SUB #6 <- #194DO ,1 SUB #7 <- #48PLEASE DO ,1 SUB #8 <- #22DO ,1 SUB #9 <- #248DO ,1 SUB #10 <- #168DO ,1 SUB #11 <- #24DO ,1 SUB #12 <- #16DO ,1 SUB #13 <- #162PLEASE READOUT ,1PLEASE GIVE UP

3、Brainfuck

Brainfuck 是一种极简编程语言,由 Urban Müller 在 1993 年设计,初衷是创建一种尽可能小但又 Turing 完备的编程语言。

Brainfuck只有 8 个基本命令,尽管它的命令少而简单,但能完成所有计算任务,这也让 Brainfuck 成为了编程语言中极简主义的代表。

Brainfuck 通过操作一个字节数组(通常为 30,000 个元素)来进行编程,这些命令主要包括:

  • >:指针右移一位

  • <:指针左移一位

  • +:当前指针指向的内存单元加 1

  • -:当前指针指向的内存单元减 1

  • .:输出当前指针指向的单元内容(通常输出为 ASCII 字符)

  • ,:从输入读取一个字符,存入当前指针指向的单元

  • [:如果当前单元值为 0,跳转到对应的 ]

  • ]:如果当前单元值不为 0,跳回到对应的 [

以下为 Brainfuck 程序输出 “Hello,world” 的代码:

++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

4、COW

COW 由 Sean Heber 于 2003 年设计。

COW 的特别之处在于仅使用 “moo” 作为指令核心,灵感来源于牛的叫声,十分符合恶搞和极简主义的风格。

COW 的设计目标显然不是实用性,而是娱乐性和挑战编程极限。

COW 的指令集总共包含 12 条指令,其中大多数都是由单词 “moo” 组合而成的变种:

  • moo:设置当前内存单元的值为 0。

  • mOo:将当前内存单元的值自增 1。

  • moO:将当前内存单元的值自减 1。

  • mOO:输出当前内存单元的 ASCII 值。

  • OOO:接收一个字符的输入并将其 ASCII 值存入当前单元。

  • Ooo:将指针右移到下一个内存单元。

  • oOo:将指针左移到上一个内存单元。

  • OOo:如果当前内存单元的值为 0,跳转到下一个 moo 指令。

  • MOO:程序终止。

以下为 COW 程序输出 “Hello,world” 的代码:

MoO MoO MoO MoO MoO MoO MoO MoO MOO moO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO mOo mOo mOo mOo mOo MOo moo moO moO moO moO Moo moO MOO mOo MoO moO MOo moo mOo MOo MOo MOo Moo MoO MoO  MoO MoO MoO MoO MoO Moo Moo MoO MoO MoO Moo MMM mOo mOo mOo MoO MoO MoO MoO Moo moO Moo MOO moO moO MOo mOo mOo MOo moo moO moO MoO  MoO MoO MoO MoO MoO MoO MoO Moo MMM MMM Moo MoO MoO MoO Moo MMM MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo mOo MoO Moo

 5、Whitespace

Whitespace 由 Edwin Brady 和 Chris Morris 于 2002 年设计发布。

Whitespace 的独特之处在于,所有的语法都是由空白字符组成,包括空格、制表符和换行符,而普通的可见字符会被忽略,也就是说在代码中,所有可见字符都被视为注释,而程序的核心逻辑完全由不可见字符控制。

Whitespace 的指令集中主要由以下几个部分组成,通过不同组合的空格(Space)、制表符(Tab)和换行符(LF)来表达:

  1. 堆栈操作:进行数据的入栈、出栈、复制和交换等操作。

  • 例如:[空格][空格] 表示将数值推入堆栈。

  • 算术运算:支持基本的加、减、乘、除、取模等运算。

    • 例如:[Tab][空格][加法] 表示对堆栈顶部的两个元素进行加法。

  • 堆栈访问:用于访问和修改堆栈中数据。

    • 例如:[Tab][换行][存储] 表示将值存储在特定位置。

  • 流控制:支持条件跳转、无条件跳转以及循环控制。

    • 例如:[空格][Tab][标记] 用于标记位置,以便之后跳转。

  • 输入输出:支持输入输出操作,包括读取字符、数字输入和输出等。

    • 例如:[Tab][空格][输出字符] 表示输出栈顶字符。

    在下面的代码中,每个空格、制表符或换行符前面分别有一个注释 “S”、T 或 “L”:

    S S S T  S S T  S S S LT  LS S S S S T  T  S S T  S T  LT  LS S S S S T  T  S T  T  S S LT  LS S S S S T  T  S T  T  S S LT  LS S S S S T  T  S T  T  T  T  LT  LS S S S S T  S T  T  S S LT  LS S S S S T  S S S S S LT  LS S S S S T  S T  S T  T  T  LT  LS S S S S T  T  S T  T  T  T  LT  LS S S S S T  T  T  S S T  S LT  LS S S S S T  T  S T  T  S S LT  LS S S S S T  T  S S T  S S LT  LS S S S S T  S S S S T  LT  LS S LLL

    6、wenyan

    文言文编程语言,严格遵循中国古典文学的语法和语调,此外,文言的字母只包含繁体汉字和「」引号,这语法对外国人来说应该是噩梦了。

    不过比起上面几个,wenyan 已经不算难了。

    开源地址:https://github.com/wenyan-lang/wenyan

    以下为 wenyan 程序输出 “Hello,world” 的代码:

    吾有一數。曰三。名之曰「甲」。為是「甲」遍。  吾有一言。曰「「問天地好在。」」。書之。云云。

    不过现在有 AI 小助手,我们很多常用的编程语言学起来简单不少


    良许Linux
    良许,自学转行IT并顺利进入500强外企担任Linux开发工程师。公众号分享大量Linux干货,包括Linux基础、Linux应用、Linux工具软件,以及Git、数据库、树莓派等方面技术知识(后台回复 Linux 获取必备Linux资源)
     最新文章