ããšã Go ããŒãã¢ãã 2018 幎 XNUMX æ:
ã¢ãã¬ãŒã¿ãŒïŒ - ããã«ã¡ã¯ãã¿ããªïŒ ããã«ããŠãããŠããããšãïŒ ä»æ¥ã¯ãLyosha ãš Vanya ãšãã XNUMX 人ã®å
¬åŒã¹ããŒã«ãŒãç»å ŽããŸãã æéãããã°ããšXNUMXã€ãããŸãã æåã®è¬æŒè
㯠Alexey Grachev ã§ãGopherJS ã«ã€ããŠèª¬æããŸãã
ã¢ã¬ã¯ã»ã€ã»ã°ã©ãã§ãïŒä»¥äžãAGïŒïŒ â ç§ã¯ Go éçºè ã§ãGo 㧠Web ãµãŒãã¹ãäœæããŠããŸãã ããã³ããšã³ãã«å¯ŸåŠããªããã°ãªããªãå Žåãããã°ããã³ãã«ãæã£ãŠããã«ç»ããªããã°ãªããªãå ŽåããããŸãã ããã³ããšã³ãã§ã® Go ã«é¢ããç§ã®çµéšãšç 究ã«ã€ããŠè©±ããããšæããŸãã
äŒèª¬ã¯æ¬¡ã®ãšããã§ãããŸããããã³ããšã³ã㧠Go ãå®è¡ãããçç±ã«ã€ããŠè©±ããŸãã次ã«ããããå®è¡ããæ¹æ³ã«ã€ããŠè©±ããŸãã Web ã¢ã»ã³ããªãš GopherJS ã® XNUMX ã€ã®æ¹æ³ããããŸãã ãããã®æ±ºå®ãã©ã®ãããªç¶æ
ã«ããã®ãããŸãäœãã§ããã®ããèŠãŠã¿ãŸãããã
ããã³ããšã³ãã®äœãåé¡ãªã®ã§ããããïŒ
ããã³ããšã³ãã¯åé¡ãªããšããããšã«èª°ããåæããŸãã?
ãã¹ããå°ãªãïŒ ãã«ããé
ãïŒ çæ
ç³»ïŒ å€§äžå€«ã
ããã³ããšã³ãã«é¢ããŠã¯ãããã³ããšã³ãéçºè ã®äžäººãèæžã§è¿°ã¹ã次ã®èšèãæ°ã«å ¥ã£ãŠããŸãã
JavaScript ã«ã¯åã·ã¹ãã ããããŸããã ããã§ãç§ãä»äºã®éçšã§ééããåé¡ãæããŠãããããã©ã®ããã«è§£æ±ºããããã説æããŸãã
äžè¬ã«ãåã·ã¹ãã ã Javascript ã§åã·ã¹ãã ãšåŒã¶ã®ã¯å°é£ã§ãããªããžã§ã¯ãã®åã瀺ãè¡ããããŸãããå®éã«ã¯ããã¯åãšã¯äœã®é¢ä¿ããããŸããã ãã®åé¡ã¯ãTypeScript (JavaScript ã®ã¢ããªã³) ãš Flow (JavaScript ã®åã®éçãã§ãã«ãŒ) ã§è§£æ±ºãããŸãã å®éãããã³ããšã³ã㯠Javascript ã®äžæ£ãªåã·ã¹ãã ã®åé¡ã解決ãããšãããŸã§ãã§ã«é²ãã§ããŸãã
ãã©ãŠã¶èªäœã«ã¯æšæºã©ã€ãã©ãªã¯ãããŸããããã©ãŠã¶ã«ã¯ããã€ãã®çµã¿èŸŒã¿ãªããžã§ã¯ããšãéæ³ã®ãé¢æ°ããããŸãã ããããJavaScript èªäœã«ã¯æšæºã©ã€ãã©ãªããããŸããã ãã®åé¡ã¯ãjQuery ã«ãã£ãŠãã§ã«è§£æ±ºãããŠããŸã (誰ãããåäœããå¿
èŠã®ãããã¹ãŠã®ãããã¿ã€ãããã«ããŒãé¢æ°ãšãšãã« jQuery ã䜿çšããŠããŸãã)ã ä»ã§ã¯èª°ãã Lodash ã䜿çšããŠããŸãã
ã³ãŒã«ããã¯å°çã 誰ãã 5 幎ã»ã©åã« Javascript ã³ãŒããèŠãããšããããšæããŸãããããã¯ä¿¡ããããªãã»ã©è€éãªã³ãŒã«ããã¯ãããªããããŒãã«ãã®ããã«èŠããŸããã çŸåšããã®åé¡ã¯ (ES-15 ãŸã㯠ES-16 ã®ãªãªãŒã¹ã«ãã) 解決ãããJavaScript ã« Promise ãè¿œå ããããã°ããã®éã¯èª°ãã楜ã«åŒåžã§ããããã«ãªããŸããã
Promice å°çãçŸãããŸã§ã¯... ããã³ããšã³ãæ¥çãã©ã®ããã«çµå¶ããŠããã®ãã¯ããããŸãããã圌ãã¯åžžã«ã©ããå¥åŠãªãžã£ã³ã°ã«ã«èªããè¿œã蟌ãã§ããŸãã ç§ãã¡ã¯ãçŽæããæãããŸããã 次ã«ãæ°ããããªããã£ã async / await ãè¿œå ããããšã§ãã®åé¡ã解決ããŸããã
éåæã䜿çšãããšãåé¡ã¯è§£æ±ºãããŸãã Async/await ã¯ãããŸããŸãªèšèªã§éåžžã«äººæ°ã®ããããªããã£ãã§ãã Python ãªã©ã«ã¯ãã®ã¢ãããŒãããããããã§ååã§ãã åé¡ã解決ããŸããã
解決ãããŠããªãåé¡ã¯äœã§ãã? ãã¬ãŒã ã¯ãŒã¯ã®è€éãããšã³ã·ã¹ãã ãšããã°ã©ã èªäœã®è€éãã¯ææ°é¢æ°çã«å¢å ããŠããŸãã
- Javascript ã®æ§æã¯å°ãå¥åŠã§ãã é åãšãªããžã§ã¯ãã®è¿œå ããã®ä»ã®ããªãã¯ã«é¢ããåé¡ã¯èª°ããç¥ã£ãŠããŸãã
- JavaScript ã¯ãã«ããã©ãã€ã ã§ãã ãšã³ã·ã¹ãã ãéåžžã«å€§èŠæš¡ãªå Žåãããã¯ç¹ã«å·®ãè¿«ã£ãã·ã¹ãã ã«ãªããŸãã
- 誰ããç°ãªãã¹ã¿ã€ã«ã§æžããŸããæ§é çã«æžã人ãæ©èœçã«æžã人ãéçºè ããšã«æžãæ¹ãç°ãªããŸãã
- ç°ãªãããã±ãŒãž (ããã±ãŒãž) ãããç°ãªãããã±ãŒãžã䜿çšããå Žåã¯ç°ãªããã©ãã€ã ã
- Javascript ã®é¢æ°åããã°ã©ãã³ã°ã«ã¯ããããã®ã楜ãã¿ãããããŸããrambda ã©ã€ãã©ãªãç»å ŽããŸããããä»ã§ã¯èª°ããã®ã©ã€ãã©ãªã§æžãããããã°ã©ã ãèªãããšãã§ããŸããã
- ããããã¹ãŠããšã³ã·ã¹ãã ã«å€§ããªåœ±é¿ãäžãããšã³ã·ã¹ãã ã¯ä¿¡ããããªãã»ã©æé·ããŸããã ããã±ãŒãžã¯çžäºã«äºææ§ããããŸãããPromise ã䜿çšãããã®ãasync/await ã䜿çšãããã®ãã³ãŒã«ããã¯ã䜿çšãããã®ããããŸãã 圌ãã¯ãŸããç°ãªããã©ãã€ã ã§å·çããŠããŸãã
- ããã«ããããããžã§ã¯ãã®ç¶æãå°é£ã«ãªããŸãã ã³ãŒããèªããªããšãã°ãèŠã€ããã®ã¯å°é£ã§ãã
Webã¢ã»ã³ããªãšã¯äœã§ãã?
Mozilla Foundation ãä»ã®å€ãã®äŒæ¥ã®åæ¢ãªäººã ããWeb Assembly ã®ãããªãã®ãèæ¡ããŸããã ããã¯äœã§ããïŒ
- ãã€ããªåœ¢åŒããµããŒããããã©ãŠã¶ã«çµã¿èŸŒãŸããä»®æ³ãã·ã³ã§ãã
- ãã€ã㪠ããã°ã©ã ã¯ããã«å°éããã»ãŒãã€ãã£ãã«å®è¡ãããŸããã€ãŸãããã©ãŠã¶ã¯ JavaScript ã³ãŒãã®ãã¹ãŠã®ãããŒãã«ããæ¯å解æããå¿ èŠããããŸããã
- ãã¹ãŠã®ãã©ãŠã¶ããµããŒãã宣èšããŠããŸãã
- ããã¯ãã€ãã³ãŒãã§ãããããä»»æã®èšèªçšã®ã³ã³ãã€ã©ãäœæã§ããŸãã
- XNUMX ã€ã®äž»èŠãªãã©ãŠã¶ã«ã¯ããã§ã« Web Assembly ãµããŒããçµã¿èŸŒãŸããŠããŸãã
- Go ã§ã®ãã€ãã£ã ãµããŒããéããªãè¡ãããäºå®ã§ãã ãã®æ°ããã¢ãŒããã¯ãã£ã¯ãã§ã«è¿œå ãããŠããŸã: GOARCH=wasm GOOS=js (è¿ã )ã ãããŸã§ã®ãšãããç§ãç解ããŠããéããããã¯æ©èœããŠããŸããããééããªãGoã«å«ãŸãããšãã声æããããŸãã
ä»äœãããïŒ GopherJS
Web ã¢ã»ã³ããªã®ãµããŒãã¯ãããŸããããGopherJS ã®ãããªãã©ã³ã¹ãã€ã©ãŒã¯ãããŸãã
- Go ã³ãŒãã¯ãçŽç²ãªãJavaScript ã«ãã©ã³ã¹ãã€ã«ãããŸãã
- ãã¹ãŠã®ãã©ãŠã¶ã§å®è¡ã§ããŸããææ°ã®ãã©ãŠã¶ã§ã®ã¿ãµããŒããããæ°æ©èœã¯ãããŸãã (ããã¯ããããããã©ãŠã¶ã§å®è¡ã§ãã Vanilla JS ã§ã)ã
- ãŽã«ãŒãã³ããã£ãã«ãªã©ãGo ã«ããã»ãŒãã¹ãŠã®ãã®ããµããŒããããŠããŸããç§ãã¡ãæããããç¥ã£ãŠãããã¹ãŠã®ãã®ã§ãã
- ãã©ãŠã¶ãŒã§ãµããŒãããæå³ã®ãªãããã±ãŒãžãé€ããæšæºã©ã€ãã©ãªã®ã»ãŒå šäœããµããŒããããŠããŸã: syscallãnet ã€ã³ã¿ã©ã¯ã·ã§ã³ (net / http ã¯ã©ã€ã¢ã³ãã¯ãããŸããããµãŒããŒã¯ãªããã¯ã©ã€ã¢ã³ã㯠XMLHttpRequest çµç±ã§ãšãã¥ã¬ãŒããããŸã) ã äžè¬ã«ãæšæºã©ã€ãã©ãªå šäœãå©çšå¯èœã§ããããã§ã¯ãã©ãŠã¶å ã«ãããããã«ã¯ç§ãã¡ãæçšããŠãã Go stdlib ããããŸãã
- Go ã®ããã±ãŒãž ãšã³ã·ã¹ãã å šäœããã¹ãŠã®ãµãŒãããŒã㣠ãœãªã¥ãŒã·ã§ã³ (ãã³ãã¬ãŒããªã©) 㯠GopherJS ã§ã³ã³ãã€ã«ãããã©ãŠã¶ãŒã§å®è¡ã§ããŸãã
GopherJS ã®å ¥æã¯éåžžã«ç°¡åã§ããããã¯åãªãéåžžã® Go ããã±ãŒãžã§ãã go get ãå®è¡ãããšãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã® GopherJS ã³ãã³ããåŸãããŸãã
ããã¯ãšãŠãå°ããªãããŒã¯ãŒã«ãã§ã...
...éåžžã® Go ããã°ã©ã ãæšæºã©ã€ãã©ãªã®éåžžã® fmt ããã±ãŒãžãããã³ãã©ãŠã¶ãŒ API ã«ã¢ã¯ã»ã¹ããããã®ãã€ã³ãã£ã³ã° Jsã Println ã¯æçµçã«ã³ã³ãœãŒã« ãã°ã«å€æããããã©ãŠã¶ã¯ãHello gophers!ããšæžã蟌ã¿ãŸãã ããã¯ãšãŠãç°¡åã§ããGopherJS ããã«ããããã©ãŠã¶ã§èµ·åããŸãããã¹ãŠãæ©èœããŸãã
çŸæç¹ã§ã¯äœããããŸããïŒ ãã€ã³ãã£ã³ã°
ãã¹ãŠã®äžè¬ç㪠JS ãã¬ãŒã ã¯ãŒã¯ã®ãã€ã³ãã£ã³ã°ããããŸãã
- jQuery;
- Angular.js
- ããã°ããŒã¿ã®ãããããšæäœçšã® D3.jsã
- React.js
- VueJS;
- Electron ã®ãµããŒãããããŸã (ã€ãŸãããã§ã« Electron ã§ãã¹ã¯ããã ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸã)ã
- ãããŠæãé¢çœãã®ã¯ WebGL ã§ã (3D ã°ã©ãã£ãã¯ã¹ãåããã²ãŒã ãé³æ¥œãããããã°ããºãå«ããã«ã°ã©ãã£ã㯠ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸã)ã
- ãã®ä»ããã¹ãŠã®äžè¬ç㪠JavaScript ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªãžã®ãã€ã³ãã£ã³ã°ãå€æ°ãããŸãã
ãã¬ãŒã ã¯ãŒã¯
- GopherJS å°çšã«éçºããã Web ãã¬ãŒã ã¯ãŒã¯ã§ãã Vecty ããã§ã«ååšããŸãã ãã㯠React.js ã®æ¬æ Œçãªé¡äŒŒç©ã§ãããGopherJS ã®ä»æ§ã䜿çšã㊠Go ã§ã®ã¿éçºãããŠããŸãã
- ã²ãŒã ããã°ããããŸãïŒçªç¶ïŒïŒã æã人æ°ã®ãããã®ã XNUMX ã€èŠã€ããŸããã
- ãšã³ãŽã
- ãšããã³ã
ãããã©ã®ããã«èŠãããããã㊠Go ã§ãã§ã«äœãèšè¿°ã§ããããããã€ãã®äŸã§ç€ºããŸãã
ãŸãã¯ããã®ãªãã·ã§ã³ (3D ã·ã¥ãŒãã£ã³ã° ã²ãŒã ã¯èŠã€ãããŸããã§ããããããããååšããã§ããã):
ç§ã¯äœãææ¡ããŸãã?
çŸåšãããã³ããšã³ãæ¥çã¯ã以åã¯JavaScriptããèŠæ±ãããŠãããã¹ãŠã®èšèªãããã«æ®ºå°ãããããªç¶æ ã«ãããŸãã ããã§ããã¹ãŠããWeb ã¢ã»ã³ããªãã«ã³ã³ãã€ã«ãããŸãã ããã§ãããªããºãããšããŠãµããããå°äœãå ããããã«ã¯äœãå¿ èŠã§ããããïŒ
Go ã¯äŒçµ±çã«ã·ã¹ãã ããã°ã©ãã³ã°èšèªã§ãããšèããããŠãããUI ãæäœããããã®ã©ã€ãã©ãªã¯äºå®äžãããŸããã äœãã¯ããããååæŸçœ®ãããååæ©èœããŠããªãã
ãããŠä»ãGopherJS äžã§åäœãã UI ã©ã€ãã©ãªã Go ã§äœæããè¯ããã£ã³ã¹ã§ãã ã€ãã«ç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãäœæã§ããããã«ãªããŸããã ãã¬ãŒã ã¯ãŒã¯ãäœæã§ããæ代ãå°æ¥ããŸãããããããã°ãããã¯æåã® XNUMX ã€ãšãªããæ©æã«æ¡çšããã(ãããåªãããã¬ãŒã ã¯ãŒã¯ã§ããã°) ã¹ã¿ãŒã«ãªããã§ãããã
Go ãšã³ã·ã¹ãã ã«ãã§ã«ååšããããŸããŸãªããã±ãŒãžããã©ãŠã¶ãŒã®ä»æ§ (ãã³ãã¬ãŒã ãšã³ãžã³ãªã©) ã«é©å¿ãããããšãã§ããŸãã ãããã¯ãã§ã«æ©èœããŠããã®ã§ããã©ãŠã¶ã§çŽæ¥ã³ã³ãã³ããç°¡åã«ã¬ã³ããªã³ã°ã§ããããã«äŸ¿å©ãªãã€ã³ãã£ã³ã°ãäœæã§ããŸãã ããã«ãããšãã°ãåãã³ãŒãã䜿çšããŠããµãŒããŒãšããã³ããšã³ãã§åããã®ãã¬ã³ããªã³ã°ã§ãããµãŒãã¹ãäœæã§ããŸããããã¯ãããã³ããšã³ãéçºè ã奜ããã®ãã¹ãŠã§ã (çŸåšã¯ Go ã®ã¿)ã
ã²ãŒã ãæžããïŒ ãã ã®æ¥œãã¿ã®ããã«âŠ
ç§ã¯ãã¹ãŠããããŸãã
質å
質åïŒä»¥äžãQïŒïŒ â Go ãŸã㯠Js ã§æžããŠããŸãã?
AG: â ã«ãŒãã³ããã£ãã«ãæ§é ãåã蟌㿠â ãã¹ãŠã Go ã§èšè¿°ããŸããã€ãã³ãããµãã¹ã¯ã©ã€ãããããã«é¢æ°ãæž¡ããŸãã
ã§ïŒ ââã€ãŸããJsã®ã裞ãã«æžããšããããšã§ããïŒ
AG: - ããããGo ã®ããã«èšè¿°ããŠãã©ãŠã¶ API ã«æ¥ç¶ããŸã (API ã¯å€æŽãããŠããŸãã)ã ã¡ãã»ãŒãžããã£ãã«ã«å±ãããã«ç¬èªã®ãã€ã³ãã£ã³ã°ãäœæã§ããŸããããã¯é£ããããšã§ã¯ãããŸããã
ã§ïŒ -ã¢ãã€ã«ã«ã€ããŠã¯ã©ãã§ããïŒ
AG: - 確ãã«èŠãŸãããJs ãèµ·åãã Cordova ãããçšã®ãã€ã³ããŒããããŸãã React Native ã§ã¯ãããããŸããã ãããããããªããããªããããããªãïŒç¹ã«èå³ã¯ãªãïŒã N-go ã²ãŒã ãšã³ãžã³ã¯ãiOS ãš Android ã®äž¡æ¹ã®ã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ããµããŒãããŸãã
ã§ïŒ â Web ã¢ã»ã³ããªã«ã€ããŠã®è³ªåã§ãã ç°¡æœãã«ããããããããŸããŸãå€ãã®å Žæãå æããããzipãã«ãªã£ãŠããŸã...ãã®ããã«ããŠãããã³ããšã³ãã®äžçãããã«æ®ºããŠããŸããªãã§ããããïŒ
AG: - Web ã¢ã»ã³ããªã¯ãã€ããªåœ¢åŒã§ãããæçµãªãªãŒã¹ã§ã¯ããã©ã«ãã®ãã€ããªãããã¹ããã倧ããããããšã¯ã§ããŸãã...ã©ã³ã¿ã€ã ã«ãã£ãŠãã«ãããŸããããã㯠Javascript æšæºã©ã€ãã©ãªãååšããªããšãã«ããããã«ããã®ãšåãã§ãã Lodash ã䜿çšããŠãã ããã Lodash ã«ã©ããããæéãããããããããŸããã
ã§ïŒ - æããã«å®è¡æéãããçãã§ã...
AG: - ãçŽç²ãªãJavaScript ã«ã€ããŠ?
ã§ïŒ - ã¯ãã å§çž®ããŠãéãããŸãã®ã§...
AG: - ããããããã¯ããã¹ãã§ã...äžè¬ã«ãã¡ã¬ãã€ãã¯ããªãã®éã«äŒŒãŠããŸãããããã ãã§ã (ã©ã³ã¿ã€ã å šäœãå«ãŸããŸã)ã 次ã«ããã€ããªã 1% å¢ããç¬èªã®ããžãã¹ ããžãã¯ãäœæããŸãã ä»ã®ãšããããããããã³ããšã³ããç Žå£ããŠããããã«ã¯èŠããŸããã ããã«ãWeb Assembly ã¯ã解æããå¿ èŠããªããšããæçœãªçç±ãããJavaScript ãããé«éã«åäœããŸãã
ã§ïŒ - ãããŸã§ã®ãšãããç©è°ãéžããŠããç¹...ãWasmaã(Web Assembly) ã®ãªãã¡ã¬ã³ã¹å®è£ ã¯ãŸã ååšããªããããæ確ã«å€æã§ããŸãã æŠå¿µçã«ã¯ããã§ãããã€ããªã®æ¹ãé«éã§ããã¹ãã§ããããšã¯èª°ããç解ããŠããŸãããåã V8 ã®çŸåšã®å®è£ ã¯éåžžã«å¹ççã§ãã
AG: - ã¯ãã
ã§ïŒ - ããã§ã®ã³ã³ãã€ã«ã¯æ¬åœã«éåžžã«ã¯ãŒã«ã«æ©èœãã倧ããªå©ç¹ãããããšã¯äºå®ã§ã¯ãããŸããã
AG: - Web Assembly ã倧æãäœã£ãŠããŸãã
ã§ïŒ - ä»ã®ãšãããWeb Assembly ãå€æããã®ã¯ãŸã é£ããããã«æããŸãã äœå¹Žãã®éã話ãåãã¯è¡ãããŠããŸããããå®éã«å®æã§ããææã¯ã»ãšãã©ãããŸããã
AG: - å€åã ã©ãã©ãã
ã§ïŒ â ããã¯ãšã³ãã«ã¯åé¡ã¯ãããŸããâŠãããã®åé¡ã¯ããã³ããšã³ãã«æ®ããŠãããã»ããããã§ãããã? ãªãããã«è¡ãã®ã§ããïŒ
AG: - æåç·ã®ã¹ã¿ãããç¶æããªããã°ãªããŸããã
ããã€ãã®åºå ð
ãã€ãã宿æ³ããã ãããããšãããããŸãã ç§ãã¡ã®èšäºãæ°ã«å
¥ã£ãŠããŸãã? ãã£ãšèå³æ·±ãã³ã³ãã³ããèŠããã§ãã? 泚æããããå人ã«å§ãããããŠç§ãã¡ããµããŒãããŠãã ããã
ã¢ã ã¹ãã«ãã ã®ãšã¯ã€ãã¯ã¹ Tier IV ããŒã¿ã»ã³ã¿ãŒã§ã¯ Dell R730xd ã 2 åå®ã? ããã ã
åºæïŒ habr.com