Компиляторы. Почему я написал свой на Go?

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

Я создаю язык программирования. На что он похож?

TheOneAndOnly ・ Jan 27 ・ 3 min read

#программирование #devjournal #showdev #архитектура

Хорошо.

Наконец-то пришло время начать делать посты о реальной реализации. На самом деле, этот пост скорее о том, что нужно сделать прямо перед тем, как начать что-то внедрять.

Итак, давайте начнем все правильно. По крайней мере, давайте начнем правильно для вас, коллеги-разработчики. Мне не повезло.

Когда я начал реализовывать этот проект, я прошел через множество языков и множество потерь времени, и я хочу подробно описать все причины, по которым я выбрал тот язык, который выбрал, потому что это влияет практически на все, начиная с архитектуры кода и заканчивая потоком кода. Я знаю, что каждый не может просто вытащить язык из шляпы и начать проект на нем (возможно, однажды я сделаю пост об оттачивании навыков, чтобы иметь возможность сделать это), поэтому этот пост будет больше об организации проекта и понимании того, что вы делаете, до того, как вы это сделаете.

Что я хочу получить от 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 в будущем!

И, как и в каждом посте, счастливого развития!

Оцените статью
Procodings.ru
Добавить комментарий