Как сделать свой язык программирования – Создаем свой язык программирования с блэкджеком и компилятором

Как создать свой язык программирования? Теория и практика / itProger

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

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

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

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

Изучение компьютера

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

Зачем вам новый язык программирования?

Заранее определитесь с предназначением языка. Существует 2 основных направления – универсальный инструмент или узкоспециализированное решение. 

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

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

Каких концепций будет придерживаться новый язык?

На этапе планирования следует ответить на ряд ключевых вопросов, они зададут направление развития:

  • интерпретация или компиляция? Код для компилирования будет преобразовываться в машинный, затем исполняться. При использовании интерпретатора код обрабатывается построчно. На вопрос нет правильного ответа, перед разработчиком стоит сложный выбор, в какую сторону уклон делать: функциональность, безопасность, скорость работы, удобство и т. д.;
  • типизация? Если да, то разработчику будет необходимо вручную устанавливать типы данных. В противном случае придётся описывать систему, которая будет определять типы;
  • в языке будет встроен автоматический алгоритм очистки мусора или управление отдать в руки пользователя?
  • планируемая модель языка программирования: структурное, ООП, функциональная логика. Кто знает, может вам удастся разработать что-то совсем иное;
  • как язык будет себя вести в отношении конкурентов, вставка из других языков планируется? Учитывать этот аспект важно при изначальной разработке языка;
  • планируется поддержка базового функционала языка или передать все функции на сторону фреймворков?
  • какой ожидается конечный вид архитектуры программы?

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

Придумайте синтаксис для языка

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

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

PS: этот язык является лишь шуткой и его не стоит воспринимать как реальный язык. Посмотреть язык вы можете на их официальном сайте.

Назовите ваше детище

Вопрос с одной стороны простой, с другой – нет. Многие разработчики не выбирают глубокое и замысловатое название, отдают предпочтение простоте и лёгкости запоминания. Особенно эффективно давать имя языку с явной ассоциацией, чтобы потенциальный пользователь запоминал название после первого-второго произнесения. Сложные аббревиатуры и названия из 3 и больше слов – сложно запоминаются и быстро теряются в памяти. Имя должно быть относительно коротким и запоминающимся.

Выберите фундамент языка

Выбор языка, который будет взят за основу – это важнейший шаг. Если знаний достаточно, можно писать на ассемблере или даже машинном коде, но в современном мире лучше присмотреться к другим высокоуровневым языкам: C, C++, Swift, Pascal и другие компилируемые варианты пригодные для интерпретируемых решений. В качестве достойных языков с интерпретаторами стоит присмотреться к: Java, JavaScript, Ruby, Python – для компиляторов. Перечисленные пары снизят потерю скорости работы.

Лексер и парсер

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

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

Создание основной библиотеки

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

Создание и написание тестов

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

Выпуск языка в свет

После завершения работы обязательно следует загрузить язык в сеть. Здесь вы найдёте единомышленников и людей, которые помогут совершенствовать детище. Публикация – это логическое завершение процесса, не стоит прятать работу в ящик, поделитесь ей.

itproger.com

Разные языки программирования и их области применения. Лекция в Яндексе

Наш первый пост в этом году мы решили посвятить очень базовой теме, лекция на которую была прочитана в Малом ШАДе. Занимаются в нём старшеклассники, которым интересны технологии, отсюда специфичность изложения — лекция будет особенно интересна тем, кто только начинает программировать и задумывается о том, в каком направлении развиваться. Для них же у Яндекса есть курс «Введение в программирование (С++)», который можно пройти на платформе Stepic.org.

Лектор Михаил Густокашин — куратор академических программ Яндекса, директор центра студенческих олимпиад факультета компьютерных наук ВШЭ. Михаил подготовил десятки победителей и призёров Всероссийских олимпиад по программированию.

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

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

История языков программирования


