Программные средства для создания системы программирования компилятора-транслятора новых программ

Обновлено: 05.07.2024

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

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

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

Codepad – это онлайн-инструмент, с помощью которого программисты могут компилировать свой код и сотрудничать с командами. Инструмент предоставляет кодировщикам определенный URL-адрес для своего кода, которым они могут поделиться с другими. Это простой онлайн-инструмент, в котором программист может написать код и выполнить его. Этот простой в использовании инструмент также отлично работает на мобильных устройствах. Этот инструмент поддерживает следующие языки: C, C++, D, PHP, Ruby, Python, Perl и многие другие.

Ideone – это интерактивная среда разработки и средство отладки с поддержкой более 50 языков. Это не просто pastebin, как codepad, а полнофункциональный инструмент отладки. Инструмент также предоставляет возможность сделать код частным или общедоступным. Публичные коды доступны для просмотра публично в разделе последних кодов. Пользователи могут зарегистрировать учетную запись и сохранять свои коды организованным образом.

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

На самом известном веб-сайте с онлайн-руководствами для веб-программистов также есть онлайн-компиляторы для различных языков сценариев. Это, вероятно, один из лучших веб-сайтов для изучения программирования в Интернете, а также для отработки кодов параллельно с предоставляемыми функциями компилятора. Веб-сайт содержит учебные пособия и инструменты для HTML, CSS, JavaScript, jQuery, AngularJS, PHP, ASP, SQL, NodeJS и различных других веб-технологий.

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

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

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

RexTester помогает программистам выполнять свои коды онлайн. Первоначально запущенный как инструмент проверки регулярных выражений для dotnet, rextester теперь поддерживает более 40 языков. Это простой в использовании инструмент с простым пользовательским интерфейсом. Пользователи также могут делиться своими кодами в разделе "Кодовая стена" и просить других программистов о сотрудничестве в реальном времени.

JSFiddle — это онлайн-инструмент для написания кода и совместной работы для программистов HTML и JavaScript. Программисты могут писать и тестировать свои коды HTML, CSS и JavaScript или CoffeScript онлайн в редакторе кода JSFiddle, а также делиться своими кодами с другими. Это, вероятно, один из лучших инструментов для веб-программистов с четырьмя различными разделами для HTML, CSS, JavaScript и результатов соответственно.

GCC – это веб-инструмент, созданный специально для программистов на C++. Это очень полезный инструмент для отладки и исследования. Этот инструмент предоставляет функции, с помощью которых программист может исследовать вывод кода. Поддерживаемые языки: C++, D, Rust и Go.Программисты также могут делиться своими кодами через URL-адрес, который инструмент генерирует для каждого кода. С правой стороны есть опция «Поделиться», а в инструменте также есть опции для изменения представления.

  1. Кросс-компилятор открытого доступа DJGPP

Компилятор DJGPP, управляемый программным обеспечением Delorie, представляет собой простой в использовании и удобный инструмент для компиляции и запуска кода в Интернете. Если программист хочет скомпилировать программу для DOS и у него нет доступа к машине с DOS, он может использовать этот инструмент.

Онлайн-компилятор для таких языков, как PHP, Ruby, Python, HTML и Java. По сути, это компилятор для программ разработки веб-сайтов. Это платный инструмент, который также включает функции для интеграции с GitHub, интеграции с BitBucket и развертывания серверов AWS или Linode. Структура ценообразования начинается от 6 долларов США в месяц, включая возможность совместной работы в режиме реального времени.

SourceLair – это облачный инструмент IDE, который позволяет программисту кодировать и тестировать сценарии в режиме онлайн. Инструмент очень простой с привлекательным пользовательским интерфейсом. SourceLair — это платный инструмент, но они предоставляют бесплатную пробную версию, чтобы пользователи могли протестировать инструмент, прежде чем пробовать платную учетную запись. Владельцы учетных записей sourceLair также могут группировать свои работы и организовывать их в папки. У SourceLair также есть мобильное приложение и приложение для магазина Chrome, которые могут использовать программисты.

Заключение

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

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

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

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

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

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

Раздел 1
Проектирование языка

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

Прежде чем начать…

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

Статьи

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

Книги

Системы шрифтов

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

Статьи

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

Книги

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

Раздел 2
Анализ

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

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

Инструменты

Учебники

    , хорошее введение в два инструмента с бонусными советами. , на 40 страницах это идеальная отправная точка для того, чтобы научиться собирать lex и yacc за несколько часов.
  • Видеоруководство по lex/yacc, состоящее из двух частей. За час видео вы сможете изучить основы использования lex и yacc. , известное и любимое учебное пособие, в котором объясняется все, что вам нужно знать об ANTLR, с дополнительными советами и рекомендациями и даже источниками, чтобы узнать больше.

