Язык программирования с нуля: С какого языка программирования лучше начать обучение — Разработка на vc.ru

Содержание

Языки программирования в 2023 году с нуля

Автор Евгений Волик На чтение 7 мин Просмотров 647 Обновлено

Привет всем, друзья! ✌ Сегодня рассмотрим Языки программирования и обучение, которое можно пройти абсолютно бесплатно. Летс ГОУ!

Несмотря на то, что языков программирования насчитывается несколько десятков тысяч, востребованными по-настоящему является лишь около 20.

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

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

Далее будет рассмотрено несколько популярных языков программирования и особенности их изучения.

Что будет в статье

Python

Python

Это язык высокого уровня, но он является достаточно простым в освоении, поэтому есть курсы даже для детей. С помощью Python можно создавать простые игры, социальные сети, боты, микросервисы и client-server. Кроме этого он позволяет тестировать приложения, искать и удалять в них ошибки, а также внедрять в среду.

Такие мировые гиганты, как Microsoft, Google, Mail.ru и даже NASA на каких-то этапах своего становления и развития пользовались этим языком. Если выучить Python, то можно научиться писать любые программы.

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

С++

С++

Данный язык программирования является старым, но до сих пор он активно используется при разработке сложных программ, сетевых приложений и графических движков. Он также применяется при создании 3D-игр, так как характеризуется высокой скоростью.

Программист, изучивший С++, может работать в любых направлениях: от игровой сферы до робототехники. Изучить этот язык можно даже самостоятельно, так как по нему есть масса бесплатного обучающего материала.

PHP

PHP

Это язык программирования узкой специализации. Он также является старым, так как появился в далеком 1995 году. PHP-программист может работать в сфере веб-дизайна или стать SEO-специалистом. При этом работать он может как на себя, так и в команде.

JavaScript

JavaScript

Это мультипарадигменный язык программирования, с помощью которого любой конечный продукт можно «оживить», добавить ему динамичности и красок. Для тех, кто только хочет войти в IT-сферу, JavaScript будет оптимальным, так как он является легким в изучении и все браузеры его поддерживают. С помощью этого языка можно создавать части веб-приложений, разрабатывать браузерные ОС или автоматизировать офисные приложения.

C#

C#

Этот язык нашел свое применение в облачных сервисах, при разработке игр под Windows, а также в сфере создания веб-приложений. Этот язык будет легким для тех, кто изучил С++ или Java, так как синтаксис здесь похожий. Используют его для платформы .NET Framework.

Java

Java

Данный кроссплатформенный язык программирования обеспечивает весомую часть enterprise-решений. Особенностью Java является то, что компиляция для установки на другую ОС не нужна. Именно этот язык программирования используют для создания Андроид-игр. Около 14% вакансий в сфере программирования приходится именно на Java. Для освоения языка понадобится всего лишь 12 месяцев, после чего можно начинать работать.

Swift

Swift

Появился этот язык программирования в 2014 году. Он характеризуется открытым исходным кодом, а также интеграцией с Objective-C. Но подходит он лишь для написания программ и приложений под iOS, поэтому он считается дополнительным языком. Компания Apple в ближайшем будущем планирует перейти именно на этот язык.

HTML и CSS

HTML и CSS

Эти языки необходимы для работы с фронтендом и находятся на втором месте после JavaScript. Несмотря на свою простоту в изучении, эти языки стоит изучать лишь в качестве дополнительных.

SQL

SQL

Он необходим для работы с базой данных: для их тестирования, поддерживания и проектирования. На обучение не понадобится много времени.

VBA

VBA

Это базовый язык для приложений Microsoft, который позволяет создавать электронные таблицы, макросы, а также сделать рутинную работу более простой. Чтобы пройти курсы, не нужно даже владеть базовыми знаниями в сфере программирования.