Давайте начнём с самого начала. В самом начале у компьютеров не было даже клавиатуры! То есть всё было очень плохо — у них не было ни клавиатуры, ни экрана, были перфокарты (это такие штучечки с дырочками или с отсутствием дырочек). Соответственно, то ли штырьки туда засовывали, то ли там светом светили. Если есть дырочка (или наоборот нет) — это означало нолик или единичку. И программы в то время писали с помощью машинных кодов — у каждой операции в компьютере (сложение, вычитание, какие-то более сложные операции) был какой-то код машинный. Люди сами по табличке выбирали этот код, всякие адреса в памяти, всё это выбивали руками и засовывали в считыватель — и оно всё считалось. Конечно, работа программиста была, наверное, тогда не особо интересной — проделывать дырочки — и с развитием науки и техники, конечно, начали придумывать всякие, более «интересные» штуки. Например, ассемблер (Assembler), который уже несколько облегчал жизнь.

Ну, как он облегчал жизнь? Вместо запоминания того, что там какой-то «волшебный» код у команды, использовались всякие слова, похожие на «человеческий» английский язык — какие-нибудь add или mov — ну и затем перечислялись регистры или области памяти, переменные, с которыми нужно эти операции производить. Но понятное дело, что это в общем-то тоже требовало достаточно большого напряжения ума, чтобы держать у себя в голове, в каком регистре у нас что лежит, где какие переменные и что вообще происходит. Почему так происходило? Потому что компьютеры были «глупые» и ничего более «умного» понять не могли. Вообще-то и собрать из ассемблера машинный код тоже требует времени, памяти (по тем временам было конечно мало её).

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

Старые и мертвые языки


Одним из первых языков стал Fortran. Кстати, его тоже ещё выбивали на перфокартах — были специальные перфокарты для выбивания программ на Fortran’е. Но если вы сейчас возьмёте этот Fortran — по-моему, он даже где-то между 50-60 гг. появился — и попытаетесь на нём что-то написать, то вам будет очень неприятно, я вам гарантирую! Современный Fortran до сих пор живой, но уже довольно сильно отличается от того, что было раньше.

Другие языки — сейчас напишу одну штуку, о которой наверное вы если и слышали, то только на всяких мероприятиях, где рассказывают про историю программирование — это COBOL. Это был язык для написания бизнес-приложений. Что такое бизнес-приложения? Какие-нибудь транзакции в банках, еще что-то, всё это писали на Коболе. У нас, понятное дело, не очень популярен. Я думаю, программиста на Коболе, в Москве, вы найдёте с большим трудом. А где-нибудь не в Москве -— с ещё большим трудом. Но, что удивительно, ещё 10 лет назад больше половины всего кода, написанного человечеством, было написано на Коболе. И до сих пор, значительная часть всяких банковских транзакций идёт с помощью программ, написанных на нём (COBOL), и до сих пор люди на нём что-то пишут.

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

Старые, но живые языки


Алгол придумали в Европе, а Фортраном пользовались в основном в Штатах — больших отличий нет. Какая тенденция заметна? Сначала всё было сложно и чтобы писать нужно было быть чуть ли не инженером, электротехником, понимать, где какие контакты замыкаются и ещё что-то для программирования. Потом тоже нужно было сидеть с листочками и считать память, смотреть за ней. И постепенно всё становилось проще, проще, проще и дальше ещё проще для программиста — как можно меньше думать человеку, как можно больше делать автоматически. Примерно в конце вот этого периода (лектор указывает на Алгол и Кобол) начинают появляться языки, которые в каком-то смысле «дожили» до наших дней.

BASIC. Возможно, до сих пор некоторые люди на нём что-то пишут, по крайней мере я видел, что в некоторых заведениях учат на QBasic’е — такое синее окошко, где написано «1989». В общем, «вовсю» живёт! Он придумывался как язык для не программистов. В то время программист была такая очень специализированная профессия. А здесь тебе говорят: «Вот у нас есть классный язык Basic, и любой разумный человек возьмёт и напишет программу на нём — легко». Опять же тот Бейсик и современный Бейсик — это огромная разница. Всякие вот эти строки с нумерацией через 10, всякие GOTO и прочий ужас — они к современному Бейсику уже не имеют никакого отношения и даже к Бейсику 89-го года они имеют мало отношения.

Ещё одна забавная история — язык Паскаль, широко известный в вузовских кругах, в основном в России и в странах бывшего Советского Союза. Он использовался и продолжает использоваться на удивление как учебный язык. Во всём остальном мире он поменьше распространён, но тоже живёт и здравствует. Есть такой человек Вирт — вот он учёный, теоретик. Он участвовал в обсуждении Алгола, ему не понравилось то, что получилось, и он придумал свой язык — Pascal. А потом фирма Borland (и до этого многие другие фирмы — Apple занималась, в частности) взяли и всё испортили. У него была красивая теория, стройная — «всё будет хорошо», — а они взяли и напихали туда того, что людям нужно для работы. Ну, и получилось не так красиво, как он хотел.

