Привет, Мир!
Прошу любить и жаловать, на сцену выходит новый язык программирования Перфолента. Перфолента это язык общего назначения с русскоязычным синтаксисом и стандартной библиотекой, который может быть полезен при написании широкого круга приложений. Это могут быть простые и сложные консольные утилиты, оконные приложения с пользовательским интерфейсом, библиотеки классов, службы Windows, сетевые приложения и много чего ещё.
Программистам 1С Перфолента пригодится в качестве инструмента для создания независимых от платформы приложений, а возможно и как инструмент для создания внешних компонент. Речь ни в коем случае не идет о замене или альтернативе 1С, вряд ли один человек может написать такую замену за какое-либо разумное время, а времени на разработку Перфоленты ушло очень много.
Язык Перфолента будет очень полезен и удобен для начинающих программистов, в том числе для детей, т. к. в нем используются большинство современных русскоязычных терминов из области программирования. Правда, для этого необходимы учебные материалы и пособия, которые только предстоит создать.
Прежде, чем перейти к краткому описанию языка, скажу несколько слов о том, почему этот язык появился на свет.
Я программирую с юношеских лет, с 1986-го года, и все языки программирования, которые я осваивал, были англоязычными. Только в 1996-м, когда появилась платформа 1С версии 7.5, я начал писать свои первые программы на русском языке. Как оказалось, это здорово! Да, ключевые слова и идентификаторы на русском языке несколько длиннее, чем на английском, но меня это ни сколько не беспокоило, т.к. печатать на клавиатуре на родном языке я могу намного быстрее, чем на не родном. Да и читаются программы на русском языке так же легче и приятнее. Одна проблема, 1С предложила очень скромный по возможностям язык программирования, ограниченный рамками платформы, на котором даже простой консольной утилиты не напишешь. Поэтому я, как и очень многие другие программисты 1С сразу стал мечтать о полноценном ООП языке, с классами и другими плюшками современных языков.
Задумался я над созданием языка своей мечты только с появлением платформы Net Framework, т. к. её разработчики предложили множество инструментов для создания компиляторов. Жаль, что решился делать далеко не сразу, первые попытки были сделаны только в 2010-м году, спустя 10 лет после выхода Net Framework. Лучше поздно, чем никогда. Но после первой пробы пера проект по разным причинам был заброшен и вернулся к нему я только в 2016-м. Если бы я знал, что скоро выйдет такой замечательный продукт как OneScript, то возможно Перфоленты бы и не было. Однако, когда я узнал про OneScript, у меня уже работали программки на своем языке и бросить проект было жалко, хотя я и понимал, что даже до альфа-версии ещё очень далеко. Правда, я и тут ошибся, недооценил объем работы, особенно с учетом того, что свободного времени на разработку у меня очень мало, все уходит на основную работу, бросить которую естественно нельзя по понятным причинам, семья, дети. Так что до версии 1.0 еще далеко, но то, что уже есть, позволяет познакомиться с языком и даже написать что-то полезное. Так что присоединяйтесь, особенно если вы энтузиаст.
Перфолента, в отличие от языков 1С и OneScript, является компилируемым языком со статической типизацией, но с элементами динамической типизации, которая используется по мере необходимости. Перфолента основана на технологии Net и полностью интегрирована в неё. Это значит, что вы можете использовать любые библиотеки, написанные на любых Net языках, как родные. И наоборот, библиотеки написанные на Перфоленте, как родные, можно использовать в проектах на других Net языках. Статическая типизация и компиляция дают программам написанным на Перфоленте высокую скорость работы. В некоторых тестах эта скорость выше, чем у языка 1С в 500 раз! По сравнению с языком OneScript скорость может быть выше более, чем в 300 раз. Конечно, это не значит, что любая ваша программа будет выполняться на столько быстрее. Тот же OneScript, во многих случаях использует те же самые библиотечные функции Net, что и Перфолента, и в этих случаях он будет отставать не так сильно.
Компилятор Перфоленты написан «с нуля» и производит непосредственную компиляцию исходного текста в IL (низкоуровневый язык виртуальной машины Net), так же, как это делают компиляторы других Net языков, C#, Vb.Net и т.д.
Итак, приступим. Наша первая программа выглядит просто:
Программа ПриветМир
Процедура Старт
ВыводСтроки "Привет, Мир!"
КонецПроцедуры
КонецПрограммы
Повторюсь, Перфолента является компилируемым языком. А это значит, что после работы компилятора мы получим исполняемый EXE файл, который можно запустить на выполнение, или библиотечный DLL файл, экспортируемые объекты которого мы сможем использовать в других программах.
Перфолента является языком со статической типизацией, что для программистов 1С может быть непривычно, но привыкнуть совсем не тяжело. Программист при написании программы все равно должен думать о том какой тип данных находится в переменной или какой тип данных можно передать в конкретную функцию.
В Перфоленте предопределено значительно больше встроенных типов данных, чем в языках 1С и OneScript. Но, в основном, дополнительные типы представлены числовыми типами различной длины. Казалось бы, зачем столько числовых типов, если можно обойтись одним, как в 1С? Все дело в эффективности хранения чисел в памяти и скорости их обработки. Зачем хранить целое число в формате числа с плавающей точкой, если на это требуется больше памяти и вычисления становятся более затратными?
Язык Перфолента потребует от вас строгого соблюдения правил приведения типов при присваивании переменным или передаче в функции и процедуры. Однако, язык допускает во многих случаях, что тип определяется неявным описанием. Например:
Перем А тип Целое = 1 //явное объявление типа переменной типа Целое
Б=1 //неявное объявление переменной типа Целое
Стр="Это моя строка" //неявное объявление переменной типа Строка
При неявном объявлении, тип присваивается переменной тогда, когда она встречается в коде первый раз, и больше не может быть изменен.
Синтаксис языка Перфолента базируется на языке 1С, поэтому вы можете писать почти так, как привыкли, хотя многие языковые конструкции можно писать короче, чем в языке 1С, но изменять привычкам не обязательно. Например, полное объявление цикла Для Каждого на Перфоленте выглядит так:
Для Каждого СтрокаТЧ тип Строка Из КоллекцияСтрок Цикл
//...
КонецЦикла
но можно записать его короче, т. к. некоторые ключевые слова и определение типа не обязательны:
Для СтрокаТЧ Из КоллекцияСтрок
//...
КонецЦикла
а можно просто «по-одинэсному»:
Для Каждого СтрокаТЧ Из КоллекцияСтрок Цикл
//...
КонецЦикла;
В случае «укороченной» записи, компилятор сам поймет, что цикл «для каждого» и определит тип переменной СтрокаТЧ.
То же самое касается и многих других операторов, например, условный оператор Если можно записать «по-одинэсному»:
Если Условие Тогда
Действие();
КонецЕсли;
А можно записать немного короче:
Если Условие
Действие
КонецЕсли
Ключевое слово Тогда, а также, точки с запятой и пустые круглые скобки, в Перфоленте не обязательны.
А что, если вы хотите создать класс? Так и пишите:
Класс МойКласс
//....
КонецКласса
Надо унаследовать один класс от другого? Не проблема:
Класс МойКласс Родитель КлассРодитель
//....
КонецКласса
Естественно, что языковых конструкций и ключевых слов в Перфоленте значительно больше, чем в языке 1С, так что учить их придется, но не думаю, что это вызовет большие проблемы. Больше возможностей, значит больше языковых конструкций, а куда тут денешься?
В языке Перфолента предусмотрены многие конструкции имеющиеся в самых современных языках программирования, например, классы, структуры, интерфейсы, перечисления, делегаты, события, массивы, кортежи, срезы, индексаторы, инициализаторы и т.д. Со временем всё будет документировано, но пока многие нюансы можно узнать только разбирая примеры идущие в комплекте с компилятором.
Многое в Перфоленте ещё не доделано и поэтому не включено в предлагаемой пробной версии, например, анонимные функции и замыкания пока отсутствуют, хотя, надеюсь, что это ненадолго, т.к. эксперименты с ними у меня уже идут. На данном этапе вы можете столкнуться с разнообразными ошибками и недоделками. Если вы что-то написали, а оно не компилируется или падает во время выполнения, просто пойдите другим путем и обязательно сообщите о найденной ошибке.
Документация и справка сейчас активно пишутся, а пока пользуйтесь тем что есть в дистрибутиве. Из меню Справка, прилагаемого редактора кода, можно вызвать справочный файл, в котором можно посмотреть свойства и методы множества объектов стандартной библиотеки языка. Частично работает IntelliSense при нажатии сочетания клавиш Ctrl+Пробел и при нажатии точки. Посмотрите примеры, попробуйте сами что-то написать. Для человека любящего программирование это должно быть интересно.
Примеров в дистрибутиве довольно много, вполне достаточно, что бы ознакомиться с языком и начать программировать.
Кроссплатформенность пока не поддерживается, точнее существует по приципу «как есть». За время разработки компилятор успел «переехать» с платформы Net Framework 3.5 на версию 4, затем на 4.5.2 и затем на 4.8. Планируется переезд на .Net 9, где с кроссплатформенностью уже должно быть все в порядке. На данный момент, разрабатывать программы на Перфоленте можно только под Windows, но откомпилированные программы вполне могут запускаться под Линукс на платформе MONO. По крайней мере, из проверенных мной и другими людьми примеров, более половины работали на Линуксе нормально. Однако, вся работа над кроссплатформенностью еще впереди.
Эта версия компилятора имеет статус «демонстратор технологии», т.е. имеет не законченный вид.
Выход в Open Source планируется, но это может произойти не раньше, чем компилятор и стандартная библиотека будут переписаны на Перфоленту. Компилятор должен уметь компилировать сам себя, только тогда я буду считать, что он готов. Но сначала я хочу обеспечить его полную работоспособность и стабильность и только потом осуществить перевод при помощи средства автоматического перевода, которые тоже уже есть, но пока в лабораторном состоянии.
Очень хочется обратной связи от тех, кто заинтересуется новым языком, так что любые мысли приветствуются и будут учтены. На вопросы «кому это надо?» я отвечать не буду, так что прошу их не задавать. На данный момент уже есть люди, кому это надо, не считая меня. Гораздо интереснее общаться с теми, кто посмотрел, попробовал что-то написать, подумал и высказал замечания, пожелания и предложения.
Выражаю благодарность Андрею Ошнурову и Владимиру Васильеву за моральную поддержку и первые попытки писать на Перфоленте.