ТОП Лучших платформ с бесплатными материалами для изучения курсов по программированию

  1. Курсы SQL
  2. Курсы Python
  3. Курсы аналитик данных (Data Science + Big Data)
  4. Обучение искусственному интеллекту и машинному обучению с Нуля
  5. Курсы Data Engineer (технический аналитик данных)
  6. Курсы Вёрстки сайтов на HTML и CSS
  7. Курсы веб-разработки
  8. Обучение PHP
  9. Курсы 1С, C++ и C#
  10. Курсы Java
  11. Обучение Java Spring
  12. Курсы Django
  13. Курсы Javascript
  14. Курсы Jquery
  15. Обучение Symfony
  16. Курсы Bootstrap
  17. Курсы Swift
  18. Курсы разработки Android-приложений
  19. Курсы разработки iOS-приложений
  20. Курсы тестирования ПО и QA
  21. Онлайн-обучение Автоматизации тестирования
  22. Курсы Frontend-разработки
  23. Уроки Backend-разработки
  24. Курсы Golang
  25. VR/AR-разработка
  26. Фреймворки: Vue JS, Node JS, Angular
  27. Курсы Full stack разработки
  28. Курсы DevOps
  29. Курсы DevSecOps
  30. Курсы информационной безопасности
  31. Курсы кибербезопасности
  32. Обучение Flutter
  33. Уроки системного администратора
  34. Обучение Ryby of Rails
  35. Обучение IoT (интернет-вещей)
  36. Программирование дронов
  37. Программирование роботов
  38. Программирование на R
  39. Обучение Rust
  40. Алгоритмы для разработчиков
  41. Тестирование мобильных приложений
  42. Тестирование игр
  43. Сетевой инженер
  44. Блокчейн разработка
  45. Курсы Kubernetes
  46. Обучение ASP. NET
  47. Курсы английского языка

1. «Скиллфактори»

1. «Скиллфактори»

Пройти

О платформе

Skilfactory

Социальные сети

SkillFactory — oнлайн-школа IT-профессий. Онлайн-курсы по Data Science, аналитике, программированию и менеджменту

2. «Нетология»

Пройти

Обучающая программа: курсы по веб и мобильной разработке для новичков и junior-разработчиков. Вы освоите профессию разработчика с нуля или добавите в арсенал необходимый язык программирования.

Бесплатные курсы по программированию от Нетологии

  • «Профессии в программировании»
  • «Как стать программистом»
  • «Разработка мобильных приложений с нуля»
  • «Основы вёрстки сайта»

О платформе

Нетология

Социальные сети

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

3. «GeekBrains»

Пройти

Бесплатные курсы по программированию от GB

  1. «Основы программирования»
  2. «Основы ООП»
  3. «Основы языка Python»
  4. «Веб-разработка. Быстрый старт»
  5. «Java. Быстрый старт»
  6. «Git. Базовый курс»
  7. «Как решать бизнес-задачи с помощью кластеризации»
  8. «C#. Быстрый старт»
  9. «С#. Мини-программы»
  10. «C#. Викторина «Угадай мелодию»

О платформе

Geekbrains

Социальные сети

Мы стремимся сделать знания доступными каждому, поэтому каждый день на портале появляются новые бесплатные обучающие материалы в виде статей, вебинаров или видеокурсов

4. «Skillbox»

Пройти

  1. «Введение в программирование»
  2. «Языки программирования»
  3. «Веб-программирование»
  4. «1С-разработка»
  5. «Python-разработка»
  6. «Android-разработка»
  7. «Java-разработка»

О платформе

Скиллбокс

Социальные сети

Миссия Skillbox — дать возможность каждому быть актуальным и востребованным специалистом прямо сейчас. Вне зависимости от возраста и географии.

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

Заключение

10 бесплатных онлайн-курсов для изучения основ программирования

10 бесплатных онлайн-курсов для изучения основ программирования

СаморазвитиеПодписаться

Group 7Created with Sketch.

С начала 2021 года компании, работающие в IT-сфере, разместили на hh.ru более 250 тысяч вакансий. Аналитики отмечают постоянный рост числа IT-вакансий, и спрос на разработчиков еще долго не уменьшится. Навыки программирования востребованы в самых разных областях: от медицины до медиа и даже искусства. И если вы хотите освоить одну из IT-специальностей, начните с ознакомления с основами программирования благодаря бесплатным онлайн-курсам.

