Alexey Grachev: เป„เบ› Frontend

เบเบญเบ‡เบ›เบฐเบŠเบธเบก Kyiv Go เป€เบ”เบทเบญเบ™เบžเบถเบ”เบชเบฐเบžเบฒ 2018:

Alexey Grachev: เป„เบ› Frontend

เบ™เบณ: - เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™! เบ‚เบญเบšเปƒเบˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰! เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบฅเปเบฒเป‚เบžเบ‡เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ - Lyosha เปเบฅเบฐ Vanya. เบกเบฑเบ™เบˆเบฐเบกเบตเบญเบตเบเบชเบญเบ‡เบขเปˆเบฒเบ‡เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเป€เบงเบฅเบฒ. เบœเบนเป‰เป€เบงเบปเป‰เบฒเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ Alexey Grachev, เบฅเบฒเบงเบˆเบฐเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบš GopherJS.

Alexey Grachev (เบ•เปเปˆเป„เบ›เบ™เบตเป‰ - AG): โ€“ เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Go เปเบฅเบฐเบ‚เป‰เบญเบเบ‚เบฝเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบงเบฑเบšเปƒเบ™ Go. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš frontend, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบตเบ™เบกเบต handles. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš Go on the frontend.

เบ™เบดเบ—เบฒเบ™เปเบกเปˆเบ™เบ™เบตเป‰: เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ›เปƒเบ™เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เบกเบตเบชเบญเบ‡เบงเบดเบ—เบต - Web Assembly เปเบฅเบฐ GopherJS. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเปƒเบ”เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰.

เบกเบตเบซเบเบฑเบ‡เบœเบดเบ”เบžเบฒเบ”เบเบฑเบš frontend?

เบ—เบธเบเบ„เบปเบ™เป€เบซเบฑเบ™เบ”เบตเบงเปˆเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบตเบเบฑเบš frontend?

Alexey Grachev: เป„เบ› Frontend

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบ? เบชเป‰เบฒเบ‡เบŠเป‰เบฒ? เบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ”? เบ”เบต.

เบเปˆเบฝเบงเบเบฑเบšเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบฑเบเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ—เบตเปˆเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป€เบงเบปเป‰เบฒเปƒเบ™เบซเบ™เบฑเบ‡เบชเบทเบ‚เบญเบ‡เบฅเบฒเบง:

Alexey Grachev: เป„เบ› Frontend

Javascript เบšเปเปˆเบกเบตเบฅเบฐเบšเบปเบšเบ›เบฐเป€เบžเบ”. เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบ•เบฑเป‰เบ‡เบŠเบทเปˆเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเบžเบปเบšเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเปเบเป‰เป„เบ‚.

เบฅเบฐเบšเบปเบšเบ›เบฐเป€เบžเบ”เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบšเบ›เบฐเป€เบžเบ”เปƒเบ™ Javascript - เบกเบตเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบŠเบตเป‰เบšเบญเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ™เบตเป‰เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ›เบฐเป€เบžเบ”. เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™ TypeScript (Javascript add-on) เปเบฅเบฐ Flow (เบ•เบปเบงเบเบงเบ”เบชเบญเบšเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบ‚เบญเบ‡ Javascript). เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเป„เบ”เป‰เป„เบ›เป€เบ–เบดเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบšเปเปˆเบ”เบตเปƒเบ™ Javascript.

Alexey Grachev: เป„เบ› Frontend

เบšเปเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป€เบŠเบฑเปˆเบ™เบ™เบฑเป‰เบ™ - เบกเบตเบšเบฒเบ‡เบงเบฑเบ”เบ–เบธเบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆ "magic" เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš. เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™ Javascript เบ„เบทเบเบฑเบ™. เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบงเป‚เบ”เบ jQuery (เบ—เบธเบเบ„เบปเบ™เปƒเบŠเป‰ jQuery เบเบฑเบšเบ—เบธเบ prototypes, เบœเบนเป‰เบŠเปˆเบงเบ, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบ). เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบ„เบปเบ™เปƒเบŠเป‰ Lodash:

Alexey Grachev: เป„เบ› Frontend