И, наконец, C. Си придумали инженеры. Если Паскаль придумал учёный, то Си придумали Керниган и Ритчи, они работали инженерами в Bell. Как это произошло? В то время на этих языках (лектор указывает на Fortran, COBOL, Algol) ничего системного написать было нельзя. Что такое «системное»? Например, операционную систему, драйвера какие-нибудь, ещё что-то. Эти языки предназначались для математических расчётов, для бизнес-расчётов, для всего такого. А всё остальное писали на Ассемблере. Были какие-то языки, они сейчас умерли, то есть язык Си появился не сразу от Ассемблера, а через какие-то промежуточные вещи.

Суть в чем? Керниган и Ритчи любили играть в игрушку Asteroids — летает космический корабль, и тут есть астероиды, он в них стреляет, и они разваливаются на части. У них был сервер, на котором они играли, но там было много народу, и игрушка тормозила. И они обнаружили у себя где-то в кабинете, что у них стоит какой-то компьютер, которым никто не пользуется. Но было проблема — он другой архитектуры был, а игра была написана на Ассемблере.

Они её переписали, конечно, даже впилили фичи какие-то, чтобы играть на нём. Но это навело их на мысль, что переписывать под новую архитектуру каждый раз — это не очень умно. И они решили написать такой язык высокого уровня, который будет подходить для системного программирования, то есть, в котором можно будет управлять памятью, в котором можно будет понимать где-что лежит и как обращаться к этим кусочкам памяти. И так появился язык Си, который оказал огромное влияние на всё дальнейшее. Они все (лектор показывает на Алгол, Фортран и прочие упомянутые языки) оказали большое влияние, но вот Си — прямо да…

Соответственно, это был основной язык в Unix — операционной системе, которая в то время была ещё популярнее, чем сейчас. И примерно к 80-м годам ситуация была какая-то вот такая (лектор показывает на Basic, C и прочие упомянутые языки). Допустим, что всё это у нас уже потихоньку умерло (лектор стирает упоминания об Ассемблере, Фортране и Алголе)… И в 80-е годы компьютеры стали меньше, умнее, дешевле, и людям захотелось всяких странностей, чтобы жить стало ещё лучше, жить стало ещё веселее.

Языки родом из 80-х


Одна из первых странностей — это был язык C++. Язык C имеет огромное количество недостатков (ну просто вообще огромное) — на нём можно делать вообще всё, в том числе стрелять себе в ногу, стрелять себе в ногу с выдумкой, в другую ногу, одной ногой стрелять в другую ногу, в общем — что угодно делать. Но при этом некоторые архитектурные вещи там делаются довольно сложно — опять же, как и в Ассемблере, нам приходится всё время следить, где мы, чего и какую память выделили; она там всё время «течёт» куда-то эта память -— то есть мы выделили, забыли удалить, удалили не то, вылезли за пределы памяти, в общем — огребли кучу проблем.

C++ создавался сначала как набор дополнений к языку C, который облегчит разработку. В то время стало модно объектно-ориентированное программирование и люди решили, что всё можно описать в виде иерархии, то есть — есть у вас мячик (абстрактный), вы от него наследуете футбольный мяч, волейбольный мяч, ещё один абстрактный мяч. Тогда было модно, что «мы сейчас пишем всё в виде какой-то иерархии, и всё будет хорошо, жизнь наладится, всё станет прекрасно и всё». C++ в каком-то смысле реализовывал этот объектный подход — это не был первый язык объектно-ориентированного программирования, но он стал достаточно популярным и в нём начали появляться всякие фичи. При этом C++ сохранял почти полную совместимость (на тот момент) с языком C, программа написанная на Си в 99% случаев успешной компилировалась как C++-ная и даже работала также. Это было задумано, чтобы с Си было легко перейти на C++.

