• Написать компилятор на C# или C++ или Python?

    @denismaster
    Видел парня на хабре. В 11 лет не каждый может такого достичь, как он, но все же.

    Итак, вы хотите написать компилятор. Это не так сложно, как кажется(иначе не было бы такого количества языков).
    1. Понадобится выучить, что такое грамматики, формальные и регулярные языки, контекстно-свободные грамматики и так далее. Необходимо достаточно глубоко понимать, что это и для чего. Также нужны знания структур данных, ассемблера, паттернов проектирования.
    2. Для опыта необходимо посмотреть грамматики современных языков, благо, они есть в свободном доступе. Пример раз, пример 2
    3. На основе полученных знаний, а также опыта изучения грамматик существующих языков необходимо написать свою грамматику
    4. К этому моменту вы сильно подрастете, если не физически, то скиллом уж точно, поэтому заведите себе хобби или девушку, чтобы отвлекаться от этой дребедени, иначе сойдете с ума.
    5. На основе данной грамматики пишется на любом известном вам языке лексер и парсер, которые переводят эту грамматику в набор токенов(задача лексера), а парсер эти токены в Абстрактное Синтаксическое Дерево (Abstract Syntax Tree)
    6. На основе данного дерева вы можете проводить анализ кода, проверку на ошибки, оптимизации.
    7. Данное дерево мы можем трансформировать в другую форму. После чего на его основе сгенерировать код, который мы хотим получить.
    8. Крайне советую посмотреть исходники открытых компиляторов, например, Roslyn для шарпа или аналогов для других языков, чтобы посмотреть, как оно вообще работает.


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

    И да, придется оооочень много читать, а также хороший английский, на русском намного меньше литературы по данной специфике.
    Ответ написан
    6 комментариев
  • Нужна ли программисту профильная математика?

    Знание математики определит ваш потолок как программиста. Формальный ответ на ваш вопрос: не обязательна.

    Для разработки несложных приложений, решения типичных практических задач можно ограничиться базовой математикой. Но если у вас есть амбиции, хочется быть в «высшей касте», «на острие», то сильный математический скилл совершенно необходим.
    Ответ написан
    Комментировать
  • Нужна ли программисту профильная математика?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Чем больше вы знаете, тем лучше. Как обычно, самым важным качеством программиста является поиск решения. Сначала правильного, потом оптимального. Иногда это математическое решение, иногда нет. Но если уж речь идёт об образовании, то его никогда мало не бывает. Неочевидное, нелогичное следствие - учиться надо будет всю жизнь. Эх, если бы мне об этом сказали в первом классе, я бы очень расстроился )))
    Ответ написан
    8 комментариев