Книги

    , несмотря на то, что книга была написана в 1992 году, она по-прежнему остается самой рекомендуемой книгой по этой теме. Кто-то говорит, что из-за отсутствия конкуренции, кто-то потому, что он достаточно хорош. , лучшая книга на эту тему, написанная в этом тысячелетии. , написанная основным автором инструмента, это действительно исчерпывающая книга по ANTLR 4. Она объясняет все его секреты, а также является хорошим введением в то, как работает весь синтаксический анализ. , исчерпывающая, продвинутая и дорогая книга, в которой вы узнаете больше, чем вам нужно, о синтаксическом анализе.

Раздел 3
Исполнение

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

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

Компиляторы

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

Инструменты

Статьи и руководства

Книги

    , это широко известная книга Дракона (из-за обложки) во 2-м издании (фиолетовый дракон). Есть издание в мягкой обложке, которое, вероятно, стоит дешевле, но на нем нет дракона, так что вы не можете его купить. Это теоретическая книга, поэтому не ожидайте, что методы на самом деле будут включать в себя много повторно используемого кода. , это известно как книга Тигра и конкурент книги Дракона. Это книга, в которой подробно рассказывается о структуре и элементах компилятора. Это теоретическая книга, хотя она объясняет концепцию с помощью кода. Существуют и другие версии той же книги, написанные с использованием Java и C, но общепризнано, что версия с ML — лучшая. , это еще одна книга по компилятору с теоретическим подходом, но она охватывает более современный подход и более удобочитаема. Он также больше посвящен оптимизации компилятора. Так что, если вам нужна теоретическая основа и инженерный подход, эта книга — лучший выбор.

Переводчики

Интерпретатор напрямую выполняет язык, не преобразовывая его в другую форму.

Статьи и руководства

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

Книги

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

Общие

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

Инструменты

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

    , является структурной частью нескольких связанных технологий для разработки языков программирования и особенно предметно-ориентированных языков. Он позволяет создавать все, от парсера до редактора и правил проверки. Вы можете использовать его для создания отличной поддержки IDE для вашего языка. Это упрощает весь процесс создания языка за счет повторного использования и связывания существующих технологий под капотом, таких как генератор синтаксического анализатора ANTLR. , представляет собой проекционный языковой верстак. Проекционное означает, что абстрактное синтаксическое дерево сохраняется на диске, а пользователю предоставляется проекция. Проекция может быть текстовой, таблицей, диаграммой или чем-то еще, что вы можете себе представить. Одним из побочных эффектов этого является то, что вам не нужно будет выполнять синтаксический анализ, потому что в этом нет необходимости. Термин Language Workbench указывает на то, что Jetbrains MPS — это целая система технологий, созданная, чтобы помочь вам создать собственный язык программирования: все, от самого языка до IDE и вспомогательных инструментов, разработанных для вашего языка. Вы можете использовать его для создания любого языка, но возможность и необходимость создавать все делает его идеальным для создания предметно-ориентированных языков, которые используются для определенных целей определенной аудиторией. , описывается его авторами как «язык программирования общего назначения, а также первая в мире экосистема для разработки и развертывания новых языков». Это педагогический инструмент, разработанный с практическими амбициями, у которого есть даже манифест. Это язык, созданный для создания других языков, в котором есть все: от библиотек для разработки приложений с графическим интерфейсом до IDE и инструментов для разработки логических языков. Это часть семейства языков Лисп, и он говорит все, что вам нужно знать: либо все, либо ничего, и всегда в стиле Лиспа.

Статьи

    , обзор того, как и зачем создавать язык для JVM. , хороший ответ на вопрос, который дает обзор необходимых шагов и опций, доступных для выполнения задачи по созданию компилятора. , отличный обзор и презентация Racket от ACM Journal, с кодом. , документ, в котором обсуждается реализация Scheme, в которой основное внимание уделяется надежности и управляемости. Он создает интерпретатор, который будет генерировать своего рода байт-код на лету. Затем этот байт-код будет немедленно выполнен виртуальной машиной. Название происходит от того факта, что оригинальная версия была построена за 48 часов. Полный исходный код доступен на сайте проекта.

Учебники