Помимо объектного подхода (в C++) достаточно быстро появилась стандартная библиотека шаблонов (STL). Я думаю, что в школе те, кто ещё учил Паскаль, обнаруживали, что у вас там, во-первых, нет встроенной сортировки (в древнем, синем Борланд Паскале, сейчас она уже есть в современных версиях) — там есть пример (исходник) сортировки, его можно скопировать и вставить. Но если вы хотите здесь отсортировать целые числа, здесь хотите вещественные числа, а здесь строки, которые можно между собой сравнивать, вам приходилось писать три разные сортировки, которые делают абсолютно одно и тоже, просто у них разные типы данных. Вот это не очень хорошо и шаблоны, которые не сразу появились в C++, эту проблему здорово облегчили. То есть, у вас была абстрактная программа, которая что-то, что может между собой сравниваться, успешно сортировала.

Скриптовые языки из 90-x


Но время не стояло на месте, в 80-е годы ещё много чего интересного происходило. Но где-то на рубеже 80-х и 90-х компьютеры стали настолько хороши, что можно уже было делать совсем странные и очень неэффективные вещи. В частности, это были скриптовые языки, которые не компилировались в машинный код, а интерпретировались. Бейсик тоже в какое-то время интерпретировался, но эти скриптовые языки были предназначены в основном для обработки текстов — это, например, Perl, Python (он был тогда не очень знаменит), PHP, Ruby — вот те скриптовые языки, которые в той или иной степени живут до сих пор (они все успели появиться до 2000 года, даже сильно раньше).

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

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

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

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

PHP появился как… случайно. Один человек довольно быстро перестал заниматься этим — делал свою страничку какую-то, была у него гостевая книга какая-то, ещё что-то, какие-то штуки. И он написал набор макросов каких-то для Перла, которые были похожи на Си, потому что он на Си умел, просто потому что ему было так удобно. И назвал это Personal HomePage. Расшарил и говорит: «Люди, смотрите какую штуку я написал, здесь всё намного понятнее, чем на Перле и можно править». И людям это понравилось.

Потом он это дело бросил. В общем, в итоге этот PHP стал жить и стал со временем гораздо популярнее, чем Perl. Но вот эта его «родовая травма» (задумка как набор макросов для Перла) с ним сыграла довольно злую шутку. Язык получился странный. То есть он развивался сам по себе, его никто не проектировал, никто не администрировал процесс развития (ни компания, ни какой-то человек), а было много группок, каждая из которых пилила то, что им нравится. В итоге там функции называются по-разному, даже стиля нет, всё через подчёркивания, в общем как попало, настройки лежат здесь и там, и как всё это будет работать не очень понятно. Зато можно сесть и через два часа писать на PHP, потому что он так задумывался.

Python и Ruby: Ruby сейчас менее популярен, Python как-то лучше «выструган», давайте о нём потом поговорим. Понятное дело, что в те времена это были (лектор указывает на Perl, Python, Ruby, PHP) сильно специализированные языки для сильно специализированных целей. В общем случае никакого системного программирования, никакой бизнес-логики никто на них не писал в то время и сейчас не очень много это делает.

Компилируемые языки из 90-х


