Язык Nemerle как альтернатива «классическим» языкам программирования в учебных заведениях

Автор: Драч А.Н., Ерохин Г.В.

Журнал: Экономика и социум @ekonomika-socium

Рубрика: Информационные и коммуникативные технологии

Статья в выпуске: 6-1 (19), 2015 года.

Бесплатный доступ

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

Языки программирования, с-подобные языки, парадигма программирования

Короткий адрес: https://sciup.org/140114913

IDR: 140114913

Текст научной статьи Язык Nemerle как альтернатива «классическим» языкам программирования в учебных заведениях

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

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

Язык Nemerle начали разрабатывать три аспиранта в Вроцлавском университете в 2003 году.

Первый комплекс для программирования на Nemerle, включавший компилятор языка с набором библиотек для встраивания в Microsoft Visual Studio 2008, компилятор для работы без Visual Studio, версию, интегрируемую с Visual Studio 2010, а также исходные коды, был выпущен в 2011 году под BSD-подобной лицензией, допускающей его свободное использование.

Такой состав ПО обусловлен тем, что Nemerle совместим на уровне библиотек как с C#, так и с VisualBasic. Все компоненты и библиотеки, доступные в .Net, можно использовать из Nemerle. К тому же, если в публичном интерфейсе не используются вариантные типы данных, библиотеку Nemerle можно использовать из C# или VB без изменений, как это обычно происходит с языками, не разрабатываемыми под платформу, а адаптируемыми к ней.

В Nemerle можно выделить 3 части:

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

  •    часть с макросами из стандартной библиотеки Nemerle.Core.

  •    часть с макросами из других пространств имен макро-библиотек (стандартной или сторонних).

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

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

Функции (библиотечные, пользовательские) и другие действия можно выполнять последовательно, отделяя «;», как в Pascal, в C#, Java и C++.

Перечислим некоторые особенности языка: [1,2]

  • 1.    Использование интеллектуальной IDE (модуля расширения для Microsoft Visual Studio), что позволяет упростить процесс работы с кодом.

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

  • 3.    Возможность использования как «{}» для отделения классов, составных операторов, тел методов, так и описание структуры программы, основанное на отступах, как в Python.

  • 4.    Идентификаторы могут состоять из букв, цифр, знаков подчёркивания и апострофа. В описании переменных и методов присутствует схожесть с Pascal («переменная : тип»), но при этом задать несколько имен переменных нельзя.

  • 5.    Кроме подключения всех вложенных пространств имён, команда using позволяет напрямую подключить конкретный тип, что позволяет использовать методы классов или константы перечислений без квалификации имени. При этом, язык поддерживает вывод типов, что позволяет не указывать типы внутри кода.

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

  • 7.    За счет использования модификатора mutable при объявлении переменных в синтаксисе неизменяемых объектов, поддерживается

  • 8.    Для создания экземпляра класса не обязательно указывать ключевое слово new, поскольку оно выполняется вызовом конструктора — «ИмяКласса(параметры конструктора)».

  • 9.    Стандартная библиотека содержит тип list (однонаправленный связанный список) с особым синтаксисом, значительно упрощающим работу с ним. Так же ведены типы variant (аналог алгебраических типов в функциональных языках) и tuple (безымянная, незменяемая структура данных, содержащая несколько одно- или разнотипных элементов).

  • 10.    Введена конструкция сопоставления с образцом match. Она обладает большими возможностями по сравнению с конструкцией переключения switch и была позаимствована из ML-подобных языков. В стандартной библиотеке языка есть 3 макроса, реализующих условные операторы:

идеология функционального программирования.

  • a.    if (с обязательной ветвью else),

  • b.    when (как «if без else»);

  • c.    unless (как отрицание when или «when (! условие) выражение»).

  • 11.    Сопоставление с образцом, алгебраические типы данных, макросы позволяют описывать сложную логику и делают решение задачи более простым и понятным, чем на языках, не обладающих такими средствами (C#, Java, VB или C++). При этом полученный результат можно занести в библиотеку и использовать в проектах на других языках.

  • 12.    В коде можно использовать специальный подстановочный символ-заместитель «_», подавляющий предупреждение компилятора о неиспользуемой переменной. В C# это происходит автоматически и часто приводит к ошибкам, в то время, как Nemerle выдает предупреждение. Использование «_» вместо имени локальной переменной, как и использование стандартного макроса ignore, позволяет указать намеренное игнорирование результата.

  • 13.    Nemerle - статически типизированный, по сравнению с Ruby или Python, что позволяет получать легкий в исполнении код (сравнимый с C/C++ и C#) и находить некоторые ошибки еще до запуска программы.

  • 14.    В функциях Nemerle отсутствуют «return», «break», «continue» и другие императивные операторы перехода, позволяющие управлять ходом вычисления, по средством прерывания функции или цикла. Они реализуются в виде макросов на базе специальной конструкции.

При этом, все перечисленные операторы переписываются соответствующими макросами в оператор match.

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

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

Список литературы Язык Nemerle как альтернатива «классическим» языкам программирования в учебных заведениях

  • Nemerle. . Режим доступа: http://ru.wikipedia.org/wiki/Nemerle
  • Чистяков В.Ю. Язык Nemerle. . Режим доступа: http://rsdn.ru/article/Nemerle/TheNemerleLanguage.xml#1
Статья научная