Як написати свій транслятор однієї мови в інший

Власне, для Go парсер і інші ништяки поставляються в його стандартне бібліотеці:
golang.org/pkg/go

Але, не все так просто. Недостатньо просто взяти і на основі одного синтаксису згенерувати інший. У мов може відрізнятися досить серйозно модель роботи з пам'яттю. Наприклад, враховуйте, що JS виконується в одному потоці, а Go - не обов'язково, це робить безглуздими багато елементів в Go, які спрямовані на синхронізацію. Також я, наприклад, сходу не второпаю як оптимально ретранслювати в JS такі низькорівневі речі як покажчики, адже сам по собі JS не дає "мацати" їх ручками, як дозволяє це Go. І таких моментів, якщо копнути далі, буде ще багато, тому що солодкість Go - в його Рантайм, який не можна ось так просто взяти і витягти на горбу JS в браузер.
Можна, звичайно, взяти і тупо накласти синтаксис Go на однопоточні модель JS, його має вистачити, але це вже буде не чистий Go, а трохи інша його специфікація під іншу модель пам'яті, зі своїми підводними каменями. І тут постає питання: а чи достатньо виразний Go для тих завдань, які вирішує JS в браузері? У гонитві за зовнішнім виглядом і синтаксисом НЕ начепив ми корпус від трактора на легкову машину, в результаті свого то добившись, але май проблеми як мінімум з паркуванням? Все-таки мови створювалися для вирішення різних завдань.

Що стосується Python - тут справи повинні бути краще, так як моделі мов ближче. Упевнений, що якісь ретранслятори з Python в JS вже є. Я багато разів чув про те, що як би добре було в браузері на Python ліпити, а світ ентузіастами сповнений =).

Повертаючись до проблеми ретрансляції, @mututunus задав Вам правильний вектор. Вивчіть питання глибше, подивіться успіхи інших на цьому терені. У того ж Dart і JS - дуже схожі моделі мов, і це неспроста. При першому погляді Dart здається таким собі JS на стероїдах з нормальною асінхронщіной, пакетами, опціональною статичної типізацією та іншими солодощами. Тож не дивно, що він легко і досить добре транслюється в JS. Більш того, його створювали як раз як заміну JS, тобто для вирішення завдань в браузері, він під це заточений в деякому сенсі, що, звичайно ж, виливається в певному дизайні мови і певних його концепціях.

Схожі статті