Мы пойдём примерно в те же времена, но в другую сторону. У нас на тот момент C++ применялся практически для всего, что нужно было писать не для веба, не для обработки текста, а для просто приложений, для операционных систем, для игрушек — в общем, для чего угодно. Но C++ — это жуткий язык на самом деле. Почему? Потому что, во-первых, он наследовал из-за обратной совместимости все проблемы Си. Там можно было по-прежнему убиться миллионом разных способов, тех же самых, что были в Си (естественно, добавились и новые способы в C++). При этом, если писать всё хорошо и правильно, как было задумано авторами C++, то, конечно, старыми сишными способами уже убиться было нельзя, и вроде как их стало поменьше. Тем не менее, у него была очень странная объектная модель своеобразная. Разбиение программы на модули, на кусочки какие-то вообще пришло из Си (если include вы умеете писать на Си или на C++ — фактически это было задумано как просто вставить текст библиотеки в вашу программу, в итоге, когда вы пишите кучу инклюдов у вас всё — если «примитивно», как это было в самом начале — у вас всё вставляется в один файлик и потом всё это жутко долго компилируется, потому что по несколько раз ходит. Тот же Паскаль, Виртовский, был в этом плане намного продуманнее, более поздние версии стали ещё лучше.

В общем, недостатков у C++ очень много. Квалификация у программиста должна была быть высокая, чтобы писать на C++, и стоили такие программисты дорого (и подготовка, и ещё чего-то, то есть найти на рынке программистов сложно, платить им нужно много, ну и вообще это не дело...). А компьютеры у нас всё быстрее и быстрее считают, становятся всё дешевле, люди покупают себе новые компьютеры и хотят больше приложений, больше игрушек для телефона, в общем — больше радости.

Так и появилась Java (Ява). Там тоже связана довольно забавная история, как название появилось у этого языка. Там программисты, они всё время пьют кофе и в то время было модным пить кофе, который на острове Ява рос. Язык задумывался как язык для встраиваемых приборов, в частности для кофе-машины. Вот так и получилось название…
Что вообще началось с неё, что в ней было хорошее и почему же она завоевала большую популярность? Во-первых, они избавились от наследия Сишного, полностью. Никаких указателей, гораздно меньше способов отстрелить себе какую-нибудь часть тела и всё сломать. Во-вторых, они внедрили гораздо более свежие идеи в плане объектной модели — то есть C++ появился значительно раньше, чем Java и использовал более архаичную, «дикую» модель объектную. Ну а здесь (лектор указывает на Java) она была уже более продуманной тогда уже, и в теории люди думали, и на практике применяли и сделали всё намного круче.

И наконец, третье. У нас программки на Джаве собирались не в машинный код, а в код для виртуальной машины. То есть, у вас жила виртуальная машина (VM) JVM — Javовская. Ваши программки собирались в какое-то промежуточное представление и затем, с помощью это машины уже выполнялись. Что это дало? Во-первых, оно тормозило, во-вторых, оно жрало память со страшной силой, в третьих оно было переносимо куда угодно (теоретически) — хоть на кофеварку, хоть на кофемолку, хоть на компьютер, хоть на телефон мобильный. Это, с одной стороны хорошо, то есть вы написали просто реализацию виртуальной машины, потом свои джавовские программы запускаете везде. Но, с другой стороны, плохо, что на том же телефоне тогда было мало памяти, была низкая производительность и всё это ещё дополнительно начинало тупить и тормозить.

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

habr.com

Хочу изучать программирование. С какого языка проще начать?

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

Разумеется, сложные языки программирования изучают в специализированных ВУЗах и делают это на протяжении нескольких лет, но когда требуется быстро освоить навык и использовать его в написании элементарных программ – на помощь приходят лёгкие языки программирования. Их основные преимущества складываются из трёх пунктов:

  1. Можно изучить самостоятельно даже не имея базовых знаний;
  2. Несмотря на простоту освоения, обладают достаточно широким функционалом;
  3. На изучение требуется минимальное количество времени (обычно 1-2 недели).

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

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

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

Python

Hypertext Preprocessor (PHP)C#

Подходит для создания программ и сайтов

Широкие возможности при небольшом количестве кода

Универсальный язык программирования с разными версиями для разработки десктопных и мобильных приложений, а также веб-программирования

Формирует у пользователя собственный стиль написания кода

Подходит для создания программ, приложений, динамических и статистических веб-страниц

Создан компанией Microsoft, сочетает в себе простоту и надёжность

Большая база модулей позволяет быстро освоить основные алгоритмы

Большая библиотека модулей

Подходит для создания огромного количества приложений для всех платформ

Отличная база для освоения более сложных языков программирования

Модули легко модифицируются под нужды конкретного пользователя

Возможно использование для баз данных

Минимальный набор служебных символов

Если говорить об актуальности и востребованности универсальных языков программирования, то наиболее классический, но постепенно ослабляющий свои позиции – Python, однако для него создано огромное количество самоучителей, что способствует быстрому изучению. А вот самый востребованный — C#, ведь он стал отличной базой для изучения более сложных языков программирования и при этом позволяет создавать даже сложные приложения, в том числе и игры.

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

 JavaScript

HTML

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

Большое количество обучающих материалов, огромное сообщество пользователей

Минимальное количество алгоритмов позволяет быстро освоить язык

Низкая нагрузка на сервер при высокой скорости работы приложения

Простой синтаксис

Обратите внимание! Такие языки программирования как JavaScript и Java – не одно и то же: второй считается одним из наиболее сложных языков программирования, а его изучение с нуля практически невозможно, особенно без помощи профессионала.

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

Обратите внимание! Языки, предназначенные для создания программного обеспечения – самые узкоспециализированные, а также наиболее сложные с точки зрения изучения и освоения.

 

Objective C

 

 

Swift

Крайне высокая популярность и востребованность

Создан и «заточен» исключительно под платформы компании Apple

Хорошая совместимость практически со всеми существующими платформами

Упрощённый принцип работы с повторяющимися частями исходного кода

Динамическая типизация модулей

Повышенная безопасность

Простой синтаксис

Удобство чтения

Возможность управления памятью

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

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

www.internet-technologies.ru

Как программисты написали язык программирования без языка программирования?

Программисты не написали язык  программирования. Написали его люди. Первый язык программирования это ЯЗЫК (человеческий), который был снабжен обособленной функцией описания последовательности действий, которые надо было выполнить, чтобы получить РЕЗУЛЬТАТ. Программирование было не чего - либо, а действий ведомого человека. По русски: Хозяин давал указания что и как делать своим батракам/рабам. 
В последствии это переросло в управление ходом работ, под ходом работ, я подразумеваю какую-либо полезную деятельность человека - строительство, мореплавание, создание скульптур и прочее.
Как итог получался продукт: карты, здания, картины, машины.

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

Я думаю дал ответ на данный вопрос.

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

Данный вопрос такой же нелепый как если бы спросили: как дровосеки создали первый топор без топора? Да как - с помощью мозгов и острой необходимости быстро рубить деревья))

