Ещё один способ использования python в браузере (и не только)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Предыстория

Весной 2020 года я впервые попробовал себя в разработке сайтов бэкенд я писал на питоне а на фронте пришлось использовать js и он вызвал у меня отторжение(тут надо уточнить, что я не считаю js ужасным языком, просто он мне не понравился). Не долго думая я начал писать транслятор с питона в явускрипт(а если бы погуглил то нашел бы это и это). об этом трансляторе и пойдет речь.

Отличия от других трансляторов

В процессе разработки я читал о явескрипт и не много о других языках (ruby, lua, php) и заметил что в них много общего, например наличие условных конструкций, функций, переменных и тд. И тогда я подумал почему бы не добавить возможность трансляции не только в js но и другие языки.

Языки добавляются с помощью функций обработчиков например обработчик математичиских операций для js выгладит так:

def bin_op(left, right, op):
    return f"({left}{op}{right})"

а для lisp он будет выглядеть так:

def bin_op(left, right, op):
    return f"({op} {left} {right})"

А так же также отличительной чертой является возможность добавления макросов например целочисленное деление в js:

signs = {"//": lambda l, r: f"Math.floor({l}/{r})"}

Кому это нужно

Одним из вариантов использования проекта является написание скриптов в играх, так как питон довольно тяжелый для встроенного языка то можно использовать трансляцию в lua.

Так же можно использовать его как линтер для python с исправлением ошибок в именах функций.

Ну и для поддержки проектов с языками вызывающими у вас отторжение(как у меня js или pascal) ну или просто устаревшие языки.

Важно

В некоторых местах статьи можно подумать, что считаю некоторые языки какими-то не такими. Я рассматриваю языки как две части: его синтаксис(тут python для меня почти идеал) и как платформу.

Все говорят, что язык это инструмент и нужно уметь пользоваться разными, то есть молотком отвертку не заменишь. Так вот молоток и отвертка - это платформы, а их ручка это синтаксис.

Лучше всего это видно на примере java. Java(jvm) - это распространённая, быстрая платформа, а синтаксис и языки для нее разные: Kotlin, Java, Clojure и многие другие.

Что поддерживается

На момент написания статьи добавлен только один язык js, так же я пробовал транслировать в go, но только на уровне hello world и делал код робота катающегося по линии на ардуино(c++).

А так же пока не сделана документация.

Поддерживаются блоки if...elif...else, while, for(C подобный и for each), возможность писать с аннотациями типов. Так же поддерживаются макросы. В общем пока можно писать программы уровня олимпиадного программирования.

Планы на будущее

В первую очередь расширить набор языков, добавить поддержку всего синтаксиса python. Ну и конечно же написать документацию. Еще хотелось бы сделать реализацию стандартных функций питона на питоне что бы транслировать их и использовать вместе с целевым языком.

И еще хотелось бы web интерфейс как на этой картинке:

P.S.

Это вторая попытка написания статьи.

Поддержите проект звездочкой на гитхаб

Присоединяйтесь к телеграм каналу

Источник: https://habr.com/ru/post/535934/


Интересные статьи

Интересные статьи

Если вы разработчик и перед вами стоит задача выбора кодировки, то почти всегда правильным решением будет Юникод. Конкретный способ представления зависит от контекста, но чаще все...
Всем привет! Не так давно на работе в рамках тестирования нового бизнес-процесса мне понадобилась возможность авторизации под разными пользователями. Переход в соответствующий р...
Привет! Меня зовут Евгений, я Python-разработчик. Последние полтора года наша команда стала активно применять принципы Clean Architecture, уходя от классической модели MVC. И сегодня я расскажу о...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
Как думаете, что произойдет, если запустить в консоли браузера этот фрагмент кода? function foo() { setTimeout(foo, 0); } foo(); А этот? function foo() { Promise.resolve().then(foo);...