開發紀錄 Week4
 

作業要求 (B)

  • 改善 JIT compiler,加入若干 optimization techniques
  • 紀錄若干效能最佳化技巧帶來的提昇
  • 建立新的 Hackpad,列在「+作業區
  • 標注「開發紀錄(B)」
 

Brainfuck

參考:課程
Brainfuck instruction
Brainfuck
C
Description
>
++p
Increment the data pointer to point to the next cell
<
--p
Decrement the data pinter to point to the precious cell
+
++*p
Increment the byte value at the data pointer
-
--*p
Decrement the byte value at the data pointer
.
putchar(*p)
Output the byte value at the data pointer
,
*p = getchar(*p)
Input one byte and store its value at the data pointer
[
while(*p) {
If the byte value at the data pointer is zero.jump to the instruction following the matching ] bracket.Otherwise,continue execution.
]
}
Unconditionally jump back to the matching [ bracket
 
  • 利用interpreter執行hello.b
 
                            Print:Hello World!
         
                                           H   e   l   l  o   
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.++++++..+++.>++.
       W            o     r      l      d ! 
<<+++++++++++++++.>+++.------.--------.>+.>.
 
  • 嘗試仿造範例hello,b也印出一段字來熟悉用法
ex:                       G    o    o     d          J    o    b    s
ASCII number[71 111 111 100 32 74 111 98 115]
   10個+      7個+     11個+        10個+  3個+   跑完10次後=>Address  0   1    2    3    4 
++++++++++[>+++++++>+++++++++++>++++++++++>+++><<<<-]        value   0   70  110  100   30
得到要印的字差不多位置的value,開始做調整,以下就先列出Good
1.">++."[70+2 = 72]  =>  G            2.">+."[110+1 = 111]  => o      3."."=>同一位置再輸出=> o 
Address  0   1    2    3    4          Address  0   1    2    3    4
value   0   72  110  100   30          value   0   72  111  100   30
             ^                                           ^
             
4.">"[100]  =>  d  剛好ASCII碼為100,所以向右移一位就好    5.">++" [30+2=32] =>" "←空白 
Address  0   1    2    3    4                            Address  0   1    2    3    4
value   0   72  110  100   30                            value   0   72  110  100   32 
                       ^                                                             ^
 
Interpreter,Compiler,JIT
Interpreter(直譯器) : wiki