Книги

    , основное внимание здесь уделяется созданию языка, работающего на практике. В нем объясняется, как генерировать байт-код, ориентироваться на LLVM, создавать редактор для вашего языка. После прочтения книги вы должны знать все, что нужно для создания удобного и продуктивного языка. Кстати, мы написали эту книгу. , это 100-страничный PDF-файл и скринкаст, в которых рассказывается, как создать язык программирования с использованием Ruby или JVM. Если вам нравится быстрый и грязный подход, эта книга поможет вам начать работу за короткое время. , это прагматичная книга, которая по-прежнему учит правильному подходу к компиляторам/интерпретаторам. Только что вместо академической направленности у нее инженерная. Это означает, что он полон кода Java, а также тут и там разбросан UML. И техники, и код немного устарели, но это по-прежнему лучшая книга, если вы инженер-программист и вам нужно сделать что-то, что работает правильно, прямо сейчас, то есть через несколько месяцев после того, как надлежащий процесс рецензирования завершится. завершенный. , это книга от автора ANTLR, который также является профессором компьютерных наук. Так что это книга, сочетающая теорию и практику, которая проведет вас от начала до конца, от синтаксического анализа до компиляторов и интерпретаторов. Как следует из названия, он фокусируется на объяснении известных рабочих шаблонов, которые используются при создании такого рода программного обеспечения, а не на непосредственном объяснении всей теории, за которой следует практическое применение. Это книга, которую нужно получить, если вам нужно что-то, что действительно работает прямо сейчас. Его даже рекомендовал Гвидо ван Россум, разработчик Python. , это очень своеобразная книга, предназначенная для того, чтобы научить вас, как использовать язык C и как создать свой собственный язык программирования, используя мини-Lisp в качестве основного примера. Вы можете прочитать ее бесплатно онлайн или купить. Это означало, что вы будете преподавать C, но вы уже должны быть знакомы с программированием. Есть даже фото Майка Тайсона (потому что… сюсюкает): все такое странное, но завораживающее. , это хорошая и постоянно обновляемая онлайн-книга о том, как использовать Racket для создания языка программирования. Книга состоит из серии учебных пособий и частей пояснений и ссылок. Это книга, которая технически бесплатна, но вы должны платить за нее, если вы ей пользуетесь. , интересная книга, в которой объясняется, как создать язык программирования с нуля с помощью Racket.Автор - преподаватель, но хороший и понятный. На самом деле, есть также серия записей сопутствующих лекций, которые иногда имеют сомнительный звук. Существует обновленная версия книги и записей, но новая книга имеет другую направленность, потому что она также предназначена для обучения языку программирования. Он также не использует Racket. Если вы совсем не разбираетесь в программировании, вы можете прочитать новую версию, если вы опытный, вы можете предпочесть старую. , — отличная книга для людей, которые хотят учиться на примерах и использовать подход, основанный на тестировании. Он охватывает все уровни проектирования DSL, от проектирования системы типов до синтаксического анализа и построения компилятора. , представляет собой введение в создание компиляторов и интерпретаторов с JVM в качестве основной цели. Сопутствующие материалы (презентации, исходный код и т. д.) размещены на специальной веб-странице. В нем хороший баланс теории и практики, но он явно задуман как учебник. Так что не ждите большого количества повторно используемого кода. Это типичный учебник еще и в том смысле, что он может быть отличным и продуктивным чтением, если у вас уже есть необходимая подготовка (или учитель), иначе вы рискуете запутаться. , бесплатная книга, в которой объясняется, как создать простой функциональный язык программирования от синтаксического анализа до интерпретатора и компилятора. С другой стороны: «эта книга дает практический подход к пониманию реализаций нестрогих функциональных языков с использованием ленивой редукции графов». Кроме того, ожидайте много математики. , отличная книга, объясняющая теорию и практику создания DSL с использованием языковых верстаков, таких как MPS и Xtext. Это означает, что помимо традиционных аспектов проектирования, таких как синтаксический анализ и интерпретаторы, он охватывает такие вещи, как создание IDE или тестирование DSL. Он особенно полезен для инженеров-программистов, поскольку в нем также обсуждаются аспекты разработки программного обеспечения и бизнес-аспекты DSL. Другими словами, в нем говорится о том, почему компания должна создавать DSL. , интересная книга, в которой подробно объясняется, как разработать и реализовать язык семейства Lisp. В нем описываются «11 интерпретаторов и 2 компилятора» и множество дополнительных деталей реализации, таких как оптимизация компилятора. Очевидно, что она наиболее полезна для людей, заинтересованных в создании языка, связанного с Лиспом, но она может быть интересна для всех.

Обзор

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

На данный момент у нас есть два совета для вас:

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

У вас должно быть все необходимое для начала работы. Если у вас есть вопросы, советы или идеи, которыми вы можете поделиться, не стесняйтесь писать по адресу federic [email protected] . Мы читаем и отвечаем на каждое письмо.