callback hell. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบ—เบธเบเบ„เบปเบ™เป„เบ”เป‰เป€เบซเบฑเบ™เบฅเบฐเบซเบฑเบ” Javascript เบ›เบฐเบกเบฒเบ™ 5 เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปเบฅเบฐเบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบท "noodle" เบˆเบฒเบ intricacies incredible callbacks. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚ (เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง ES-15 เบซเบผเบท ES-16), เบ„เปเบฒเบชเบฑเบ™เบเบฒเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ Javascript เปเบฅเบฐเบ—เบธเบเบ„เบปเบ™เป€เบฅเบตเปˆเบกเบซเบฒเบเปƒเบˆเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป„เบฅเบเบฐเบซเบ™เบถเปˆเบ‡.

Alexey Grachev: เป„เบ› Frontend

เบˆเบปเบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒ Promice hell เบกเบฒโ€‹เบžเป‰เบญเบกโ€ฆ เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบฎเบนเป‰โ€‹เบงเปˆเบฒโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบญเบธเบ”โ€‹เบชเบฒโ€‹เบซเบฐโ€‹เบเปเบฒโ€‹เปเบ–เบงโ€‹เบซเบ™เป‰เบฒโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡, เปเบ•เปˆโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบชเบฐโ€‹เป€เบซเบกเบตโ€‹เบ‚เบฑเบšโ€‹เป„เบฅเปˆโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ›เปˆเบฒโ€‹เปเบ›เบโ€‹เบšเบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰ hell เบชเบธเบ” "เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ". เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก primitive เปƒเบซเบกเปˆ - async/await:

Alexey Grachev: เป„เบ› Frontend

เบ”เป‰เบงเบ asynchrony, เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚. Async/await เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ›เบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบเบฑเบ™เปƒเบ™เบžเบฒเบชเบฒเบ•เปˆเบฒเบ‡เป†. Python เปเบฅเบฐเบญเบทเปˆเบ™เป†เบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰ - เบกเบฑเบ™เบ”เบตเบžเบฝเบ‡เบžเป. เบšเบฑเบ™เบซเบฒเบ–เบทเบเปเบเป‰เป„เบ‚.

เบšเบฑเบ™เบซเบฒเบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚? เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹เบขเปˆเบฒเบ‡โ€‹เบซเบผเบงเบ‡โ€‹เบซเบผเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹, เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ™เบดโ€‹เป€เบงเบ”โ€‹เปเบฅเบฐโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹.

Alexey Grachev: เป„เบ› Frontend

  • syntax เบ‚เบญเบ‡ Javascript เปเบกเปˆเบ™เปเบ›เบเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบžเบงเบเป€เบฎเบปเบฒเบ—เบธเบเบ„เบปเบ™เบฎเบนเป‰เบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบก array เปเบฅเบฐเบงเบฑเบ”เบ–เบธเปเบฅเบฐ tricks เบญเบทเปˆเบ™เป†.
  • Javascript เปเบกเปˆเบ™เบซเบผเบฒเบเบฎเบนเบšเบชเบฑเบ™เบเบฒเบฅเบฑเบ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเบปเบ”เบ”เบฑเบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ”เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบซเบผเบฒเบ:
    • เบ—เบธเบเบ„เบปเบ™เบ‚เบฝเบ™เปƒเบ™เปเบšเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ - เบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡เบ‚เบฝเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เบšเบฒเบ‡เบ„เบปเบ™เบ‚เบฝเบ™เปเบšเบšเป€เบฎเบฑเบ”เบงเบฝเบ, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบฝเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™;
    • เบˆเบฒเบเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (packages) paradigms เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™;
    • "เบกเปˆเบงเบ™" เบซเบผเบฒเบเบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปƒเบ™ Javascript - เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” rambda เบ›เบฐเบเบปเบ”เบ•เบปเบงเปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เบšเปเปˆเบกเบตเปƒเบœเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ‚เบฝเบ™เบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบตเป‰.

  • เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบปเบ™เบเบฐเบ—เบปเบšเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เบ•เปเปˆเบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ”, เปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญ. เปเบžเบฑเบเป€เบเบ”เบšเปเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰: เบšเบฒเบ‡เบญเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเบฑเบ™เบเบฒ, เบšเบฒเบ‡เบญเบฑเบ™เบขเบนเปˆเปƒเบ™ async/ait, เบšเบฒเบ‡เบญเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เป‚เบ—เบเบฑเบš. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบ‚เบฝเบ™เปƒเบ™ paradigms เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™!
  • เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป‚เบ„เบ‡เบเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เบฎเบฑเบเบชเบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”.