Организатор: Skillbox
Продолжительность: 4 часа
Язык: русский

Этот курс подойдет тем, кто думает об освоении IT-специальности. Преимущество этой программы в том, что вы не только узнаете об основах языков программирования (Java, Python), но и о самих профессиях и перспективах работы. Программа состоит из 17 тематических модулей, доступ к курсу остается навсегда.

Организатор: Stepik
Продолжительность: 5 часов
Язык: русский

Курс для тех, кто только начинает изучать Java. Лекции содержат материал, охватывающий синтаксис языка, компиляцию программ, основы объектно-ориентированного программирования и более сложные аспекты Java, а также контрольные вопросы и практические задания. Курс состоит из 23 лекций.

Организатор: GeekBrains
Продолжительность: 1 месяц
Язык: русский

Учащиеся пройдут путь от основ программирования (переменные, циклы, ветвления) до построения программ с использованием объектно-ориентированного подхода. На курсе будут рассмотрены примеры применения языка для решения практических задач. Программа состоит из 17 уроков.

Организатор: IBM
Продолжительность: 5 недель
Язык: английский

Вводный онлайн-курс познакомит с основами машинного обучения на Python и различными видами моделирования. Слушатели освоят классификацию, кластеризацию и другие популярные алгоритмы, а также закрепят полученные теоретические знания практическими навыками.

Организатор: Академия Яндекса, Высшая школа экономики
Продолжительность: 2 часа
Язык: русский

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

Организатор: Udemy
Продолжительность: 10 часов
Язык: английский/русский

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

Организатор: НИУ ВШЭ
Продолжительность: 87 часов
Язык: русский

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

Организатор: Мичиганский университет
Продолжительность: 20 часов
Язык: английский

Цель этого курса — научить всех основам программирования компьютеров с помощью Python. Мы рассмотрим основы того, как можно построить программу на основе серии простых инструкций в Python. Курс не имеет предварительных требований и не включает никакого материала по математике, кроме самого элементарного. Любой, у кого есть умеренный опыт работы с компьютером, сумеет освоить материалы этого курса. Этот курс охватывает главы 1–5 учебника «Python for Everybody». После завершения этого курса ученики будут готовы пройти более продвинутые курсы программирования.

Организатор: Microsoft
Продолжительность: 4 недели
Язык: английский

Краткий вводный курс в C++ от экспертов Microsoft позволит освоить базовые принципы этого языка программирования. C++ — это язык программирования общего назначения, который поддерживает различные модели компьютерного программирования. Изучая C++, вы можете создавать приложения, которые будут работать на самых разных аппаратных платформах, таких как персональные компьютеры под управлением Windows, Linux, UNIX и mac OS X.

Организатор: GeekBrains
Продолжительность: 10 часов
Язык: русский

PHP — язык программирования, исполняемый на стороне веб-сервера. Он используется в проектах разных масштабов: от простого блога до крупнейших веб-приложений в интернете. Курс предназначен для тех, кто хочет приобрести начальные навыки веб-разработки на PHP, изучить логику работы с этим языком и терминологию, а также понять принципы функционирования систем и веб-приложений.

Любовь Карась

Теги

#начальный уровень

#разработка и IT-технологии

#hard skills

Смотрите также

Саморазвитие

О маньяках, преступлениях и криминалистике

Саморазвитие

О чем говорят сны: история толкования сновидений

Саморазвитие

Как появился знак # и что он означает

Саморазвитие

На Марс раньше Илона Маска? Легко: курс от Яндекс Кью и Летней Космической Школы

Саморазвитие

Как общаться с людьми с противоположным мнением

Саморазвитие

Что-то кроме «Дня сурка»: 10 книг, фильмов и сериалов про временную петлю

Показать еще

Создание языка программирования с нуля | Жоао Зигмонд | Стартап

