
ããã«ã¡ã¯ãHabrïŒ ç§ã®ååã¯Marko Kevacã§ããç§ã¯
PlatformããŒã ã®Badooã·ã¹ãã ããã°ã©ãã§ãããGoã倧奜ãã§ãã ããã2ã€ã®ããšãäžç·ã«è¿œå ãããšãGoã®ã¢ã»ã³ãã©ãŒãã©ãã ã奜ãããç解ã§ããŸãã
ããæè¿ãç§ãã¡ã¯Habréã§ãç§ãã¡ã蚪ããäŒè°ã«ã€ããŠè©±ããŸããã ãããã®1ã€ã¯
GopherCon 2016ã§ãã»ãšãã©ãã¹ãŠã®äººãGo-shnyã¢ã»ã³ãã©ãŒã«é¢ããRob
"Commander" Pikeã®
話ãèŠããŠããŸã ã èšäºãšããŠãã¶ã€ã³ããã圌ã®ã¬ããŒãã®ç¿»èš³ããèŠãããŸãã ç§ã¯ããŠã£ãããã£ã¢ã®é¢é£èšäºãžã®å¯èœãªéãå€ãã®ãªã³ã¯ãããã¹ãã§æäŸããããšããŸããã
ã¢ã»ã³ãã©ãŒïŒ ããã¯ãã³ã¢ã¹ã®ãããªå€ä»£ã®ãã®ã§ãïŒ
Rob PikeãGopherCon 2016ã§åºæŒãããããé¡ãããŸãïŒ ããã¯ãé·å¹Žã«ããã
ã¢ã»ã³ããªèšèªã«é¢ããå ±åæžã«å¯Ÿããæãç±å¿ãªåçã§ãã ããªãã¯å°ãããããããŸããïŒãªãã¢ã»ã³ãã©ãŒã«ã€ããŠè©±ãå¿
èŠãããã®ã§ãã çç±ã¯ãããŸãããããã«ã€ããŠã¯åŸã§ã ãŸããã¢ã»ã³ããªèšèªãã©ã®ãããªèå³ãæã£ãŠããããå°ããããšãã§ããŸãã
1970幎ã«æ»ã£ãŠãIBMããã¥ã¢ã«ãèŠãŠã¿ãŸãããããæãéèŠãªããšã¯ãã¢ã»ã³ãã©ãŒèšèªã®æ¬¡ã®æ©èœãç解ããããšã§ããããã°ã©ããŒã¯ãSystem / 360ãã·ã³ã³ãŒãã¬ãã«ã§ããã°ã©ãã³ã°ããŠããããã«
System / 360ã³ã³ãã¥ãŒã¿ãŒã®ãã¹ãŠã®æ©èœã䜿çšã§ããŸãã
å€ãã®ç¹ã§ããããã®èšèã¯æ代é
ãã§ãããåºæ¬çãªèãæ¹ã¯äŸç¶ãšããŠçå®ã§ããã¢ã»ã³ãã©ãŒã¯ãæãåºæ¬çãªã¬ãã«ã§ã³ã³ãã¥ãŒã¿ãŒãšå¯Ÿè©±ããæ¹æ³ã§ãã å®éãä»æ¥ã§ãã¢ã»ã³ããªèšèªãå¿
èŠã§ãã ã¢ã»ã³ãã©ãŒã ããããã°ã©ããŒã«ä»»ããããŠããæ代ããããŸããã
ãã®åŸãããããé«ã¬ãã«èšèªãããšãã°
Fortranã
Kobolãç»å ŽããŸããããããã¯ãã£ãããšãããã確å®ã«ã¢ã»ã³ãã©ã«åã£ãŠä»£ãããŸããã ãã°ããã®éã
Cèšèªã§ããã¢ã»ã³ãã©ãŒãšæ¯èŒããŠé«ã¬ãã«ãšèŠãªãããŠããŸããã ããããã¢ã»ã³ãã©ãŒã®å¿
èŠæ§ã¯ä»æ¥ãæ®ã£ãŠããŸããã¢ã»ã³ãã©ãŒãæäŸããã³ã³ãã¥ãŒã¿ãŒãžã®ã¢ã¯ã»ã¹ã¬ãã«ã®ããã§ãã
ã¢ã»ã³ãã©ãŒã¯ãç°å¢ã®åæããŒãã
ã¹ã¿ãã¯ã®åäœã
ã³ã³ããã¹ãã®åãæ¿ãã«å¿
èŠã§ãã ã¡ãªã¿ã«ãGoã§ã¯ããŽã«ãŒãã³éã®åãæ¿ããã¢ã»ã³ãã©ã§
å®è£
ãããŠããŸãã ãŸããããã©ãŒãã³ã¹ã®åé¡ããããŸããã³ã³ãã€ã©ã®çµæãããå¹ççã«åäœããã³ãŒããæåã§äœæã§ããå ŽåããããŸãã ããšãã°ãGoæšæºã©ã€ãã©ãªã®
æ°åŠ/倧ããªããã±ãŒãžã®
倧éšåã¯ã¢ã»ã³ãã©ã§èšè¿°ãããŠããŸããã³ã³ãã€ã©ããã€ãã¹ããŠããããããåªãããã®ãå®è£
ãããšããã®ã©ã€ãã©ãªã®åºæ¬çãªæé ãã¯ããã«å¹ççã«ãªãããã§ãã ã¢ã»ã³ãã©ãŒã¯ãæ°ããçããããã€ã¹æ©èœããé«æ°Žæºèšèªã§ã¯äœ¿çšã§ããªãæ©èœïŒææ°ã®ããã»ããµãŒã®æ°ããæå·å
åœä»€ãªã©ïŒãæäœããããã«å¿
èŠã«ãªãå ŽåããããŸãã
ããããç§ã«ãšã£ãŠãã¢ã»ã³ããªèšèªã§æãéèŠãªããšã¯ãå€ãã®äººãã³ã³ãã¥ãŒã¿ãŒã«ã€ããŠããã«ã€ããŠèããããšã§ãã ã¢ã»ã³ããªèšèªã¯ãã³ã³ãã¥ãŒã¿ãŒæäœã®ååã§ããäžé£ã®åœä»€ã®ã¢ã€ãã¢ãæäŸããŸãã ã¢ã»ã³ãã©ãŒã§ããã°ã©ã ãäœæããªãå Žåã§ãïŒããã«ã¯äœããªãããšãé¡ã£ãŠããŸãïŒãã³ã³ãã¥ãŒã¿ãŒã®åäœãç解ããããã ãã«ã¢ã»ã³ãã©ãŒã«ç²ŸéããŠããå¿
èŠããããŸãã ãã ããã¢ã»ã³ããªèšèªèªäœã«ããŸã泚æãæãããšã¯ãããŸãããããã¯ç§ã®ã¬ããŒãã®èãæ¹ãšäžèŽããŠããŸãã
å€ãã®ç°ãªãã¢ã»ã³ãã©ãŒ
ããªãã®å€ãã¯ãã¢ã»ã³ããªèšèªã«ããŸã詳ãããããŸããã ãããã£ãŠã幎代é ãé å®ããããšããŠãããã€ãã®äŸãæããŸãã
IBMã·ã¹ãã / 3601 PRINT NOGEN 2 STOCK1 START 0 3 BEGIN BALR 11,0 4 USING *,11 5 MVC NEWOH,OLDOH 6 AP NEWOH,RECPT 7 AP NEWOH,ISSUE 8 EOJ 11 OLDOH DC PL4'9' 12 RECPT DC PL4'4' 13 ISSUE DC PL4'6' 14 NEWOH DS PL4 15 END BEGIN
ããã¯IBM System / 360ã¢ã»ã³ãã©ãŒã§ãã åŒçšãæåã«ãã£ãã®ã¯ãã®ã³ã³ãã¥ãŒã¿ãŒã«ã€ããŠã§ããã æå³ã«æ³šæãæãã®ã§ã¯ãªããèŠãŠãã ããã
ãããŠãããã¯
å
šäœåã瀺ãããšã§ãã
Apollo 11ã¬ã€ãã³ã¹ã³ã³ãã¥ãŒã¿ãŒ # TO ENTER A JOB REQUEST REQUIRING NO VAC AREA: COUNT 02/EXEC NOVAC INHINT AD FAKEPRET # LOC(MPAC +6) - LOC(QPRET) TS NEWPRIO # PRIORITY OF NEW JOB + NOVAC C(FIXLOC) EXTEND INDEX Q # Q WILL BE UNDISTURBED THROUGHOUT. DCA 0 # 2CADR OF JOB ENTERED. DXCH NEWLOC CAF EXECBANK XCH FBANK TS EXECTEM1 TCF NOVAC2 # ENTER EXECUTIVE BANK.
ããã¯ãApollo 11ãªã³ããŒãå¶åŸ¡ã³ã³ãã¥ãŒã¿ãŒçšã®ã¢ã»ã³ãã©ãŒã³ãŒãã§ãã 圌ã®ããã°ã©ã ã¯ãã¹ãŠå®å
šã«ã¢ã»ã³ãã©ãŒã§æžãããŠããŸãã ã¢ã»ã³ãã©ãŒã¯ç§ãã¡ãæã«è¡ãã®ãå©ããŠãããŸããã
PDP-10 TITLE COUNT A=1 ;Define a name for an accumulator. START: MOVSI A,-100 ;initialize loop counter. ;A contains -100,,0 LOOP: HRRZM A,TABLE(A) ;Use right half of A to index. AOBJN A,LOOP ;Add 1 to both halves (-77,,1 -76,,2 etc.) ;Jump if still negative. .VALUE ;Halt program. TABLE: BLOCK 100 ;Assemble space to fill up. END START ;End the assembly.
ããã¯PDP-10ã®ã¢ã»ã³ãã©ãŒã§ãããä»ã®äŸãšæ¯èŒãããšéåžžã«ã³ã¡ã³ããããŠããŸãã
PDP-11 / a3 -- pdp-11 assembler pass 1 assem: jsr pc,readop jsr pc,checkeos br ealoop tst ifflg beq 3f cmp r4,$200 blos assem cmpb (r4),$21 /if bne 2f inc ifflg 2: cmpb (r4),$22 /endif bne assem dec ifflg br assem
ããã¯PDP-11ã®ã¹ããããã§ãã ããã«ãããã¯Unix v6ã®ã¢ã»ã³ãã©ãŒçšã®ã³ãŒãã§ã-ãã¡ãããã¢ã»ã³ãã©ãŒã§æžãããŠããŸãã Cèšèªã¯åŸã§äœ¿çšããå§ããŸããã
ã¢ãããŒã©68000 strtolower public link a6,#0 ;Set up stack frame movea 8(a6),a0 ;A0 = src, from stack movea 12(a6),a1 ;A1 = dst, from stack loop move.b (a0)+,d0 ;Load D0 from (src) cmpi #'A',d0 ;If D0 < 'A', blo copy ;skip cmpi #'Z',d0 ;If D0 > 'Z', bhi copy ;skip addi #'a'-'A',d0 ;D0 = lowercase(D0) copy move.b d0,(a1)+ ;Store D0 to (dst) bne loop ;Repeat while D0 <> NUL unlk a6 ;Restore stack frame rts ;Return end
Cray-1 ident slice V6 0 ; initialize S A4 S0 ; initialize *x A5 S1 ; initialize *y A3 S2 ; initialize i loop S0 A3 JSZ exit ; if S0 == 0 goto exit VL A3 ; set vector length V11 ,A4,1 ; load slice of x[i], stride 1 V12 ,A5,1 ; load slice of y[i], stride 1 V13 V11 *F V12 ; slice of x[i] * y[i] V6 V6 +F V13 ; partial sum A14 VL ; get vector length of this iteration A4 A4 + A14 ; *x = *x + VL A5 A5 + A14 ; *y = *y + VL A3 A3 - A14 ; i = i - VL J loop exit
ããã¯ãMotorola 68000çšã®ã¢ã»ã³ãã©ãŒã§ãããCray-1çšã§ãã ç§ã¯ãã®äŸã奜ãã§ã;ããã¯ãããŒãã»ã°ãªãŒãŒããŒã®è«æããã§ãã ããããã¹ãŠå§ãŸã£ãæ¹æ³ãæãåºããŠãã ããã
RobertGriseméerãGopherCon 2015ã«åºæŒãããã¯ãã¹ãŠç°ãªãèšèªã§ããããšã«æ°ä»ããããããŸããããããã€ãã®ç¹ã§äŒŒãŠããŸããå
±éã®éåžžã«æ確ãªæ§é ãæã£ãŠããŸãã
説ææž subroutine header label: instruction operand... ; comment ...
ãªãã©ã³ã register literal constant address register indirection (register as address) ...
éåžžãã¢ã»ã³ãã©ãŒã»ããã°ã©ã ã¯åã«æžã蟌ãŸããŸããå·ŠåŽã«ã¯ã©ãã«ãããã次ã«åœä»€ããªãã©ã³ãããããŠæåŸã«å³åŽã«ã³ã¡ã³ãããããŸãã ãªãã©ã³ãã¯éåžžãã¬ãžã¹ã¿ãå®æ°ããŸãã¯ã¡ã¢ãªã¢ãã¬ã¹ã§ãããç°ãªãã¢ãŒããã¯ãã£ã«å¯ŸããŠæ§æçã«ã¯éåžžã«äŒŒãŠããŸãã äŸå€ããããŸãã Crayã®äŸã¯èæ¯ã«å¯ŸããŠéç«ã£ãŠããŸããå ç®ã³ãã³ãã¯ãç®è¡åŒã®ããã«+èšå·ãšããŠèšè¿°ãããŠããŸãã ããããæå³ã¯ã©ãã§ãåãã§ããããã¯è¿œå ã³ãã³ãã§ããããããã¯ã¬ãžã¹ã¿ã§ãã ã€ãŸããããã¯ãã¹ãŠå®éã«ã¯åãããšã§ãã
èšããããã°ãæã§ããç§ã®æ代ã§ãããããã»ããµãŒã¯çŸåšãšã»ãŒåãã§ããã åäŸããããŸããã詳现ã«æ³šæãæããªããã°ãå®éã«ã¯ã»ãšãã©ã®ããã»ããµïŒããã³Goãå®è¡ããããã¹ãŠã®ããã»ããµïŒã¯åããŸãŸã§ãã 詳现ã«è§Šããªãå Žåãèå³æ·±ãçµè«ã«éããããšãã§ããŸããããããã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã«ã€ããŠãå
±éã®ææ³ãäœæã§ããŸãã ãã®äºå®ãç解ããã®ã«çŽ30幎ããããŸããã
ã±ã³ã®çŽ æŽãããã¢ã€ãã¢
å·ŠãããããŒãã»ã°ãªã¹ã¡ã€ã€ãŒãããã»ãã€ã¯ãã±ã³ã»ãã³ããœã³1980幎代åã°é ãã±ã³ãã³ããœã³ãšç§ã¯éçºã«ã€ããŠèãå§ããããã
ãã©ã³9ã«å€ãããŸããã Kenã¯æ°ããCã³ã³ãã€ã©ãäœæããŸãããããã¯GoããŒã«ã®Cã³ã³ãã€ã©ã®åºç€ã圢æããæè¿ãŸã§äœ¿çšãããŠããŸããã
National 32000ããã»ããµã䜿çšããSequent察称ãã«ãããã»ããµã³ã³ãã¥ãŒã¿äžã«ãããŸããã ç§ã®æèŠã§ã¯ãããã¯éç©åè·¯ãšããŠåžè²©ãããŠããæåã®32ããããã€ã¯ãããã»ããµã§ããã ããããã±ã³ã¯1ã€ã®èå³æ·±ãããšãããŸãã-ãã人ã¯ãããç解ããŸããã§ããããããã¯éåžžã«éèŠã§ããããšãå€æããŸããã ããã¯äžè¬çã«ã±ã³ã®ç¹åŸŽçãªæ©èœã§ãã
ã³ã³ãã€ã©ã¯æ©æ¢°èªåœä»€ãçæããŸããã§ãã-æ¬äŒŒã³ãŒãã®ãããªãã®ãçæããŸããã 次ã«ã2çªç®ã®ããã°ã©ã ïŒå®éã«ã¯
ãªã³ã«ãŒ ïŒãã³ã³ãã€ã©ãŒã®çµæãååŸãããããã®ç䌌åœä»€ãå®éã®åœä»€ã«å€æããŸããã
åœä»€ã®ãããª
MOVW $0, var
ã¡ããã©ãªãå¯èœæ§ããããŸã
XORW R1, R1 STORE R1, var
æœè±¡çãªäŸãæããŸãã ããšãã°ãå€æ°ã«ãŒããèšå®ããMOVWåœä»€ããããŸãã ã³ã³ãã¥ãŒã¿ã§å®è¡ããããªã³ã«ã«ãã£ãŠçºè¡ãããã³ãŒãã¯ãããšãã°ãäž¡æ¹ã®ãªãã©ã³ããšããŠåãã¬ãžã¹ã¿ãæå®ãããŠããïŒã€ãŸããã¬ãžã¹ã¿å€ããªã»ããããïŒXORWåœä»€ãšããã®ã¬ãžã¹ã¿ã®å€ãå€æ°ã«å
¥ããSTOREã§æ§æãããŸãã 詳现ã«ã€ããŠã¯å¿é
ããªãã§ãã ãããããã§ã®ãã€ã³ãã¯ãã³ã³ãã¥ãŒã¿ãŒãå®è¡ããåœä»€ãã¢ã»ã³ãã©ãŒã§å
¥åãããã®ãšæ£ç¢ºã«äžèŽããªãå Žåããããšããããšã§ãã
ç䌌åœä»€ã«åºã¥ããŠå®éã®åœä»€ãã³ã³ãã€ã«ãããã®ããã»ã¹ã¯ãåœä»€éžæãšåŒã°ãããã®ã§ãã ç䌌åœä»€ã®ãã°ãããäŸã¯ãã±ã³ãRETãåŒã³åºããé¢æ°ããã®returnã¹ããŒãã¡ã³ãã§ãã 30幎åããåŒã°ããŠããŸããããã®å®è£
ã¯å®è¡ããã³ã³ãã¥ãŒã¿ãŒã«ãã£ãŠç°ãªããŸãã äžéšã®ã³ã³ãã¥ãŒã¿ãŒã®ããã¥ã¢ã«ã§ã¯RETãšåŒã°ããŠããŸãããå¥ã®ã³ã³ãã¥ãŒã¿ãŒã§ã¯ãã¬ãžã¹ã¿ãŒã«å«ãŸããã¢ãã¬ã¹ãžã®ç§»è¡ãç¹æ®ã¬ãžã¹ã¿ãŒã®ã¢ãã¬ã¹ãžã®ãªãã€ã¬ã¯ãããŸãã¯ãŸã£ããå¥ã®ããšãã§ããŸãã
ãããã£ãŠãã¢ã»ã³ãã©ã¯ãã³ã³ãã€ã©ãçæããç䌌åœä»€ãèšè¿°ããæ¹æ³ãšèŠãªãããšãã§ããŸãã ãã©ã³9ã®äžçã§ã¯ãä»ã®ã»ãšãã©ã®ã¢ãŒããã¯ãã£ãšã¯ç°ãªããã³ã³ãã€ã©ãŒã¯ã¢ã»ã³ãã©ãŒãå®è¡ããŸãããããŒã¿ã¯ãªã³ã«ãŒã«çŽæ¥è»¢éãããŸãã