Web Assembly เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบžเบงเบเบ—เบตเปˆเบเป‰เบฒเบซเบฒเบ™เบˆเบฒเบเบกเบนเบ™เบ™เบดเบ—เบด Mozilla เปเบฅเบฐเบšเปเบฅเบดเบชเบฑเบ”เบญเบทเปˆเบ™เป†เบˆเบณเบ™เบงเบ™เปœเบถเปˆเบ‡เป„เบ”เป‰เบกเบฒเบเบฑเบšเบชเบดเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบŠเบฑเปˆเบ™ Web Assembly. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡?

Alexey Grachev: เป„เบ› Frontend

  • เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฎเบนเบšเปเบšเบšเบ–เบฒเบ™เบชเบญเบ‡.
  • เป‚เบ›เบฅเปเบเบฅเบก Binary เบกเบฒเบฎเบญเบ”เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบเบทเบญเบšเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบเบ "noodles" เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” javascript เบ—เบธเบเป†เบ„เบฑเป‰เบ‡.
  • เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ›เบฐเบเบฒเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.
  • เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ bytecode, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ compiler เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒเปƒเบ”เบเปเปˆเบ•เบฒเบก.
  • เบชเบตเปˆเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบฅเป‰เบงเบชเบปเปˆเบ‡เบเบฑเบš Web Assembly เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.
  • เบžเบงเบเป€เบฎเบปเบฒเบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบกเบตเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เปƒเบ™ Go เปƒเบ™เป„เบงเป†เบ™เบตเป‰. เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเปƒเปเปˆเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปเบฅเป‰เบง: GOARCH=wasm GOOS=js (เป„เบงเป†เบ™เบตเป‰). เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, เบ•เบฒเบกเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆ, เบกเบฑเบ™เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”, เปเบ•เปˆเบกเบตเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™ Go.

เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™? GopherJS

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบต Web Assembly เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เบกเบต transpiler เป€เบŠเบฑเปˆเบ™ GopherJS.