Создание языка программирования с нуля | Жоао Зигмонд | Стартап | Medium

Ключевые понятия и что вам нужно знать

Опубликовано в

·

Чтение: 11 мин.

·

13 мая 2020 г.

ZAP! Интерпретатор — https://jzsiggy.github.io/ZAP/

В этой статье мы рассмотрим наиболее важные части и концепции разработки нового языка. Мы проанализируем самые важные моменты и логику, стоящую за ними, но не точные строки кода, которые заставляют их делать то, что они делают. Таким образом, вы можете следовать тому языку, который вы чувствуете… 9Написано Жоао Жигмондом 5

Joao Zsigmond

in

Создание нейронной сети с нуля

Понимание ключевых концепций алгоритма путем создания его самостоятельно

·Чтение за 16 минут·13 июня 2020 г.

Нитин Шарма

в

Прощай, ChatGPT: вот (новые) инструменты искусственного интеллекта, которые поразят вас

Бьюсь об заклад, что 99% читателей не знакомы ни с одним из этих инструментов.

·6 минут чтения·5 апреля

Zulie Rane

в

Если вы хотите стать творцом, удалите все (кроме двух) платформы социальных сетей

2 октября 022, во время всего Илона Маска фиаско, я наконец-то удалил Твиттер со своего телефона.

Примерно в то же время я также вышел из…

·Чтение через 8 мин·19 апреля

Joao Zsigmond

in

Создание блокчейна с нуля

можно построить самому

· Чтение: 11 мин·18 мая 2020 г.0003

Они не соответствуют планке.

·4 минуты чтения·13 апреля

The PyCoach

в

Вы используете ChatGPT неправильно! Вот как опередить 99% пользователей ChatGPT

·7 мин чтения·17 марта

Jacob Bennett

in

Используйте Git как старший инженер это.

·4 минуты чтения·15 ноября 2022 г.

Энтони Д. Мэйс

Как решать задачи LeetCode (правильный путь)

tl;dr: Вы делаете это неправильно. Используйте «Шесть шагов» каждый раз, когда тренируетесь с вопросами LeetCode, желательно с другим человеком.

Keep a…

·13 min read·10 мая 2022

Santal Tech

Больше нет Leetcode: The Stripe Interview Experience

В свете недавних увольнений, которые, как я думаю, Stripe справились хорошо (примечание генерального директора сотрудникам), я хотел поделиться своим опытом собеседования с…

·5 минут чтения·8 ноября 2022 г.

Доктор Дерек Остин 🥳

in

Почему я предпочитаю регулярные коммиты слияния коммитам сквоша

9000 6

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

·5 минут чтения·30 сентября 2022 г.

См. дополнительные рекомендации

Статус

Карьера

Преобразование текста в речь

Как создать новый язык программирования

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

Ну, ты не один такой. И вы узнаете об этом все, прочитав эту статью.

Как оказалось, есть три концепта, каждый из которых очень близок к другому:

  • Как работает язык программирования, изнутри.
  • Как работает компилятор.
  • Как создать новый язык программирования.

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

Как создать новый язык программирования

Начну с забавного вопроса. По данным Google, в мире насчитывается около 26 миллионов разработчиков программного обеспечения. Как вы думаете, сколько из них знают, как создать новый язык программирования?

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

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

Программисты люди практичные: компилируется? Кажется, это работает? Хорошо, тогда нажимай.

Немногие программисты обучены мыслить формально . Кроме того, создание языка программирования — это задача, гораздо более близкая к науке и искусству, чем к чистому кодированию (хотя, конечно, кодить тоже нужно много).

А ведь это так многому учит! Здесь так много увлекательных шагов и возможностей узнать о:

  • Разработка программного обеспечения высокого уровня,
  • Расширенные алгоритмы и структуры данных,
  • Шаблоны программирования,

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

Шаги по созданию языка программирования

С очень высокой точки зрения создание нового языка программирования включает в себя три основных этапа.

  • Определение грамматики.
  • Создайте интерфейсный компилятор для исходного кода.
  • Создайте внутренний генератор кода.