языки прог

На самом деле для создания языка программирования обязательно нужен другой язык программирования, более низкого уровня. Все потому, что ЯП существует не сам по себе, а в связке со своим Транслятором (называемый также Компилятором или Интерпретатором, в зависимости от конкретной реализации). Точно также и наш с вами Естественный, Великий и Могучий не существует сам по себе, а только в связке с нами, носителями способными транслировать в него свои мысли и интерпретировать чужие. Итак Транслятор любого языка - это тоже программа, но на каком языке ее пишут? Ответ: по сути он может быть написан на любом ЯП, однако для этих целей обычно используют низкоуровневый язык, т.е. такой, каждая команда которого соответствует лишь одной-двум конкретным инструкциям процессора. Для полноты картины добавлю, что все что делает Транслятор - это читает текст программы, разбирает ее в соответствии с синтаксисом данного языка, т.е. выделяет функции, переменные, определяет порядок их обработки и переводит полученный алгоритм на язык низкого уровня либо сразу в машинный код, понятный компьютеру.

Программист Владислав Янцен рассказал журналисту the-answer.ru, как появился язык программирования:

- Если кратко, то при появлении первых интегральных микросхем язык уже был придуман и запрограммирован на них. Вообще понятие языка программирования очень поверхностное. Для процессора есть только машинный код, который содержит определенный набор команд. Команда для процессора выглядит намного проще, чем мы пишем в языках программирования. Например, процессор получает команды: возьми цифру в памяти из ячейки 1, сложи со значением из ячейки 2 и помести результат в ячейку 3. Процессор умеет только складывать, вычитать, умножать, делить, считывать, записывать. А само арифметическо-логическое устройство в процессоре вообще умеет только складывать. Все остальное достигается комбинацией этих операций. Так что написать первую программу было более чем реально даже на простых единичках и ноликах, хоть это было сложно и очень долго.

Любая программа, которая делается на компьютере, в итоге превращается в набор самых примитивных операций.

Если тривиально, то сначала вся логика работала на транзисторах, транзистор имеет два состояния - открыт и закрыт (1/0). Когда появилась техническая возможность сохранять состояния на длительное время, блоки таких "включений" стали объединять, так появились перфокарты, где дырками обозначали состояния элемента блока. Блок из набора включений (бит) называют инструкции. Инструкциям стали давать символьные имена. На этом этапе программист писал программу, давая прямые инструкции процессору. Потом стали объединять набор таких инструкций в какое-либо завершенное действие и стали называть командой.

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

www.the-answer.ru

❶ Как создать язык программирования 🚩 Программное обеспечение

Инструкция

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

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

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

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

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

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

www.kakprosto.ru

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

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

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