Благодарим Кришну и сотрудников Hacker News за несколько хороших предложений.

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

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

Низкоуровневые языки программирования

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

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

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

Но зачем вам в любом случае изучать низкоуровневые языки и низкоуровневое программирование? Причин много, в том числе:

Некоторые части наших операционных систем и даже вирусы написаны на ассемблере.

Если вы хотите заниматься программированием GPU с использованием языков высокого уровня, таких как CUDA или OpenCL, вам необходимо понимать низкоуровневое программирование.

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

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

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

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

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

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

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

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

Первыми языками высокого уровня, разработанными в 50-х годах, были FORTRAN, COBOL и BASIC. Они позволяли задавать программы абстрактно, независимо от точных деталей аппаратной архитектуры компьютера. (Вольфрам, 2002 г.).

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

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

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

Некоторые языки программирования используют как компиляторы, так и интерпретаторы. Если бы вы писали программу на Java в текстовом редакторе, то при ее компиляции с помощью компилятора Java вы фактически создавали бы нечто, называемое байт-кодом. Байт-код можно рассматривать как промежуточный этап между исходным кодом и объектным кодом. Когда компьютер выполняет программу Java, библиотечные программы на этом компьютере интерпретируют байт-код. Это позволяет Java быть независимым от платформы — пользователю нужны правильные библиотеки времени выполнения для Java на его компьютере, чтобы выполнять программы.

В чем разница между языками низкого и высокого уровня?

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

Язык высокого уровняЯзык низкого уровня
Язык, удобный для программистаЯзык, удобный для машин
Язык высокого уровня менее эффективно использует памятьЯзык низкого уровня высокая эффективность памяти
Проще отлаживатьОтносительно сложно отлаживать
Проще поддерживатьОтносительно сложный в обслуживании
ПортативныйНе переносимый
Может работать на любая платформаЗависит от машины
Требуется компилятор или интерпретатор для переводаТребуется ассемблер для перевода
Широко используется в программированииВ настоящее время редко используется в программировании

Написание собственных программ/программ

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

Что такое программная инженерия?

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

Давайте рассмотрим различные определения разработки программного обеспечения:

IEEE в своем стандарте 610.12-1990 определяет программную инженерию как применение систематического, упорядоченного, вычислимого подхода к разработке, эксплуатации и обслуживанию программного обеспечения.

Фриц Бауэр определил это как "установление и использование стандартных инженерных принципов. Это помогает вам получить экономичное программное обеспечение, которое является надежным и эффективно работает на реальных машинах".

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

Но включает ли разработка программного обеспечения нечто большее, чем написание кода?

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

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

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

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

Системный анализ — это когда команда проекта анализирует объем проекта и соответствующим образом планирует график и ресурсы.

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

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

Тестирование является важной частью процесса обнаружения и исправления потенциальных ошибок.

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

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

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

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

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

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

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

Теперь, когда мы знаем весь процесс создания программного обеспечения, мы вернемся к написанию кода и языкам программирования.

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

Что такое программная IDE?

Software IDE расшифровывается как "интегрированная среда разработки" и представляет собой приложение, которое разработчики используют для создания компьютерных программ. В данном случае "интегрированный" относится к способу объединения нескольких инструментов разработки в одну программу. Например, типичная IDE включает в себя редактор исходного кода, отладчик и компилятор. Большинство IDE также предоставляют интерфейс проекта, который позволяет программистам отслеживать все файлы, связанные с проектом. Многие также поддерживают контроль версий.

Некоторые IDE предоставляют "среду выполнения" (RTE) для тестирования программного обеспечения. Когда программа запускается в RTE, разработчик может отслеживать каждое событие, происходящее в тестируемом приложении. Это может быть полезно для поиска и исправление ошибок и определение источника утечек памяти.Поскольку IDE предоставляют централизованный пользовательский интерфейс для написания кода и тестирования программ, программист может быстро внести изменения, перекомпилировать программу и снова запустить программу.Программирование по-прежнему является тяжелой работой, но IDE программное обеспечение помогает упростить процесс разработки.

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

Согласно Википедии, существует около 700 языков программирования, включая эзотерические языки программирования. Другие источники, в которых перечислены только известные языки, по-прежнему насчитывают впечатляющие 245 языков. Другой список, называемый HOPL, который утверждает, что включает все когда-либо существовавшие языки программирования, оценивает их общее число в 8945. По некоторым оценкам, их может быть до 25 000.

Но как выбрать язык программирования для изучения? И можно ли научиться программировать? Ответ - да! Вы можете и должны это делать, поскольку потребность в знании кода для различных профессий возрастает.

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

