标签: brainfuck

RPython以外的选项用于编写带JIT的解释器?

我对PyPy项目非常感兴趣,但对于下面列出的第一个(但不太知名)的目的:

  • 一套用于为解释语言实现解释器的工具
  • 使用此工具链实现Python

在以下博文中,http://morepypy.blogspot.com/2011/04/tutorial-writing-interpreter-with-pypy.htmlhttp://morepypy.blogspot.com/2011/04/tutorial-part -2-adding-jit.html有关于如何使用RPython实现脑力叉解释器的详细教程,并添加了一个JIT.

但是我在其他地方读过RPython可能很麻烦 - 为动态类型创建的语法突然限制为推断的静态类型导致难以理解的编译错误.

所以我的问题是,是否有任何其他项目可以让你像上面的教程一样编写脑力翻译/ JIT?或者PyPy是这么简单的唯一选择吗?

(旁白):如果存在,一般来说RPython有什么意义?是否只是为了表明Python的子集可以是类型安全的,并且在该子集中实现了Python?在现有的翻译创建工具中做"PyPy"会更有意义吗?

pypy brainfuck rpython

7
推荐指数
1
解决办法
723
查看次数

如果我在Haskell/GHC中使用未装箱的类型(如Int#),我应该注意哪些事项?

我正在尝试编写一个解析和执行Brainfuck代码的小脚本,以了解GHC的优化选项,我正在尝试优化代码以便更快一些并了解正在发生的事情.

在部分是BF代码的内部represantation,我使用一个特殊的数据类型.这是源代码,包括正在进行转换的两个函数:

data BFinstruction
  = AdjustValue Int
  | MovePointer Int
  | GetChar
  | PutChar
  | Loop BFcode
  deriving (Eq)

type BFcode = [BFinstruction]

unsafeCompileBrainfuck :: String -> BFcode
unsafeCompileBrainfuck = fst . parse [] where
  -- arguments: input string, built code; output: output code, rest of input
  parse :: BFcode -> String -> (BFcode,String)
  parse c ('+':s) = parse (AdjustValue   1 :c) s
  parse c ('-':s) = parse (AdjustValue (-1):c) s
  parse c ('>':s) = parse (MovePointer   1 :c) s …
Run Code Online (Sandbox Code Playgroud)

optimization unboxing haskell ghc brainfuck

6
推荐指数
1
解决办法
268
查看次数

Brainfuck简单程序的来源?

有没有一个来源,我可以为brainfuck编程语言获得多个简单的程序,如加法,阶乘,斐波纳契和其他?

我知道此前发布了一个问题:https://stackoverflow.com/questions/3554670/tutorials-for-brainfuck

但我希望有一个简单的程序列表,简短的程序,以熟悉该语言.欢迎任何帮助.谢谢.

resources brainfuck

6
推荐指数
1
解决办法
1万
查看次数

Brainfuck中的无限计数循环

作为我的brainf*ck实现的调试器/测试程序,我创建了以下计数循环:

+[[>+]+]
Run Code Online (Sandbox Code Playgroud)

使用单字节,包装单元格和带有环绕的30k单元格,这将创建一个无限计数循环.它将每个单元格设置为1,然后将每个单元格设置为2,等等.

我的问题是,当它达到255时,内部循环将单元格递增为0,然后外部循环立即将其递增为1.当它溢出时,它就像一个"双步",而不是一步.这是我可以通过这个紧凑的程序让循环无限继续的唯一方法.

每个单元格的计数 0 -> 1 -> 2 ... 254 -> 255 -> 1 ...

虽然我希望它去 0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...

当前单元格为零时,很难继续循环.我玩过相同主题的变体,但没有一个能够恰到好处.

这个特殊的程序只是一个简单的测试计数程序,但是对我未来的程序真正有用的是知道如何反转循环条件,就像我需要使这个计数循环工作一样.

esoteric-languages brainfuck

6
推荐指数
1
解决办法
1481
查看次数

图灵完整语言中最小的编译器可能吗?

Brainfuck以其极小的编译器而闻名.我有一个非常小的设备,可能无法适应其数据中最小的脑圈编译器.是否有一种深奥的编程语言甚至比brainfuck更小的编译器并且是一种图灵完整的语言? 这已经老了,但是请随时提出自己的答案,我会检查

compiler-construction esoteric-languages brainfuck

6
推荐指数
1
解决办法
1433
查看次数

在Brainfuck中制作if(x == y)语句

所以我正在研究一个读取文件然后再将其输出的程序,但是我无法让程序在文件末尾停止输入.我希望它停在特定的字符,如'0'或'$'或任何真正的因为一个字符NULL无法读入我的brainf解释器.这是迄今为止的代码:

>+[>,][<.]
Run Code Online (Sandbox Code Playgroud)

问题始于此,[>,]因为输入永远不会为NULL,此循环永远不会结束.

那么如何插入if语句,如果它到达预先指定的结束字符,它将终止此循环?

if-statement esoteric-languages brainfuck

6
推荐指数
1
解决办法
2196
查看次数

在Brainfuck中多次打印文本

我在Brainfuck尝试了这个hello world程序.如何多次打印文本?这是我的代码:

+++++++[>++++++++++ <- ] >++.>++++++[>++++++++++ <- ] >+++++++++.>+++++++[>++++++++++ <- ] >++++++..>+++++++[>++++++++++ <- ] >+++++++++.>+++[>++++++++++ <-]>++. >++++++++[>++++++++++<-]>+++++++.>+++++++[>++++++++++<-] >+++++++++.>++++++++[>++++++++++ <-]>++.>+++++++[>++++++++++ <- ] >++++++.>++++++[>++++++++++ <-]>++++++++.>+++[>++++++++++<-]>++.>+++[>++++++++++<-]>+++.>+++[>++++++++++<-]>+++.
Run Code Online (Sandbox Code Playgroud)

loops brainfuck

6
推荐指数
1
解决办法
525
查看次数

你好,世界!在Brainfuck

以下代码片段来自维基百科,是标准的Hello World的序言!在Brainfuck的程序...

1. +++++ +++++             initialize counter (cell #0) to 10
2. [                       use loop to set the next four cells to 70/100/30/10
3.    > +++++ ++              add  7 to cell #1
4.    > +++++ +++++           add 10 to cell #2 
5.    > +++                   add  3 to cell #3
6.    > +                     add  1 to cell #4
7.    <<<< -                  decrement counter (cell #0)
8. ]
Run Code Online (Sandbox Code Playgroud)

我理解这里发生的事情的要点,但我不明白的是第3到第6行发生的事情的机制.如果+++++ +++++在值中a[0]加10 ,为什么将指针递增1并执行++*ptr7次会导致a[1]等于70?不应该a[1] = 7 …

brainfuck

5
推荐指数
1
解决办法
2518
查看次数

如何检查 Brainf*ck 中的两个细胞是否相等?

如何检查单元格 #0 中的值是否等于单元格 #1 中的值?我正在尝试编写相当于以下内容的代码:

if(a == b)
{
    //do stuff
}
else
{
    //do something else
}
Run Code Online (Sandbox Code Playgroud)

我读过Brainfuck 比较 2 个数字大于或小于,第二个答案让我大致了解了我需要做什么,但我无法弄清楚。(该解决方案给出if a < b, else。)

我想我需要做一些事情来减少这两个值,如果它们同时达到 0,那么它们就是真的。但每次我想到这个问题时,我总是被困在同一个出口点。

如何检查 Brainfuck 中两个细胞是否相等?

if-statement equality brainfuck conditional-statements

5
推荐指数
1
解决办法
1547
查看次数

如何在 Brainfuck 中编写 if else 语句

我刚刚发现了一种编程语言,叫做 Brainfuck。

我的问题是如何在 Brainfuck 中编写 if-else 语句?

是通过比较两个单元格来完成的吗?如果是,那么我如何比较这个程序中的两个单元格?

谢谢

if-statement brainfuck

5
推荐指数
1
解决办法
4993
查看次数