Итак, вы начинаете с

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

Например, на человеческом языке можно сказать: «Предложение состоит из артикля, существительного и глагола». Затем естественная двусмысленность языка, в основном данная разговорной частью и человеческой природой, отбрасывает это правило.

На формальном языке, если ваша грамматика гласит: «Присвоение производится с помощью имени переменной, знака равенства (=) и числа», то это будет единственный способ, которым кто-то может создать экземпляр переменной в исходном коде программы. , иначе код не скомпилируется (или возникнет ошибка, если вы создаете интерпретируемый язык).

Короче говоря, формальная грамматика определяет, как должен выглядеть исходный код программы на этом языке.

Речь идет о синтаксических правилах, которые программистам придется соблюдать , чтобы написать программу на вашем языке.

Front-End Compiler — это программа, которая берет исходный код и создает странную структуру данных. Подробнее об этом далее в статье.

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

Подождите. Это… можно запустить? Итак, все дело в том, что берет первоначальный исходный код и создает новый исходный код 9.0214 (что можно запустить)?

Да. Но тот, который машина может понять, часто называют Target Machine Code . Строго говоря, это означает, что в результате вы должны предоставить ассемблерный код, отдать его ассемблеру, который будет работать вместе с компоновщиком/загрузчиком, и тогда они вернут вам машинный код.

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

Например, при разработке нового языка вы можете решить, что ваш компилятор вместо создания машинного кода генерирует код C, который затем передается компилятору C. Это стандартный подход, и он не отнимет у вас ни одной забавной части написания компилятора: вам все равно нужно будет его собрать.

Но тогда что значит написать компилятор? Давайте посмотрим.

Шаги по созданию компилятора для языка программирования

Создание серьезного компилятора для сложного языка программирования — адская задача. Нужна большая команда квалифицированных специалистов.

Например, для компилятора FORTRAN 1 потребовалось около 3 лет. Созданный для научных вычислений, язык FORTRAN изменил правила игры в этой области и до сих пор широко используется. Они проделали хорошую работу и в значительной степени изменили историю вычислительной техники.

Несмотря на пугающую сложность, у компиляторов всего 5 основных частей:

  1. Лексический анализ . Распознавайте ключевые слова языка, операторы, константы и каждый токен, который определяет грамматика.
  2. Разбор . Поток токенов «понятен» в том смысле, что отношение между каждой парой токенов закодировано в древовидной структуре данных. Такое дерево предназначено для описания значения операций в каждой строке исходного кода.
  3. Семантический анализ . Вероятно, самый неясный из всех шагов. В основном включает в себя понимание типов и проверку несоответствий в «значении» исходного кода (не только в синтаксисе). Жесткий.
  4. Оптимизация . Независимо от того, насколько хорош исходный код до компиляции, есть вероятность, что при переходе на более низкие уровни кодирования (до машинного кода) можно реализовать несколько оптимизаций. Такие вещи, как оптимизация памяти или даже оптимизация энергопотребления. И, конечно же, оптимизация времени выполнения.
  5. Генерация кода . Оптимизированная версия исходного кода, наконец, преобразуется в исполняемый код.

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

Первый компилятор для FORTRAN создавался с 1954 по 1957 год. В то время все шаги, кроме семантического анализа, были очень сложными, что также объясняет, почему на получение результата ушло 3 года.

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

Сегодня команды, которые создают и поддерживают компилятор, в основном сосредоточены на шаге оптимизации. Это стало чрезвычайно важным, особенно учитывая большой прогресс в области аппаратного обеспечения. Шаги семантического анализа также достаточно сложны, хотя и не так сильно, как оптимизация.

Подробнее о каждом шаге.

Лексический анализ

Этот шаг начинается непосредственно с формальной грамматики.

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

 программа: [выражение";"]*
выражение: присваивание
присваивание : результат "=" операция
операция: переменная оператор переменная
оператор: "+" | "-" | "*" | "/"
переменная: "1" | "2" | "3" | "4" | "5"
           | "6" | "7" | "8" | "9" | "0"
