Являясь разработчиком программного обеспечения iOS в Swift, мне все больше и больше раздражает необходимость координировать один и тот же код, написанный в Swift, с кодировками разработчиков на JavaScript. Было бы намного опрятно реализовать единую функциональность в одном месте, а затем перевести на JS, правильно?Быстро перейти на JavaScript-транспилер - возможно?
Я начал задаваться вопросом, возможно ли компилятор Swift для JS? Возможно, не разделять полный код, но, по крайней мере, некоторые общие общие функции.
Я нашел этот транспилер онлайн: SwiftJS. К сожалению, этот на самом деле не режет.
Следующий код:
let a = [1, 2]
print(a.count)
Invalid Swift code
возвращается в демо-версии. Это не внушает доверия. Не обращайте внимания на более сложные биты, такие как опции или перегрузка функций.
Мне было интересно начать проект транспилера, но потом я понял, что было много подводных камней. Например этот код:
var a = [1, 2]
var b = a
b.append(3)
должен сделать a
равным [1, 2]
и b
равным [1, 2, 3]
. В JavaScript оба будут [1, 2, 3]
, поскольку они передаются по ссылке, а не по значению.
Возможно ли было бы написать правильный транспилер?
Да, это было бы, но вам придется перекрыть не только синтаксис, но и семантику. Lambdas, массивы, словари, объекты и почти все языковые конструкции ведут себя по-другому на другом языке, поэтому решить эту проблему очень сложно и сложно. Не говоря уже о том, что потребуется много времени. –
есть транслятор, который довольно зрелый, я думаю, https://www.sitepoint.com/getting-started-emscripten-transpiling-c-c-javascript-html5/. Возможно, вы могли бы использовать его, если бы вы использовали obj-c вместо быстрого – chiliNUT