ãã®çµæãããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã äžçªäžã®è¡ã¯ãåŸæ¥ã®ã¢ãŒããã¯ãã£ã«ã»ãŒå¯Ÿå¿ããŠããŸãã ç§ã®æèŠã§ã¯ãGCCã¯ä»æ¥ãšåãããã«æ©èœããŸãã ããã¯ã³ã³ãã€ã©ã§ãããé«ã¬ãã«ã®ã³ãŒããåãåããã¢ã»ã³ããªèšèªã³ãŒãã«å€æããŸãã ã¢ã»ã³ãã©ãŒã¯å®éã®åœä»€ãçæãããªã³ã«ãŒã¯åã
ã®ããŒãããªã³ã¯ããŠãã€ããªãäœæããŸãã äžã®2è¡ã¯ããã©ã³9ã®ç¶æ³ã瀺ããŠããŸããå®éãã¢ã»ã³ãã©ãŒã¯ååã«åå²ãããŠããŸããååã¯ã³ã³ãã€ã©ãŒã«æ®ãã2çªç®ã¯ãªã³ã«ãŒã®äžéšã«ãªããŸããã èµ€ãç·ã暪åãç¢å°ã¯ããã€ããªè¡šçŸã®ç䌌åœä»€ã®ã¹ããªãŒã ã§ãã Plan 9ã®ã¢ã»ã³ãã©ãŒã®ç®çã®1ã€ã¯ããªã³ã«ãŒãåŠçããç䌌åœä»€ã«å€æããããã¹ã圢åŒã®åœä»€ãäœæããæ©èœãæäŸããããšã§ãã
ã¢ã»ã³ãã©ãŒãŽãŒ
ãã®ç¶æ³ã¯ãå€ãã®äžä»£ã«ããã£ãŠç¶ããŠããŸãã ãŸããPlan 9ã¢ã»ã³ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããããããã¯ãã¢ãŒããã¯ãã£ããšã«ç¬èªã®
Yaccææ³ãæã€åå¥ã®Cããã°ã©ã ã§ããã ãããã¯ç¬ç¹ã®ã»ãããŸãã¯ããã±ãŒãžã圢æããŸãããããããã¯å¥åã®ç¬ç«ããŠæžãããããã°ã©ã ã§ããã 圌ãã¯å
±éã®ã³ãŒããæã£ãŠããŸããããå®å
šã§ã¯ãããŸãã...äžè¬çã«ããã¹ãŠãè€éã§ããã ãã®åŸãGoã衚瀺ããå§ããŸãã... 2007幎ã«... Goã³ã³ãã€ã©-8gãš6gããã®é¢çœãååã®ããã°ã©ã 矀ã«è¿œå ãããŸããã ãããŠã圌ãã¯åãã¢ãã«ã䜿çšããŸããã ãããã¯å³ã®äžå€®ã®ç·ã«å¯Ÿå¿ããŠããŸãã ãŸãããã®åé¢ã®å®è£
æ¹æ³ã¯ãå
éšGoããã€ã¹ã«å€ãã®å©ç¹ããããããŸããããä»æ¥ã¯è©³ãã説æããæéããããŸããã
ã©ã¹ã³ãã¯ã¹ãGopherCon 2015ã§ããã©ãŒãã³ã¹Go 1.3ã§ã¯ããã¹ãŠã®Cã³ãŒããåãé€ãããã¹ãŠãGoã®ã¿ã«å®è£
ãããã£ãã®ã§ãã ãã°ããæéãããããŸãã ããããGo 1.3ã®ãªãªãŒã¹ã§ã¯ããã®ããã»ã¹ãéå§ããŸããã ãã¹ãŠã¯ãRussïŒ
Russ Cox ïŒããªã³ã«ãŒã®å€§éšåãåãããããåé¢ãããšããäºå®ããå§ãŸããŸããã ãããliblinkã©ã€ãã©ãªã®åºçŸæ¹æ³ã§ããããã®ã»ãšãã©ã¯ããããåœä»€éžæã¢ã«ãŽãªãºã ã«ãã£ãŠå æãããŠããŸããã çŸåšããã®ã©ã€ãã©ãªã¯
objãšåŒã°ããŠããŸããããã®åŸã¯liblinkãšåŒã°ããŠããŸããã ã³ã³ãã€ã©ãŒã¯ããã®liblinkã©ã€ãã©ãªãŒã䜿çšããŠãç䌌åœä»€ãå®éã®åœä»€ã«å€æããŸããã ãã®æ±ºå®ãæ¯æããããã€ãã®è°è«ããããŸããã
ãããã®äžã§æãéèŠãªã®ã¯ãçµã¿ç«ãŠããã»ã¹ã®é«éåã§ãã ã³ã³ãã€ã©ã¯çŸåšããå€ãã®äœæ¥ãè¡ã£ãŠããŸãããä»ã§ã¯åœä»€ãéžæããŠããŸããããªã³ã«ã¯ãããå®è¡ããŠããŸããã ãã®ãããªããã€ã¹ã®ãããã§ã圌ã¯ãããåã©ã€ãã©ãªã«å¯ŸããŠ1åã ãå®è¡ããŠããŸãã 以åã¯ãããšãã°fmtããã±ãŒãžããã«ãããå¿
èŠãããå Žåã
æ¯åPrintfã®æ瀺ã®éžæãå床å®è¡ãããŠããŸããã æããã«ãããã¯æãã§ãã ããã§äžåºŠå®è¡ãããšããªã³ã«ãŒã¯ãããå®è¡ããå¿
èŠããªããªããŸãã ãã®çµæãã³ã³ãã€ã©ãŒã¯é
ããªããŸãããã¢ã»ã³ããªãŒå
šäœã¯éããªããŸãã ã¢ã»ã³ãã©ãåãæ¹æ³ã§æ§ç¯ã§ããobjã©ã€ãã©ãªã䜿çšã§ããŸãã
ãã®ã¹ããŒãžã®æãéèŠãªæ©èœã¯ããŠãŒã¶ãŒã«ãšã£ãŠäœãå€ãã£ãŠããªãããšã§ããå
¥åèšèªã¯åããŸãŸã§ãåºåã¯åããŸãŸã§ãããã§ãåããã€ããªãã¡ã€ã«ã§ããã詳现ã®ã¿ãç°ãªããŸãã å€ãã¢ãŒããã¯ãã£ã®äžè¬çãªæŠèŠã次ã«ç€ºããŸããã³ã³ãã€ã©ãã¢ã»ã³ãã©ããªã³ã«ã ãã©ã³9ã®äžçã§ã¯ããªã³ã«ãŒã¯ã³ã³ãã€ã©ãŒãŸãã¯ã¢ã»ã³ãã©ãŒã«ãã£ãŠå¶åŸ¡ãããŸãã
å€ãã¢ãŒããã¯ãã£ïŒ
æ°ããã¢ãŒããã¯ãã£ïŒ
ããŒãžã§ã³1.3ã§ã¯ããã®ãããªããã€ã¹ã«åãæ¿ããŸããã ã芧ã®ãšãããä»ã§ã¯ã¯ããã«äŒçµ±çãªãªã³ã«ããããŸãïŒåœä»€ã®éžæãå®è¡ããobjã©ã€ãã©ãªã¯ãªã³ã«ã®äžéšã§ã¯ãªããªããã³ã³ãã€ã©ãšã¢ã»ã³ãã©ã®æçµæ®µéã«ãªã£ããããå®éã®åœä»€ãåãåããŸãã ã€ãŸããããã»ã¹ã«ã¢ã»ã³ãã©ãŒãå«ãããšãã¢ã»ã³ãã©ãŒãšã³ã³ãã€ã©ãŒã¯å€ãã¹ããŒã ãšã®æŽåæ§ãåäžããŸãã
ãã®æ°ããGoã¢ã»ã³ãã©ã¯å¥åŠãªãã®ã§ãã åçŽã«äœããããŸããã 圌ã¯äœãããŠããŸããïŒ ç䌌åœä»€ã®ããã¹ãèšè¿°ããªã³ã«ã®å®éã®åœä»€ã«å€æããŸãã 1.5ã§ã¯ã倧ããªäžæ©ãèžã¿åºããŸãã-Cãåãé€ããŸããããã®ããã1.3ããã³1.4ã§å€ãã®æºåäœæ¥ãè¡ãããã®åé¡ã¯ãããã解決ãããŸããã Russã¯ãCã§äœæãããGoã³ã³ãã€ã©ãŒïŒããã³ãã¡ãªã¿ã«ãªã³ã«ãŒïŒã®å€ããœãŒã¹ã³ãŒããGoããã°ã©ã ã«å€æãããã©ã³ã¹ã¬ãŒã¿ãŒãäœæããŸããã
å€ãliblinkã©ã€ãã©ãªã¯ã©ã€ãã©ãªã»ããã«çµã¿èŸŒãŸããŠãããããã§ã¯ãŸãšããŠobjãšåŒã³ãŸãã ãã®çµæãobjãšåŒã°ãããã®ããããŸããããã¯ç§»æ€å¯èœãªéšåã§ãããåã¢ãŒããã¯ãã£ã®æ©èœã«é¢ããæ
å ±ãä¿åãããã·ã³äŸåã®éšåãæã€ãµããã£ã¬ã¯ããªã§ãã ããã€ãã®ã¬ããŒãããã®äœæ¥ã«åœãŠãããŠããŸããããèªäœã¯èå³æ·±ã話ã§ãã 2幎åãã©ã¹ã¯
GopherConã§
ãã¬ãŒã³ããŒã·ã§ã³ãè¡ã
ãŸãããã圌ã¯ãã§ã«ããªãæ代é
ãã§ãã å®éãç§ãã¡ã¯åœŒãåœæèšã£ãããšãæ£ç¢ºã«ã¯ããŸããã§ããã ãããŠãGopherFest 2015ã§ãããŒãžã§ã³1.5ã®å€æŽã®ããäžè¬çã§ããæ£ç¢ºãªæŠèŠã玹ä»ããŸããã
GOOS=darwin GOARCH=arm go tool compile prog.go
ã ããããã«ã ã³ã³ãã€ã©ã¯ã6gã8gãããã³ãã®ä»ã®å¥åŠãªååãšåŒã°ããŠããŸããã ããã¯ãã³ã³ãã€ã«ãšåŒã°ãã1ã€ã®ããã°ã©ã ã§ãã ã³ã³ãã€ã«ããŒã«ãå®è¡ããæšæºã®GOOSç°å¢å€æ°ïŒãgooseãããgooseããšçºé³ïŒããã³GOARCHïŒãgorchãããé
ã£ã±ãã£ããããŒã®è²ªæ¬²ãªç·ããšçºé³ïŒã®å€ãèšå®ããŠèª¿æŽããŸãããããååã®æ£åŒãªçºé³ã§ãã ãªã³ã«ã«ã€ããŠãåãããšãããŸããã ãªã³ã¯ããŒã«ããããGOOSãšGOARCHã®å€ãèšå®ããŸã-ããã°ã©ã ãã³ã³ãã€ã«ã§ããŸãã ã1ã€ã®ã³ã³ãã€ã©ã§ããããã¹ãŠã®ã¢ãŒããã¯ãã£ãã©ã®ããã«ãµããŒãã§ããŸããïŒã ã¯ãã¹ãã©ãããã©ãŒã ã®ã³ã³ãã€ã«ãéåžžã«é£ããããšã¯èª°ããç¥ã£ãŠããŸããã å®éããããã äºåã«ãã¹ãŠãæºåããå¿
èŠããããŸãã ããã«æ³šæããŠãã ãããå
¥åèšèªã¯Goã ãã§ãã ã³ã³ãã€ã©ã®èŠ³ç¹ããèŠããšãçµæãåãã§ãããã€ããªåœ¢åŒã®ç䌌åœä»€ãobjã©ã€ãã©ãªã«è»¢éãããŸãã ã€ãŸããããŒã«ã®èµ·åæã«å€æ°ã®å€ãèšå®ããã ãã§ãobjã©ã€ãã©ãªãæ§æããå¿
èŠããããŸãã ããªãã¯ããã«ãããè¡ãæ¹æ³ãåŠã³ãŸãã
ã¢ã»ã³ãã©ã«ã€ããŠã¯ãCããGoãžã®ã¢ã»ã³ãã©ã®æ©æ¢°ç¿»èš³ãå®è¡ããŸããããããã¯çæ³çãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããç§ã¯ããã奜ãã§ã¯ãããŸããã§ããã ç§ã¯GoããŒãããæžãããšããããããã¹ãŠã眮ãæããå¯äžã®ããã°ã©ã ãasmãææ¡ããŸããã ã»ããã¢ããã¯ãGOOSãšGOARCHãä»ããŠã®ã¿è¡ãããŸãã ã¢ã»ã³ããªèšèªãšGoã¯åããã®ã§ã¯ãªãããšã«æ°ä»ããããããŸããã åããã»ããµã«ã¯ãç¬èªã®åœä»€ã»ãããç¬èªã®ã¬ãžã¹ã¿ã»ããããããããã¯åäžã®åºåèšèªã§ã¯ãããŸããã ãããã©ãããŸããïŒ ããããå®éã«ã¯ããããã¯æ¬è³ªçã«åãã§ãã ã芧ãã ããã
package add func add(a, b int) int { return a + b }
以äžã¯ã2ã€ã®æŽæ°ãå ç®ããŠåèšãè¿ãç°¡åãªããã°ã©ã ã®äŸã§ãã -Sãã©ã°ã䜿çšããŠã¢ã»ã³ãã©ã³ãŒãã衚瀺ããå Žåã«ã³ã³ãã€ã©ãæäŸããæ¬äŒŒåœä»€ã¯è¡šç€ºããŸããã ãŸããå€ãã®äœåãªãã®ãåé€ããŸãã-ãã®æ¹æ³ã䜿çšãããšãå€ãã®äžèŠãªãã®ã衚瀺ãããŸããããã®æ®µéã§ã³ã³ãã€ã©ãŒã¯ãŸãã«ãã®ãããªç䌌åœä»€ãçæããŸãã
32ãããx86ïŒ386ïŒ TEXT add(SB), $0-12 MOVL a+4(FP), BX ADDL b+8(FP), BX MOVL BX, 12(FP) RET
64ãããx86ïŒamd64ïŒ TEXT add(SB), $0-24 MOVQ b+16(FP), AX MOVQ a+8(FP), CX ADDQ CX, AX MOVQ AX, 24(FP) RET
32ãããã¢ãŒã TEXT add(SB), $-4-12 MOVW a(FP), R0 MOVW b+4(FP), R1 ADD R1, R0 MOVW R0, 8(FP) RET
64ãããã¢ãŒã ïŒarm64ïŒ TEXT add(SB), $-8-24 MOVD a(FP), R0 MOVD b+8(FP), R1 ADD R1, R0 MOVD R0, 16(FP) RET
S390ïŒs390xïŒ TEXT add(SB), $0-24 MOVD a(FP), R1 MOVD b+8(FP), R2 ADD R2, R1, R1 MOVD R1, 16(FP) RET
32ãããã¢ãŒããã¯ãã£ã®ãªãã·ã§ã³ã次ã«ç€ºããŸãã 詳现ã«ã€ããŠã¯èããªãã§ãã ããã
å
šäœåãèŠãŠãã ããã 64ãããx86ã¢ãŒããã¯ãã£ã®çµæã¯ã
AMD64ãšãåŒã°ãã32ããã
ARMã¢ãŒããã¯ã㣠ã64ãããARMã¢ãŒããã¯ãã£ãããã³IBM System / 390ã¢ãŒããã¯ãã£ã®çµæã§ãã ç§ãã¡ã«ãšã£ãŠã¯æ°ãããã®ã§ãããä»ã®ãã¹ãŠã«ãšã£ãŠã¯æããã«ããã§ã¯ãããŸããã
64ãããMIPSïŒmips64ïŒ TEXT add(SB), $-8-24 MOVV a(FP), R1 MOVV b+8(FP), R2 ADDVU R2, R1 MOVV R1, 16(FP) RET
64ãããã®é»æºïŒppc64leïŒ TEXT add(SB), $0-24 MOVD a(FP), R2 MOVD b+8(FP), R3 ADD R3, R2 MOVD R2, 16(FP) RET
64ããã
MIPSã¢ãŒããã¯ãã£ã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã64ããã
POWERã¢ãŒããã¯ãã£ã¯æ¬¡ã®ãšããã§ãã 䌌ãŠããããšã«æ°ä»ããããããŸããã ãã®çç±ã¯ãå®éã«ã¯ããããããŸã£ããåãèšèªã§ããããã§ãã ãã®çç±ã®1ã€ã¯ããã®ããã«é
眮ãããŠããããšã§ããå®éãNational 32000ã¢ã»ã³ãã©ãŒã30幎é䜿çšãã䜿çšãããããŒããŠã§ã¢ã®ã¿ãå€æŽããŸããã ãããããããã®ããã€ãã¯æ¬åœã«åäžã ããã§ãã ãããã¯ãåœä»€ãã¬ãžã¹ã¿ããªãã©ã³ããå®æ°å€ãã©ãã«ã«ãããŸãã-ãã¹ãŠåãã§ãã å¯äžã®éèŠãªéãã¯ãåœä»€ãšã¬ãžã¹ã¿ã®ååãç°ãªãããšã§ãã ãªãã»ãããç°ãªãå ŽåããããŸãããæ©æ¢°èªã®ãµã€ãºã«ãã£ãŠç°ãªããŸãã
ããã¯ãã¹ãŠãKenãæžããNational 32000ã¢ã»ã³ãã©ãŒã«èŠçŽãããŠããŸãã ããã¯ãKenãæ³åããããã«ãææ°ã®PowerPCã«é©åããNational 32000ã¢ã»ã³ããªèšèªã§ãã ãããã£ãŠãå¿
èŠãªãã®ãã¹ãŠ-å
±éã®å
¥åèšèªãããã¯ãšã³ãã®objã©ã€ãã©ãª-ããããã¢ã»ã³ãã©ãŒã§èšè¿°ã§ããŸãã ãã®ã¢ãããŒãã§ã¯ãåé¡ãçºçããŸããNationalãŸãã¯PowerPCã®ãªãŒããŒã·ãããåããã¢ã»ã³ãã©ãŒèšèªãèŠããšããã®ããã«ã¯èŠããªãããšãããããŸãã ããã¬ãã«ã§ã¯å®éã«ã¯ç䌌åœä»€ã§ãããããæ§æã¯ç°ãªããåœä»€åãç°ãªãå ŽåããããŸãã å®éãåé¡ã§ã¯ãããŸããã
åå¿è
ã«ã¯ãGoã¢ã»ã³ãã©ãŒã®å€èŠ³ïŒããããã¹ãŠã®å€§æåãšå¥åŠãªãã®ïŒãæ·±å»ã«æ··ä¹±ããå¯èœæ§ããããŸãã ããããããããã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã«å
±éã®ã¢ã»ã³ããªèšèªãããããã以äžã§èª¬æãããã°ãããçµæãåŸãããšãã§ããŸãã ãããã£ãŠãããã¯æ£åœãªåŠ¥åæ¡ã§ããããããéæããããšã¯ããã»ã©é£ãããªããšèããŠããŸãã 68000ããã³ã¢ã»ã³ãã©ãŒKenã§ããã°ã©ãã³ã°ããããšãåŠã¶äŸ¡å€ããããŸãããŸããPowerPCçšã®ããã°ã©ã ãèªåçã«äœæã§ããŸãã éãã¯äœã§ããïŒ
ã©ã®ããã«æ©èœããŸããïŒ ã¢ã»ã³ãã©ãŒããŒãžã§ã³1.5ã§ã¯ãã¢ã»ã³ãã©ãŒãçæ³çã ãšèããŠããŸãã 圌ã«ã³ã³ãã¥ãŒã¿ãŒãæž¡ããŠãã ãã-ãããŠåœŒã¯åœŒã®ããã«ã¢ã»ã³ãã©ãŒã翻蚳ããŸãã ããã¯å®å
šã«Goã§æžãããæ°ããããã°ã©ã ã§ãã äžè¬çãªã¬ãã·ã«ã«ã¢ãã©ã€ã¶ãŒãšæ§æã¢ãã©ã€ã¶ãŒããããå
¥åã³ãŒãããŠãŒã¶ãŒãæäŸãããã¹ãŠã®ãã®ãååŸããåœä»€ããã€ããªåœ¢åŒã®åœä»€ãèšè¿°ããããŒã¿æ§é ã«å€æããŠãããç¹å®ã®ãã©ãããã©ãŒã ã«é¢ããæ
å ±ãå«ãæ°ããobjã©ã€ãã©ãªã«çµæã転éããŸãã
ã¢ã»ã³ãã©ã®åºç€ãšãªãã³ãŒãã®ã»ãšãã©ã¯å®å
šã«ç§»æ€å¯èœã§ãããã¢ãŒããã¯ãã£ã«é¢ããèå³æ·±ãæ
å ±ã¯äœãå«ãŸããŠããŸããããã¬ãžã¹ã¿åã«é¢ããæ
å ±ãå«ãããŒãã«ããããŸãã ãªãã©ã³ãã®æäœã«é¢é£ãããã®ããŸã ããã€ããããŸãããéåžžã«ç°¡åã§ãã ãããŠããããã¯ãã¹ãŠãGOARCHå€æ°ã®å€ã«åŸã£ãŠããã°ã©ã ãéå§ããããšãã«æ§æãããŸãã GOOSã¯ãæãäžããªãéåžžã«ãŸããªã±ãŒã¹ã§äœ¿çšãããŸããäž»ãªç¹æ§ã¯GOARCHã«ãã£ãŠæ±ºå®ãããŸãã archãšåŒã°ããã¢ã»ã³ãã©çšã®å
éšããã±ãŒãžããããŸãããããã®ããŒãã«ã¯ãªã³ã¶ãã©ã€ã§äœæãããobjã©ã€ãã©ãªããåçã«æœåºãããŸãã ãããŠããããå®éã®ã³ãŒãã®ã¹ããããã§ãã
import ( "cmd/internal/obj" "cmd/internal/obj/x86" ) func archX86(linkArch *obj.LinkArch) *Arch { register := make(map[string]int16) // Create maps for easy lookup of instruction names etc. for i, s := range x86.Register { register[s] = int16(i + x86.REG_AL) } instructions := make(map[string]obj.As) for i, s := range obj.Anames { instructions[s] = x86.As(i) } return &Arch{ Instructions: instructions, Register: register, ... } }
å°ãç°¡ç¥åãããŠããŸãããæ¬è³ªãäŒããŠããŸãã ããã¯ãå
éšã¢ã»ã³ãã©ããã±ãŒãžã§ããarchã§ãã ããã¯ãx86ã¢ãŒããã¯ãã£çšã«ã¢ã»ã³ãã©å
šäœãæ§æããæé ã§ãã ãã®ã³ãŒãã¯ã32ããããš64ãããã®äž¡æ¹ã®ã¢ãŒããã¯ãã£ã§äœ¿çšãããŸããããã®èŠ³ç¹ããã¯åäžã§ãã ãããŠãã«ãŒããéå§ããŸã... objããã·ãŒãžã£çšã«x86ããã±ãŒãžã§å®çŸ©ãããobjã©ã€ãã©ãªããã¬ãžã¹ã¿åãå埩åŠçããã«ãŒãã ãããŠãobjããã®ããŒã¿ã«åŸã£ãŠã¬ãžã¹ã¿åãšãã€ããªã«äžèŽããããããèšå®ããã ãã§ãã ãããŠãæ瀺ã«ã€ããŠãåãããšãè¡ããŸãã
ãããã®ã³ãŒãã¯å®éã«ã¯åœä»€ã³ãŒãã§ã¯ãªããããã¥ã¢ã«ã«ã¯èšèŒãããŠããŸããã ããã¯ãã¹ãŠã®ãã®ã®æåéãã¢ã«ãã¡ãããé ã®ãªã¹ãã§ã-ãããã¯åãªãåœä»€ã§ãããå®éã®ã³ãã³ãã§ã¯ãªãããšãç¹°ãè¿ããŸãã ããããä»ã§ã¯ãã¹ãŠã®ã¬ãžã¹ã¿ã®ååãšãã¹ãŠã®åœä»€ãããã£ãŠããŸãã ãããŠãè¿ãã¢ãŒããã¯ãã£ã®èª¬æã«ã¯ããããã®2ã€ã®ãããã®ã¿ãå«ãŸããŸãã ããã«ããªããç¥ã£ãŠããåœä»€ã®ååãããã«ããªããç¥ã£ãŠããã¬ãžã¹ã¿ã®ååããããŠç§ãèšåããŠããªãããã€ãã®äºæããããŸããããã¹ãŠã¯ããã§ãšãŠãç°¡åã§ãã ããã¯ãã¢ã»ã³ããªèšèªããããã®ã³ã³ãã¥ãŒã¿ãŒã®æ瀺ã«å€æããããã«å¿
èŠãªãã¹ãŠã®æ
å ±ã§ãã
å®éãããŒãµãŒã¯åã«æååã®ãããã³ã°ãè¡ã£ãŠæ£ããåœä»€ãèŠã€ããŸããå1ã«ãããåèªãå«ãŸããŠããŸããããã¯åœä»€ã§ããåœä»€ããŒãã«ã§æ¢ããŠããŸãããšãŠãç°¡åã§ãã
ADDW AX, BX &obj.Prog{ As: arch.Instructions["ADDW"], From: obj.Addr{Reg: arch.Register["AX"]}, To: obj.Addr{Reg: arch.Register["BX"]}, ... }
以äžã«äŸã瀺ããŸãã « » (ADDW) 386, . : ADDW AX, BX. , . , , â , , ADDW . A â , . , . â AX, BX. , , : , , obj. , . , , â . .
, , . . , , , ⊠, , , . ããã¯åé¡ã§ã¯ãããŸããã
, obj. : , , obj, , , obj , . , obj , . .
, , , , . . , , , ⊠obj , , . , , , . . , , . ããã¯ãäžè¬ã«ããã¹ãŠã§ãã A/B- â . .
386, â AMD64. , . , PowerPC, â . , , , . , obj, .
-, . , Go, Yacc. , . . Go, , . , , , . , . , . . . . .
, , , , , open-source-. Git , , , , , . ããã¯çŽ æŽãããã -, . , open-source- .
, , , , obj . ? . , , ⊠â , pprof, â -, , , , , . , PDF , . , , â ? . , . . , .
â , . . . . , , . , PDF , â . .
, , , , .
ãããã«
. , , . , . , , . , , . , . â , . â , â . , , , .
Go. ããããšã