Этот пост является частью продолжающейся серии постов. Щелкните ниже, чтобы наверстать упущенное!

Я создаю язык программирования. На что он похож?
TheOneAndOnly ・ Jan 27 ・ 3 min read
Хорошо.
Наконец-то пришло время начать делать посты о реальной реализации. На самом деле, этот пост скорее о том, что нужно сделать прямо перед тем, как начать что-то внедрять.
Итак, давайте начнем все правильно. По крайней мере, давайте начнем правильно для вас, коллеги-разработчики. Мне не повезло.
Когда я начал реализовывать этот проект, я прошел через множество языков и множество потерь времени, и я хочу подробно описать все причины, по которым я выбрал тот язык, который выбрал, потому что это влияет практически на все, начиная с архитектуры кода и заканчивая потоком кода. Я знаю, что каждый не может просто вытащить язык из шляпы и начать проект на нем (возможно, однажды я сделаю пост об оттачивании навыков, чтобы иметь возможность сделать это), поэтому этот пост будет больше об организации проекта и понимании того, что вы делаете, до того, как вы это сделаете.
Что я хочу получить от Cure?
Итак, я размышлял над идеей бутстрапинга Cure. Это повлияло на мой выбор, потому что Cure предназначен для транспиляции в C и компиляции, а это значит, что если он загрузочный, то не имеет значения, насколько быстрым будет первый язык реализации — он просто должен работать и быть достаточно быстрым для итераций нового компилятора в Cure (который, надеюсь, сам работает быстро).
Я не знал этого с самого начала.
В своей первой (из многих) попытке сделать Cure я начал с C. У меня сразу же случился экзистенциальный кризис, и я бросил.
Ладно, вторая попытка, не так уж плохо. Может быть, мне нужен язык более высокого уровня, C++ давайте…
Неа.
Ладно, в третий раз все получилось. Может быть, это были SEGFAULT’ы, которые ставили меня в тупик, давайте попробуем Rust. Все прошло довольно хорошо, относительно. Но постепенно до меня дошла реальность. Я был слишком туп для Rust Rust не был моим любимым языком для работы. Я медленно продвигался вперед, и моя кодовая база становилась все более суматошной, поскольку я тщетно пытался угодить вечно голодному проверяющему заимствований.
Тройное «нет».
Именно последнее заставило меня переосмыслить то, что я делал, потому что это были почти 3 месяца моего времени, потраченного на работу над Cure. Мне нужно было точно оценить свои цели в Cure и выбрать правильный рабочий процесс.
Из моего первого наброска компилятора я хочу (в порядке важности):
- Чистая кодовая база
- Легкая переносимость и читаемость
- Скорость
- Возможность запускать код на Си
На чем бы я ни писал код, он должен уметь делать все эти вещи. Я упомянул переносимость, потому что я могу переделать компилятор на Cure, когда закончу этот. Поскольку он скомпилирован в C, скорость нижнего компилятора не будет иметь значения. Однако, прежде всего, я хочу иметь кодовую базу, возвращаясь к которой я смогу улыбаться.
Итак, Go.
Я выбрал Go. Это не было поспешным решением, но оно было неохотным. Я никогда раньше не использовал Go, только некоторое время назад взглянул на его синтаксис и отмахнулся от него из-за PascalCase и отсутствия дженериков. И вот, когда я снова взглянул на него для Cure, что вы знаете? Дженерики появились, и все выглядело более обнадеживающе. Я попробовал немного в V, и мне понравилось (на самом деле, хотелось бы, чтобы V был более стабильным, чтобы я мог разумно собрать проект на нем), поэтому я решил, что Go, вероятно, может работать. Он быстрый, простой, ориентированный на данные и довольно надежный. Я почти уверен, что там даже есть поддержка связей с Си (что хорошо для того, чтобы легче статически связывать стандартные библиотечные функции на Си). На самом деле, я использовал идеи из синтаксиса Go в синтаксисе Cure. Кроме того, Cure — это как слияние Rust и Go.
Как все прошло?
Прошло около 5 месяцев работы над ним, и это действительно хорошо! Go — отличный язык, и хотя есть некоторые стилистические вещи, с которыми я не согласен, а организация проекта для меня — это мусор, сам язык очень хороший, и благодаря ему к моему коду легко возвращаться каждый раз. Сейчас я на полпути к MVP, хотя разработка немного замедлилась из-за этих сообщений.
Итак, в заключение хочу сказать, что обязательно планируйте свои большие проекты заранее — это сэкономит вам много времени и сил в долгосрочной перспективе. Кроме того, я рекомендую выучить Go, просто потому что!
На этом TheOneAndOnly желает вам, замечательные читатели, приятно провести время за программированием. Если у вас есть какие-либо вопросы, опасения, замечания или протесты, оставляйте их в комментариях. Ожидайте больше ориентированных на реализацию постов о Cure в будущем!
И, как и в каждом посте, счастливого развития!