Если вы хотите, чтобы ваши дети изучали язык, рекомендуется Scratch, а когда вы закончите с ним, вам рекомендуется перейти на Python.

Если вы хотите выучить язык, чтобы получить работу в Facebook или Google, лучшим выбором может быть Python. И бывает, что Python — отличный язык для выбора в целом, так как он считается одним из относительно простых языков для изучения.

Если вы хотите выучить «простой» язык, по мнению разработчиков, вам лучше выбрать Python, Ruby и JavaScript. Эти языки могут дать вам прочную основу для логики и синтаксиса программирования. другой язык будет легче подобрать.

Если вы хотите разрабатывать игры, чаще всего выбирают язык C++.

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

Если вы хотите работать над проектами для iPhone, то есть проектами, связанными с iOS, ваш выбор — Swift.

Если вы хотите работать над проектами, связанными с Android, ваш выбор — Java или Kotlin.

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

Если вас привлекают серверы (внутренняя веб-разработка) и базы данных, вы можете выбрать язык Ruby или Python.

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

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

Что заставило вас заинтересоваться программированием?

Чем вы хотите заниматься как программист?

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

Переводчики, компиляторы, интерпретаторы и ассемблеры — все это инструменты программирования, которые преобразуют код в другой тип кода, но каждый термин имеет особое значение. Все вышеперечисленное каким-то образом работает над переводом языка программирования высокого уровня в машинный код, понятный центральному процессору (ЦП). Примеры процессоров включают процессоры Intel (например, x86), AMD (например, APU Athlon), NXP (например, PowerPC) и многие другие. Важно отметить, что все трансляторы, компиляторы, интерпретаторы и ассемблеры сами по себе являются программами.


Переводчики
Наиболее общим термином для программного средства преобразования кода является «переводчик». Транслятор в терминах программирования — это общий термин, который может относиться к компилятору, ассемблеру или интерпретатору; все, что преобразует код более высокого уровня в другой код высокого уровня (например, Basic, C++, Fortran, Java) или код более низкого уровня (т. е. язык, понятный процессору), такой как язык ассемблера или машинный код. Если вы не знаете, что на самом деле делает этот инструмент, кроме того, что он выполняет некоторый уровень преобразования кода для определенного целевого языка, то вы можете смело называть его переводчиком.

Компиляторы
Компиляторы преобразуют код языка высокого уровня в машинный (объектный) код за один сеанс. Компиляторам может потребоваться некоторое время, потому что они должны одновременно транслировать высокоуровневый код на машинный язык более низкого уровня, а затем сохранять исполняемый объектный код в памяти. Компилятор создает машинный код, который работает на процессоре с определенной архитектурой набора инструкций (ISA), которая зависит от процессора. Например, вы не можете скомпилировать код для x86 и запустить его на архитектуре MIPS без специального компилятора. Компиляторы также зависят от платформы. То есть компилятор может преобразовать C++, например, в машинный код, предназначенный для платформы, на которой работает ОС Linux. Однако кросс-компилятор может генерировать код для платформы, отличной от той, на которой он работает сам.

Кросс-компилятор, работающий на компьютере с Windows, например, может генерировать код, который работает в определенной операционной системе Windows или на платформе Linux (операционная система). Компиляторы исходного кода переводят одну программу или код в другую на другом языке (например, с Java на C). Таким образом, выбор компилятора означает, что сначала вам нужно знать ISA, операционную систему и язык программирования, которые вы планируете использовать. Компиляторы часто поставляются в комплекте с другими инструментами, и у каждого производителя процессоров есть по крайней мере один компилятор или пакет инструментов разработки программного обеспечения (включая компилятор). Часто программные инструменты (включая компилятор) бесплатны; в конце концов, ЦП совершенно бесполезен без программного обеспечения, которое на нем работает. Компиляторы сообщат об ошибках после завершения компиляции.

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

Интерпретаторы, однако, полезны в тех областях, где скорость не имеет значения (например, отладка и обучение), и можно взять весь интерпретатор и использовать его на другом ISA, что делает его более переносимым, чем компилятор при работе. между аппаратными архитектурами. Существует несколько типов интерпретаторов: интерпретатор, управляемый синтаксисом (т. е. интерпретатор абстрактного синтаксического дерева (AST)), интерпретатор байт-кода и многопоточный интерпретатор (не путать с потоками параллельной обработки), интерпретатор точно в срок (разновидность гибридного интерпретатора/компилятора) и некоторые другие. Инструкции по созданию интерпретатора можно найти в Интернете.[i] Примерами языков программирования, использующих интерпретаторы, являются Python, Ruby, Perl и PHP.

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

Читайте также: