Энциклопедия языков программирования ru.progopedia.comhttp://ru.progopedia.comНовые языки на ru.progopedia.comruSat, 20 Feb 2021 10:55:36 -0000Sparkel http://ru.progopedia.com/language/sparkel/ <p>Sparkel — это язык программирования зелёных потоков, созданный по подобию языка <a href="/dialect/spark/">SPARK</a>, подмножества языка <a href="/language/ada/">Ada</a>. По сравнению с аналогичными системами (<a href="/language/erlang/">Erlang</a>, <a href="/language/go/">Go</a>, <a href="/language/limbo/">Limbo</a>), имеет большую степень параллельности. Так, в упомянутых системах потоки создаются не средствами операционной системы, а средствами среды времени исполнения, предоставляемой языком программирования, и таких потоков может быть гораздо больше, чем потоков операционной системы, однако создавать зелёные потоки требуется явно. Например, в языке <a href="/language/go/">Go</a> нужно явно написать ключевое слово &#8220;go&#8221; перед вызовом процедуры. По замыслу создателей Sparkel программа должна иметь возможность быть рассечена в любом месте по мере необходимости. Любое выражение, такое как «F(X) + G(Y)», может быть вычислено параллельно, освобождая разработчика от необходимости вручную разбивать вычислительный процесс. Активные потоки конкурируют за работу. Также по сравнению с императивным <a href="/dialect/spark/">SPARK</a> изменена семантика циклов. Циклы тоже могут быть автоматически разбиты на параллельно обрабатывающиеся задания, но если это невозможно и нужно строго соблюдать последовательность, это указывается новыми ключевыми словами. </p> <p>Обратной стороной язвляется, например, отказ от исключений. В обычной императивном языке исключение прерывает исполнение программы в определённом месте, а в Sparkel элементы синтаксиса могут обрабатываться параллельно с разной скоростью, и концепция исключений не вписывается в эту модель исполнения. Также в Sparkel нет явных указателей. Вместо них есть «распахиваемые записи» с одиночными ссылками. Распахиваемая запись — это запись, наличие которой необязательно, то есть, значение таких переменных может отсутствовать, и место под поля записи в этом случае не выделено. Если запись распахнуть, семантически она становится аналогичной обычной записи, а на нижнем уровне выделяется память и присваивается указатель. Счётчика ссылок нет, и новую ссылку на ту же структуру нельзя создать. Можно только скопировать значение, получив полностью независимую реплику. Однако, чтобы всё же воспользоваться знанием о том, что на нижнем уровне используются указатели, вводится новая операция обмена двух переменных. Таким образом, язык остаётся удобным для параллельной обработки, но и острые углы срезаны. </p> <p>Также от других аналогов Sparkel выгодно отличается тем, что его трансляторы и виртуальная машина реализована на языке <a href="/language/ada/">Ada</a>, а не на устаревшем <a href="/language/c/">C</a>. </p> <p>От <a href="/language/cyclone/">Cyclone</a> язык позаимствовал концепцию регионов. На нижнем уровне используется сегментированная модель памяти, а в каждом сегменте — линейная адресация. Как и <a href="/dialect/spark/">SPARK</a>, Sparkel — строго типизированный язык, поэтому у всех типов данных известно их низкоуровневое представление. Концепция регионов используется для установления ссылок между сегментами. </p> <p>Так же, как и <a href="/dialect/spark/">SPARK</a>, Sparkel поддерживает обобщённое программирование, однако явно специализировать пакеты не требуется. Вместо этого обобщённые пакеты транслируются один раз в общий программный код, поведение которого управляется дескрипторами типов. </p> <p>Текущая реализация компилятора производит байт-код. Далее этот байт-код может либо непосредственно исполняться на виртуальной машине PSVM, либо для повышения производительности быть скомпилирован через LLVM в машинные коды и загружен в таком виде в виртуальную машину. Виртуальная машина в этом случае выполняет роль планировщика и средства взаимодействия с внешним миром. </p> <p>Аналогично тому, как Sparkel был сделан по подобию <a href="/dialect/spark/">SPARK</a>, в лаборатории SofCheck&amp;AdaCore независимыми командами были сделаны Parython (PARallel + <a href="/language/python/">pYTHON</a>) и Javallel (<a href="/language/java/">Java</a> + paraLLEL). На основе этих трёх языков, собрав удачные решения, был создан новый язык программирования ParaSail (Parallel Specification and Implementation Language), который сейчас продвигается как основной в этой четвёрке. У всех четырёх языков общая виртуальная машина и некоторые другие средства разработки. Трансляторы для всех 4х, как правило, поставляются в одном архиве. Поэтому можно читать блог о ParaSail, скачивать средства разработки с сайта ParaSail, и многое из этого применимо к Sparkel в том числе. На сайте ParaSail средства разработки, например, новее, чем на сайте Sparkel. </p> http://ru.progopedia.com/language/sparkel/Clarion http://ru.progopedia.com/language/clarion/ <p>Язык программирования Clarion был разработан Брюсом Баррингтоном в 1984 г. В своей статье он так описывает историю его создания: «Как это часто бывает, я просто пытался доставить себе удовольствие. Я купил свой первый персональный компьютер, смотрел на него и хотел писать программы для него. Это моя работа. Моим стимулом в работе было убеждение, что программирование должно быть проще, что языки программирования должны облегчать чтение и написание программ и что низкая производительность, связанная с процессом разработки программ, коренится в неадекватных и слабо спроектированных инструментальных средствах программирования». Первоначально проект создавался в рамках компании &#8220;HBO &amp; Company&#8221;, но затем был выкуплен McKesson Corporation. </p> <p>Clarion как язык программирования создавался для быстрой разработки деловых приложений и поэтому относится к категории 4GL языков. А система разработки Clarion относится к семейству RAD-систем (от англ. rapid application development — быстрая разработка приложений). </p> <p>Основными особенностями языка и среды программирования являются: </p> <p>&#8212; наличие мощного языка шаблонов, который позволяет на основании предлагаемых вендором шаблонов осуществить генерацию работоспособного кода за считанные минуты. В шаблонах, там где это целесообразно, имеются «точки вставки» (embeds), куда разработчик может вставить свой собственный код, который будет вставлен в сгенерированный текст программы. Эти шаблоны открыты для модификации, а язык шаблонов позволяет добавлять новые возможности, в том числе даже не предусмотренные создателями Clarion. </p> <p>&#8212; механизм замещаемых драйверов данных. Работа с файлами данных строится на основании имеющихся в системе драйверов баз данных. Поэтому сам язык абстрагирован от конкретных форматов файлов данных. В настоящее время поддерживается работа со следующими форматами (ISAM: TopSpeed, Clarion, DBF, FoxPro, Clipper, Btrieve, SQL: MSSQL, Oracle, Pervasive SQL, SQLAnywhere, SQLite, ODBC). Интересно, что работа с текстовыми и бинарными файлами в Clarion также рассматривается как работа с неким абстрактым форматом БД. </p> <p>&#8212; наличие в среде программирования словаря данных (депозитория данных), в котором описываются используемые в программе таблицы баз данных с описанием для каждой таблицы полей, ключей, используемых драйверов БД. Таким образом данные выделяются из текста программы, в который они попадут впоследствии при помощи имеющихся шаблонов генерации кода программы. Выделение данных в депозиторий приводит к тому, что табличные данные можно легко модифицировать, в том числе модификация полей, описание ключей и индексов, описание связей между таблицами, управление каскадностью операций с записями. Каскадность может быть реализована как средствами Clarion (используются стандартные шаблоны), так и отдана в управление серверу. Кроме того есть возможность написания внутрикларионовских триггеров для таблиц любого формата (от ISAM до SQL). </p> <p>По синтаксису Clarion похож на языки Pascal и, в особенности, Modula-2 &#8212; программный код заключается в конструкции &#8220;начало-конец&#8221;. Из Modula-2 унаследованы операторы IF и LOOP. От языка Си язык почерпнул такие унарные операции как -=, +=, *=, /=, а также операторы управления циклами BREAK и CONTINUE. Есть у языка и свои собственные оригинальные конструкции, например EXECUTE и CASE. Вот как, например, выглядит оператор ветвления CASE: </p> <p>CASE &lt;выражение&gt; {[OF &lt;выражение1&gt;: &lt;операторы&gt; ! единственное значение]| [OF &lt;выражение2&gt; OROF &lt;выражение3&gt;: &lt;операторы&gt; ! перечисление]| [OF &lt;выражение4&gt; TO &lt;выражение5&gt;: &lt;операторы&gt; ! диапазон]} [ELSE &lt;операторы&gt;] END </p> <p>Обратите внимание, что для ветвления могут использоваться не только константы, а и выражения. </p> <p>Среда программирования обладает быстрым компилятором TopSpeed (JPI). Наряду с бизнес-приложениями на языке можно реализовывать системные утилиты, позволяющие взаимодействовать с операционной системой на низком уровне не менее эффективно, чем программам, написанным на общепринятых языках «низкого уровня» таким, как Ассемблер, Си. </p> <p>Сейчас это мощный и одновременно простой в освоении универсальный язык программирования со встроенными средствами управления БД, на различных версиях которого можно разрабатывать программы для DOS, Microsoft Windows, .Net Framework. </p> http://ru.progopedia.com/language/clarion/PowerShell http://ru.progopedia.com/language/powershell/ <p>PowerShell &#8212; скриптовый язык программирования, разрабатываемый Microsoft. </p> http://ru.progopedia.com/language/powershell/Vala http://ru.progopedia.com/language/vala/ <p>Vala &#8212; мощный язык программирования, предназначенный для прикладного и системного программирования. Создан Йюргом Биллетером и Раффаэлем Сандрини. Очень зависим от библиотек, т. к. не имеет стандартной библиотеки. </p> <p>Последняя версия &#8212; 0.30, была выпущена 18 сентября 2015 года. Распространяется под лицензией GNU LGPL, что позволяет использовать его как в свободном, так и в проприетарном ПО. </p> <p>Для компиляции код на vala переводится в код на C, чем можно добиться скорости выполнения, а затем компилируется командой cc. </p> <p>Компилятор vala может быть запущен на любой платформе, однако сборки под windows не являются оффициальными и не поддерживаются проектом GNOME. </p> <p>Подключение файлов происходит не через #include, как в C, а с помощью указания ВСЕХ файлов для компиляции в качестве аргументов для компилятора. Библиотеки же подключаются через &#8216;&#8212;pkg library&#8217; в качестве аргумента </p> http://ru.progopedia.com/language/vala/LabVIEW http://ru.progopedia.com/language/labview/ <p>LabbVIEW (англ. Laboratory&#8217;s Virtual Instrumentation Engineering Workbench) — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments . Первая версия LabVIEW была выпущена в 1986 году для Apple Macintosh, в настоящее время существуют версии для Linux, Mac OS., а наиболее развитой и популярной являются версии для Microsoft Windows. </p> http://ru.progopedia.com/language/labview/Dart http://ru.progopedia.com/language/dart/ <p>Dart &#8212; язык программирования для веб-разработки с открытым исходным кодом, созданный Google. Цель создания языка &#8212; заменить <a href="/dialect/javascript/">JavaScript</a> в роли универсального языка веб-разработки. </p> <p>В настоящее время существует три способа запустить программу на Dart: </p> <ul> <li> скомпилировать в JavaScript при помощи dart2js и запустить результат в любом браузере. </li> <li> выполнить код напрямую в Dartium &#8212; версии Chromium со встроенной поддержкой Dart. </li> <li> использовать Dart VM &#8212; отдельную виртуальную машину, входящую в Dart SDK и позволяющую запускать программы в консольном режиме. </li> </ul> http://ru.progopedia.com/language/dart/GAP http://ru.progopedia.com/language/gap/ <p>GAP &#8212; язык программирования одноименной системы компьютерной алгебры (GAP: Groups, Algorithms, Programming &#8212; Группы, Алгоритмы, Программирование). </p> http://ru.progopedia.com/language/gap/Picat http://ru.progopedia.com/language/picat/ <p>Picat &#8212; язык, совмещающий в себе черты логических, функциональных и скриптовых языков. </p> <p>Picat создан Neng-Fa Zhou и Jonathan Fruhman. </p> http://ru.progopedia.com/language/picat/Foma http://ru.progopedia.com/language/foma/ <p>Foma &#8212; это язык программирования для создания конечных автоматов и трансдьюсеров. </p> http://ru.progopedia.com/language/foma/Unlambda http://ru.progopedia.com/language/unlambda/ <p>Unlambda &#8212; пример чистого функционального языка, основанного на комбинаторной логике. Единственный тип данных в языке &#8212; это функции от одного аргумента. Язык поддерживает ленивые вычисления. </p> <p>Текущая версия Unlambda поддерживает 12 стандартных функций: k,i,v,s,d,c,e,r,.,?,@ и | . Применение функции обозначается обратной кавычкой (которую здесь будем обозначать как обычную) , например, запись &#8216;FA обозначает, что F применяется к A , или же F(A). В общем-то, для достижения полноты по Тьюрингу достаточно только двух функций: k и s. </p> <ul> <li> k принимает два аргумента (так как Unlambda признает только унарные функции, &#8220;обман&#8221; происходит с помощью карринга) и возвращает первый. Для примера: &#8216;kxy будет возвращать x </li> <li> s принимает три аргумента. Запись &#8216;sxyz будет эквивалентна &#8221;xz&#8217;xy </li> <li> .x &#8212; данная функция принимает некий аргумент x, печатает символ &#8220;x&#8221; и возвращает его неизменным. </li> <li> r &#8212; печатает новую строку. </li> <li> d &#8212; функция для ленивых вычислений. Обычно для вычисления выражения &#8216;xy Unlambda сначала вычисляет x, потом y , а затем уже применяет x к y. Но если же вместо x поставить d , то есть будет выражение вида &#8216;dy , то y будет вычисляться только тогда, когда выражение применяется к аргументу z. </li> <li> v &#8212; функция, которая принимает аргумент, игнорирует его и возвращает v. </li> <li> В Unlambda так же есть функции для ввода-вывода. Функция @ считывает символ с устройства ввода и применяет аргумент x к i. Функция | печатает текущий символ. </li> <li> e &#8212; функция возвращает аргумент x и прерывает работу программы. </li> </ul> http://ru.progopedia.com/language/unlambda/