Alexey Grachev: เป„เบ› Frontend

  • เบฅเบฐเบซเบฑเบ” Go เบ–เบทเบเปเบ›เป€เบ›เบฑเบ™ Javascript "เบšเปเบฅเบดเบชเบธเบ”".
  • เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ—เบธเบเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš - เบšเปเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฝเบ‡เปเบ•เปˆเป‚เบ”เบเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก (เบ™เบตเป‰เปเบกเปˆเบ™ Vanilla JS, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบดเปˆเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก).
  • เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบเบทเบญเบšเบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ Go, เบฅเบงเบกเบ—เบฑเบ‡ goroutines เปเบฅเบฐเบŠเปˆเบญเบ‡เบ—เบฒเบ‡ ... - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบเปเบฅเบฐเบฎเบนเป‰เบซเบผเบฒเบ.
  • เป€เบเบทเบญเบšเบซเปเบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš: syscall, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบชเบธเบ”เบ—เบด (เบกเบตเบฅเบนเบเบ„เป‰เบฒ net / http, เปเบ•เปˆเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเบ–เบทเบ emulated เบœเปˆเบฒเบ™ XMLHttpRequest) . เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ - เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบ™เบตเป‰เปเบกเปˆเบ™ Go stdlib เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบฑเบ.
  • เบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ”เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ Go, เบ—เบธเบเป†เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก (เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบเบฑเบš GopherJS เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš.

เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš GopherJS เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบซเบผเบฒเบ - เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบŠเบธเบ” Go เบ›เบปเบเบเบฐเบ•เบด. เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบเบฒเบ™เป„เบ›เบฎเบฑเบšเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡ GopherJS เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™:

Alexey Grachev: เป„เบ› Frontend

เบ™เบตเป‰เบ„เบทเป‚เบฅเบเบชเบฐเบšเบฒเบเบ”เบตเบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบ...

Alexey Grachev: เป„เบ› Frontend

...เป‚เบ›เบฃเปเบเบฃเบก Go เบ›เบปเบเบเบฐเบ•เบด, เบŠเบธเบ” fmt เบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ เปเบฅเบฐ Binding Js เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ API เบ‚เบญเบ‡เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš. Println เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ console log เปเบฅเบฐเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบˆเบฐเบ‚เบฝเบ™ "เบชเบฐเบšเบฒเบเบ”เบต gophers"! เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ: เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ GopherJS - เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ!

เบ•เบญเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบœเบนเบเบกเบฑเบ”

Alexey Grachev: เป„เบ› Frontend

เบกเบตเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบญเบš js เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”:

  • jquery;
  • Angular.js
  • D3.js เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบเปˆ;
  • React.js
  • VueJS;
  • เบเบฑเบ‡เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš Electron (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ desktop เปƒเบ™ Electron);
  • เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเปˆเบงเบ™เบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™ WebGL (เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบตเบฎเบนเบšเบžเบฒเบšเป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš, เบฅเบงเบกเบ—เบฑเบ‡เป€เบเบกเบ—เบตเปˆเบกเบตเบฎเบนเบšเบžเบฒเบš 3D, เบ”เบปเบ™เบ•เบตเปเบฅเบฐเบชเบดเปˆเบ‡เบ”เบตเป†เบ—เบฑเบ‡เบซเบกเบปเบ”);
  • เปเบฅเบฐเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบญเบทเปˆเบ™เป†เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบเบฑเบšเบเบญเบš javascript เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”.

Framework

  1. เบกเบตเบเบญเบšเป€เบงเบฑเบšเบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเป‰เบงเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบชเปเบฒเบฅเบฑเบš GopherJS - Vecty. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ React.js, เปเบ•เปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™ Go เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เป‚เบ”เบเบกเบตเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ GopherJS.
  2. เบกเบตเบ–เบปเบ‡เป€เบเบก (เบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™!). เบ‚เป‰เบญเบเบžเบปเบšเบชเบญเบ‡เบญเบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบตเปˆเบชเบธเบ”:
    • engo ;
    • Ebiten.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบญเบ‡เบชเบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เปƒเบ™ Go:

Alexey Grachev: เป„เบ› Frontend

เบซเบผเบทเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰ (เบ‚เป‰เบญเบเบšเปเปˆเบžเบปเบšเป€เบ„เบทเปˆเบญเบ‡เบเบดเบ‡ 3D, เปเบ•เปˆเบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เบกเบตเบขเบนเปˆ):

Alexey Grachev: เป„เบ› Frontend

เบ‚เป‰เบญเบเปเบ™เบฐเบ™เปเบฒเบซเบเบฑเบ‡?

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเปเบ–เบงเบซเบ™เป‰เบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเบ—เบตเปˆเบ—เบธเบเบžเบฒเบชเบฒเบ—เบตเปˆเป€เบ„เบตเบเบฎเป‰เบญเบ‡เบญเบญเบเบกเบฒเบˆเบฒเบ Javascript เบˆเบฐเปเบฅเปˆเบ™เป„เบ›เบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบฅเบงเบšเบฅเบงเบกเบเบฑเบš "Web Assemblies". เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบเบฑเบ‡เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบปเบกเบ„เบงเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™ "gophers"?

Alexey Grachev: เป„เบ› Frontend

เปƒเบ™ Go, เบกเบฑเบ™เป€เบ„เบตเบเป€เบ›เบฑเบ™เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบฅเบฐเบšเบปเบš, เปเบฅเบฐเปƒเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš UI. เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เปเบ•เปˆเบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ–เบดเป‰เบกเป„เบงเป‰เป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡, เป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”.

เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰ - เป€เบ›เบฑเบ™เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” UI เปƒเบ™ Go เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปƒเบ™ GopherJS! เบชเบธเบ”เบ—เป‰เบฒเบเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบญเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡เป„เบ”เป‰! เป€เบงเบฅเบฒเป„เบ”เป‰เบกเบฒเป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบญเบš, เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเป„เบง, เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ”เบฒเบง (เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบญเบšเบ—เบตเปˆเบ”เบต).

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ” Go เบเบฑเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš (เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปเบกเปˆเปเบšเบš). เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เป€เบ™เบทเป‰เบญเบซเบฒเป‚เบ”เบเบเบปเบ‡เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒ, เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ”เบฝเบงเบเบฑเบ™ - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเบกเบฑเบ (เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš Go).

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป€เบเบกเป„เบ”เป‰! เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™...

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบขเบฒเบเป€เบงเบปเป‰เบฒ.

Alexey Grachev: เป„เบ› Frontend

เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบ„เปเบฒเบ–เบฒเบก (เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ Q): - เบ‚เป‰เบญเบเบ‚เบฝเบ™เปƒเบ™ Go เบซเบผเบท Js?

AG: โ€“ เบ—เปˆเบฒเบ™โ€‹เบ‚เบฝเบ™โ€‹เบเบดเบ”โ€‹เบˆเบฐโ€‹เบเปเบฒโ€‹, เบŠเปˆเบญเบ‡โ€‹เบ—เบฒเบ‡โ€‹, เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹, เบเบฒเบ™โ€‹เบเบฑเบ‡ โ€“ เบ—เบธเบโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบธเบโ€‹เบขเปˆเบฒเบ‡โ€‹เปƒเบ™ Goโ€ฆ เบ—เปˆเบฒเบ™โ€‹เบˆเบญเบ‡โ€‹เบเบดเบ”โ€‹เบˆเบฐโ€‹เบเปเบฒโ€‹, เบœเปˆเบฒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™โ€‹.

เปƒเบ™: - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ‚เป‰เบญเบเบ‚เบฝเบ™เปƒเบชเปˆ Js "naked"?

AG: - เบšเปเปˆ, เบ—เปˆเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบเบฑเบšเบงเปˆเบฒเบขเบนเปˆเปƒเบ™ Go เปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš browser API ( API เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡). เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡ - เบกเบฑเบ™เบšเปเปˆเบเบฒเบ.

เปƒเบ™: - เปเบกเปˆเบ™เบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบกเบทเบ–เบท?

AG: - เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบซเบฑเบ™เปเบ™เปˆเบ™เบญเบ™: เบกเบตเบ•เบปเบงเบเบถเบ”เบชเปเบฒเบฅเบฑเบš Cordova patch เบ—เบตเปˆ Js เป€เบ›เบตเบ”เบ•เบปเบง. เปƒเบ™ React Native, เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰; เบšเบฒเบ‡เบ—เบตเบกเบต, เบญเบฒเบ”เบˆเบฐเบšเปเปˆ (เบšเปเปˆเบชเบปเบ™เปƒเบˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ). เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป€เบเบก N-go เบฎเบญเบ‡เบฎเบฑเบšเบ—เบฑเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบกเบทเบ–เบท - เบ—เบฑเบ‡ iOs เปเบฅเบฐ Android.

เปƒเบ™: - เบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบžเบฒเปเบซเปˆเบ‡เป€เบงเบฑเบšเป„เบŠเบ•เปŒ. เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบซเบผเบฒเบเบเบงเปˆเบฒเปเบฅเบฐเบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡, เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบต conciseness, "zipping" ... เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบ‚เป‰เบฒเป‚เบฅเบเบ‚เบญเบ‡ frontend เปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบซเบผเบฒเบเปƒเบ™เบ—เบฒเบ‡เบ™เบตเป‰?

AG: - Web Assembly เป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบš binary, เปเบฅเบฐ binary เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบซเบเปˆเบเบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบชเบธเบ”เบ—เป‰เบฒเบ ... Runtime เบ”เบถเบ‡เบ—เปˆเบฒเบ™, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ”เบถเบ‡เบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Javascript เป€เบกเบทเปˆเบญเบกเบฑเบ™เบšเปเปˆเบกเบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบšเบฒเบ‡. Lodash เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒ Lodash เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”.

เปƒเบ™: - เปเบ™เปˆเบ™เบญเบ™เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ runtime ...

AG: - เปƒเบ™ Javascript "เบšเปเบฅเบดเบชเบธเบ”"?

เปƒเบ™: - เปเบกเปˆเบ™เปเบฅเป‰เบง. เบžเบงเบเป€เบฎเบปเบฒเบšเบตเบšเบญเบฑเบ”เบเปˆเบญเบ™เบชเบปเปˆเบ‡...

AG: - เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบก ... เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, megabyte เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบซเบผเบฒเบ, เปเบ•เปˆเบงเปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ” (เบ—เปˆเบฒเบ™เบกเบต runtime เบ—เบฑเบ‡เบซเบกเบปเบ”). เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบ‚เบฝเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบก binary เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ 1%. เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบซเบฑเบ™เบกเบฑเบ™เบ‚เป‰เบฒ frontend. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, Web Assembly เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบงเบเบงเปˆเบฒ Javascript เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™ - เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ.

เปƒเบ™: - เป€เบ–เบดเบ‡เบ•เบญเบ™เบ™เบฑเป‰เบ™, เบˆเบธเบ” moot ... เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ‚เบญเบ‡ "Wasma" (เบชเบฐเบžเบฒเปเบซเปˆเบ‡เป€เบงเบฑเบšเป„เบŠเบ•เปŒ), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ•เบฑเบ”เบชเบดเบ™ unambiguously. Conceptually, เปเบกเปˆเบ™: เบžเบงเบเป€เบฎเบปเบฒเบ—เบธเบเบ„เบปเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ binary เบ„เบงเบ™เป„เบง, เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡ V8 เบ”เบฝเบงเบเบฑเบ™เปเบกเปˆเบ™เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบ.

AG: - เปเบกเปˆเบ™เปเบฅเป‰เบง.

เปƒเบ™: - เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบขเบฑเบ™เบซเบผเบฒเบเปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡.

AG: - เบชเบฐเบžเบฒเปเบซเปˆเบ‡เป€เบงเบฑเบšเป„เบŠเบ•เปŒเบเบฑเบ‡เป€เบฎเบฑเบ”เป‚เบ”เบ guys เปƒเบซเบเปˆ.

เปƒเบ™: - เป€เบ–เบดเบ‡เบ•เบญเบ™เบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ, เบกเบฑเบ™เบเบฑเบ‡เบเบฒเบเบ—เบตเปˆเบˆเบฐเบ•เบฑเบ”เบชเบดเบ™ Web Assembly. เป€เบ›เบฑเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบซเบผเบฒเบโ€‹เบ›เบตโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เป‰เบญเบโ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฎเบนเป‰โ€‹เบชเบถเบโ€‹เป„เบ”เป‰โ€‹.

AG: - เบšเบฒเบ‡เบ—เบต. เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡.

เปƒเบ™: โ€“ เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบš backend เป„เบ”เป‰โ€ฆ เบšเบฒเบ‡โ€‹เบ—เบตโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เป„เบงเป‰โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เบขเบนเปˆโ€‹เปƒเบ™ frontend? เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป„เบ›เบšเปˆเบญเบ™เบ™เบฑเป‰เบ™?

AG: - เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบฎเบฑเบเบชเบฒเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปเบ–เบงเปœเป‰เบฒ.

เบšเบฒเบ‡เป‚เบ„เบชเบฐเบ™เบฒ๐Ÿ™‚

เบ‚เบญเบšเปƒเบˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบขเบนเปˆเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. เป€เบˆเบปเป‰เบฒเบกเบฑเบเบšเบปเบ”เบ„เบงเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเป? เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบ™เบทเป‰เบญเบซเบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบšเป? เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบเบฒเบ™เบงเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบซเบผเบทเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบซเบกเบนเปˆเป€เบžเบทเปˆเบญเบ™, cloud VPS เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฒเบ $4.99, เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเบฅเบฐเบ”เบฑเบšเป€เบ‚เบปเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ›เบฐเบ”เบดเบ”เป‚เบ”เบเบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™: เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบฑเบ‡เปเบปเบ”เบเปˆเบฝเบงเบเบฑเบš VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps เบˆเบฒเบ $19 เบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ? (เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบš RAID1 เปเบฅเบฐ RAID10, เบชเบนเบ‡เบชเบธเบ” 24 cores เปเบฅเบฐเบชเบนเบ‡เบชเบธเบ” 40GB DDR4).

Dell R730xd 2x เบฅเบฒเบ„เบฒเบ–เบทเบเบเบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™ Equinix Tier IV เปƒเบ™ Amsterdam? เบ—เบตเปˆเบ™เบตเป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV เบˆเบฒเบ $199 เปƒเบ™เบ›เบฐเป€เบ—เบ”เป€เบ™เป€เบ—เบตเปเบฅเบ™! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - เบˆเบฒเบ $99! เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”. เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Dell R730xd E5-2650 v4 เบกเบนเบ™เบ„เปˆเบฒ 9000 เป€เบญเบตเป‚เบฃเบชเปเบฒเบฅเบฑเบšเป€เบ‡เบดเบ™เบšเป?

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™