результат: "L" | "О" 

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

Программа состоит из нуля или более Выражений , за которыми следует точка с запятой (фигурные скобки означают «ноль или более» того, что находится внутри них). Выражение может быть только Assignment . Назначение выполняется с помощью Результата , за которым следует Знак Равно , за которым следует Операция . Операция выполняется Переменной , за которой следует Оператор , затем еще одна Переменная. Оператор должен быть символом из четырех вариантов: «+», «-», «*», «/» (символы в двойных кавычках являются терминальными токенами). Переменная должна быть символом из десяти вариантов (десять цифр). Результатом должен быть либо символ «L», либо символ «O».

Если вы сейчас остановитесь всего на одну минуту и ​​подумаете, то поймете, что с помощью этой глупой грамматики можно представить только последовательность сложений, вычитаний, умножений и делений между двумя маленькими целыми числами (от 0 до 9).включены). Последовательность также может быть пустой, а если это не так, то элементы в ней должны быть разделены точкой с запятой. Да, и результат каждой операции может быть назван только либо «L», либо «O».

Действительный «исходный код» может выглядеть как

.
 О = 2 + 3;
Л = 5*2;
… 

Он тупой и с ним ничего не сделаешь. Но я могу объяснить, как работает шаг лексического анализа! Ваш лексический анализатор просматривает исходный код и идентифицирует каждый токен вместе с его типом в соответствии с грамматикой. Таким образом, результат лексического анализатора для 2-х строк выше будет:

 "О" - результат
"2" - вар
"+" - оператор
"3" - вар
"Л" - результат
"5" - вар
"*" - оператор
"2" - вар 

Должно быть легко понять, почему существуют программные средства, выполняющие эту задачу для любой четко определенной грамматики. На самом деле, если вы сделали это вручную один раз, то становится скучно делать это снова.

Разбор

Парсер возьмет список токенов (результат предыдущего шага) и создаст древовидную структуру, предназначенную для описания «значения» исходного кода. В предыдущем примере (глупые арифметические операции) дерево отражает реальные операции:

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

Семантический анализ

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

Этот шаг очень сложен, особенно если речь идет о привязке переменных. Рассмотрим следующий фрагмент кода на Python.

 по определению foo(foo):
    вернуть фу + фу
значение = 5
print(foo(val)) # >> 10
защита foo2 (foo2):
    вернуть foo + foo2
фу = вал
print(foo2(7)) # >> 12 

Это явно нехороший код . Но давайте теперь посмотрим на это более внимательно.

Можете ли вы представить, какой беспорядок для интерпретатора Python, чтобы понять, что вы делаете, называя ваши переменные foo, подпрограмму foo, аргумент этой подпрограммы foo и, конечно же, используя идентификатор foo внутри области действия подпрограммы с именем foo .

Связывание

— это присвоение правильного значения (5, 7 или даже целого тела функции) правильному идентификатору ( foo , val , foo2 ) в соответствии с текущей областью. Семантический анализ заключается в том, чтобы понять, если вы что-то напутали.

Оптимизация

Этот шаг немного похож на редактирование текста после того, как он был написан первоначальным автором.

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

С таким количеством специализированного оборудования и множеством различных сетей, баз данных и архитектур неудивительно, что компиляторы могут довольно сильно варьировать способы оптимизации кода.

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

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

Генерация кода

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

Тем не менее, могут быть определенные потребности или некоторые инновации в вашем компиляторе, которые заставят вас создать собственный генератор кода. Чаще всего вы переводите дерево синтаксического анализа либо в код ассемблера, либо в код C, который затем можно скомпилировать с помощью существующего компилятора C.

Что дальше

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

По моему мнению, изучение теории языков и компиляторов стоит потраченного времени, потому что оно учит очень многому о реальной природе одной вещи, которую программисты часто используют: языков программирования.

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

Как обычно в технике, практическая часть тоже имеет первостепенное значение. Подробнее об этом в следующих статьях.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *