Перфолента, первое знакомство. Новый язык программирования





Первое знакомство с новым языком программирования Перфолента. В статье описано назначение языка, причины его появления, основные характеристики и возможные варианты использования.

Привет, Мир!

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

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

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

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

Я программирую с юношеских лет, с 1986-го года, и все языки программирования, которые я осваивал, были англоязычными. Только в 1996-м, когда появилась платформа версии 7.5, я начал писать свои первые программы на русском языке. Как оказалось, это здорово! Да, ключевые слова и идентификаторы на русском языке несколько длиннее, чем на английском, но меня это ни сколько не беспокоило, т. к. печатать на клавиатуре на родном языке я могу намного быстрее, чем на не родном. Да и читаются программы на русском языке так же легче и приятнее. Одна проблема, предложила очень скромный по возможностям язык программирования, ограниченный рамками платформы, на котором даже простой консольной утилиты не напишешь. Поэтому я, как и очень многие другие программисты сразу стал мечтать о полноценном ООП языке, с классами и другими плюшками современных языков.

Задумался я над созданием языка своей мечты только с появлением платформы Net Framework, т. к. её разработчики предложили множество инструментов для создания компиляторов. Жаль, что решился делать далеко не сразу, первые попытки были сделаны только в 2010-м году, спустя 10 лет после выхода Net Framework. Лучше поздно, чем никогда. Но после первой пробы пера проект по разным причинам был заброшен и вернулся к нему я только в 2024-м. Если бы я знал, что скоро выйдет такой замечательный продукт как OneScript, то возможно Перфоленты бы и не было. Однако, когда я узнал про OneScript, у меня уже работали программки на своем языке и бросить проект было жалко, хотя я и понимал, что даже до альфа-версии ещё очень далеко. Правда, я и тут ошибся, недооценил объем работы, особенно с учетом того, что свободного времени на разработку у меня очень мало, все уходит на основную работу, бросить которую естественно нельзя по понятным причинам, семья, дети. Так что до версии 1.0 еще далеко, но то, что уже есть, позволяет познакомиться с языком и даже написать что-то полезное. Так что присоединяйтесь, особенно если вы энтузиаст.

 

Перфолента, в отличие от языков и OneScript, является компилируемым языком со статической типизацией, но с элементами динамической типизации, которая используется по мере необходимости. Перфолента основана на технологии Net и полностью интегрирована в неё. Это значит, что вы можете использовать любые библиотеки, написанные на любых Net языках, как родные. И наоборот, библиотеки написанные на Перфоленте, как родные, можно использовать в проектах на других Net языках. Статическая типизация и компиляция дают программам написанным на Перфоленте высокую скорость работы. В некоторых тестах эта скорость выше, чем у языка в 500 раз! По сравнению с языком OneScript скорость может быть выше более, чем в 300 раз. Конечно, это не значит, что любая ваша программа будет выполняться на столько быстрее. Тот же OneScript, во многих случаях использует те же самые библиотечные функции Net, что и Перфолента, и в этих случаях он будет отставать не так сильно.

 

Компилятор Перфоленты написан «с нуля» и производит непосредственную компиляцию исходного текста в IL (низкоуровневый язык виртуальной машины Net), так же, как это делают компиляторы других Net языков, C#, Vb.Net и т.д.

 

Итак, приступим. Наша первая программа выглядит просто:

 

Программа ПриветМир 
    Процедура Старт
        ВыводСтроки "Привет, Мир!"
    КонецПроцедуры
КонецПрограммы    

 

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

 

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

 

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

 

Язык Перфолента потребует от вас строгого соблюдения правил приведения типов при присваивании переменным или передаче в функции и процедуры. Однако, язык допускает во многих случаях, что тип определяется неявным описанием. Например:

        Перем А тип Целое = 1 //явное объявление типа переменной типа Целое
        Б=1 //неявное объявление переменной типа Целое

        Стр="Это моя строка" //неявное объявление переменной типа Строка

 

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

Синтаксис языка Перфолента базируется на языке 1С, поэтому вы можете писать почти так, как привыкли, хотя многие языковые конструкции можно писать короче, чем в языке 1С, но изменять привычкам не обязательно. Например, полное объявление цикла Для Каждого на Перфоленте выглядит так:

        Для Каждого СтрокаТЧ тип Строка Из КоллекцияСтрок Цикл
            //…
        КонецЦикла

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

        Для СтрокаТЧ Из КоллекцияСтрок
            //…
        КонецЦикла

а можно просто «по-одинэсному»:

        Для Каждого СтрокаТЧ Из КоллекцияСтрок Цикл
            //…
        КонецЦикла;

 

В случае «укороченной» записи, компилятор сам поймет, что цикл «для каждого» и определит тип переменной СтрокаТЧ.

То же самое касается и многих других операторов, например, условный оператор Если можно записать «по-одинэсному»:

         Если Условие Тогда
            Действие();
         КонецЕсли;   

А можно записать немного короче:

         Если Условие 
            Действие
         КонецЕсли  

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

 

А что, если вы хотите создать класс? Так и пишите:

Класс МойКласс
    //….
КонецКласса

 

Надо унаследовать один класс от другого? Не проблема:

Класс МойКласс Родитель КлассРодитель 
    //….
КонецКласса

 

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

 

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

 

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

 

Документация и справка сейчас активно пишутся, а пока пользуйтесь тем что есть в дистрибутиве. Из меню Справка, прилагаемого редактора кода, можно вызвать справочный файл, в котором можно посмотреть свойства и методы множества объектов стандартной библиотеки языка. Частично работает IntelliSense при нажатии сочетания клавиш Ctrl+Пробел и при нажатии точки. Посмотрите примеры, попробуйте сами что-то написать. Для человека любящего программирование это должно быть интересно.

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

 

Кроссплатформенность пока не поддерживается, точнее существует по приципу «как есть». За время разработки компилятор успел «переехать» с платформы Net Framework 3.5 на версию 4, а затем и на 4.5.2. Теперь планируется переезд на Net Core 3, где с кроссплатформенностью уже должно быть все в порядке. На данный момент, разрабатывать программы на Перфоленте можно только под Windows, но откомпилированные программы вполне могут запускаться под Линукс. По крайней мере, из проверенных мной и другими людьми примеров, более половины работали на Линуксе нормально. Однако, вся работа над кроссплатформенностью еще впереди.

 

Эта версия компилятора имеет статус «демонстратор технологии», т.е. имеет не законченный вид. Выход «Альфа» версии, в которой будет почти всё, что готовится к первому релизу, планируется к новому году! А дальше полгода на выпуск «Бета» версии, и еще полгода на выпуск первого стабильного релиза. Это, конечно, только планы, в которые жизнь может внести свои коррективы.

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

 

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

Выражаю благодарность Андрею Ошнурову и Владимиру Васильеву за моральную поддержку и первые попытки писать на Перфоленте.

 

99 Comments

  1. blackhole321

    Круто!

    А что с отладчиком?

    Reply
  2. SerVer1C

    Судя по описанию, огромная работа проделана. Автору однозначно жирный плюс! Имхо, данный проект должен способствовать постепенному переливанию из мира 1С в мир ДотНет.

    Reply
  3. w.r.

    Это очень хорошо, что есть такие проекты!

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

    Единственное что — хотелось бы видеть исходники на github, чтобы люди могли вносить свои изменения/исправления и развивать проект

    Reply
  4. Evil Beaver

    От автора 1Script. Я тоже смотрел и щупал Перфоленту, Сергей обращался ко мне с предложением посмотреть.

    Это, если угодно, 1С.NET, т.е. язык компилируемый полностью в MSIL. Пожалуй, что это интересно. Из того, что мне кажется минусом (хотя, кто-то назовет это плюсом) — это строгая типизация (переменные надо объявлять, товарищи 1Сники) и дополнения к синтаксису, диктуемые средой .NET. Т.е. придется выучить конструкции которых в 1С нет и не предвидится: пространства имен, классы, строгие типы и т.п. У меня есть опасение, что проще сразу выучить C# или Visual Basic (как наиболее близкий синтаксически)

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

    Reply
  5. genayo

    А где ссылка на гитхаб проекта?

    Reply
  6. Perfolenta

    (6) Я считаю, что очень важно, какой язык используется. Если бы вы пробовали обучать программированию детей, вы бы поняли, как важно, что бы это было на родном языке. Да и любому программисту пишущему на 1С это понятно, до тех пор, пока он не получит комплекс «не настоящего программиста»…

    Английский «настоящему» программисту сейчас действительно нужен, но это как раз потому, что мы более 30 лет потеряли и не развивали своё… сейчас ситуация стала лучше… 1С очень развилась, OneScript подхватил эстафету, надеюсь, что и Перфолента в этом ряду лишней не будет…

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

    Русский и читается легче и пишется быстрее, родной язык как ни как…

    Исходники скорее всего и окажутся в опенсорсе, но не сейчас, рано, как я и написал в статье, сначала я переведу их на Перфоленту, а потом уже можно и в люди отдавать…

    Пробуйте, по крайней мере это интересно…

    Reply
  7. Perfolenta

    (7) спасибо, Андрей, удача понадобится… 🙂

    мне ваш OneScript нравится и я даже им пользуюсь… симбиоз вполне возможен… из Перфоленты можно вызывать скрипты и наоборот… чуть-чуть осталось допилить Перфоленту, что бы можно было на ней библиотеки для OneScript делать (атрибуты классов и методов еще нельзя устанавливать, а для создания библиотек OneScript они нужны)…

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

    Я за разумный выбор инструмента… если основной вид существования программы это исходный текст, то OneScript отличный выбор, а если программа делается для пользователей и основной ее жизненный цикл не связан с правкой исходного кода, то компилируемая программа лучше…

    Reply
  8. Perfolenta

    (4) отладчика в представленном релизе нет, т.к. он пока глючный, но к новогоднему релизу будет как огурчик 🙂

    Reply
  9. blackhole321

    (14)Это было-бы здорово.

    Reply
  10. Perfolenta

    (5) да уж, объем работы это моё больное место… семья серьезно пострадала, т.к. эта работа фактически украла меня у них… надеюсь, что не зря, но об этом пока все еще рано думать… только мечтать…

    а на перетекание программистов из 1С в мир Net, Перфолента если когда и повлияет, то очень не скоро… 1С это огромная махина, с ней только сопоставимая по ресурсам корпорация могла бы сразиться…

    а у меня, даже просто донести до множества людей, что Перфолента существует и мотивировать их попробовать, уже проблема…

    Reply
  11. w.r.

    (10)

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

    Хотелось бы здесь получить гос поддержку. Но похоже увы (

    Reply
  12. Perfolenta

    (17) как-то в 90-х, мне случайно пришлось отработать год учителем информатики в школе (просто учителя не могли найти и попросили меня выручить их)… я еще тогда понял, насколько сильно английский язык поднимает порог входа детям в программирование…

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

    Reply
  13. Perfolenta

    (8) в статье написано, что в «опенсорс» мне пока рано…

    Reply
  14. alex_bob

    Будет ли работать в Windows XP?

    Reply
  15. Perfolenta

    (20) нет, XP не поддерживается…. да и смысла нет, с тех пор как на XP забили все браузеры и сама Майкрософт у нее будущего нет… я, конечно, могу собрать специальную сборку для ХР, но кое что все равно там работать не будет, т.к. на XP максимально возможная версия Net 4.0

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

    Reply
  16. alex_bob

    (21) Жалко. Просто у меня под рукой только Ubuntu и XP

    Reply
  17. w.r.

    (18)

    случайно пришлось отработать год учителем информатики в школе (просто учителя не могли найти и попросили меня выручить их)… я еще тогда понял, насколько сильно английский язык поднимает порог входа детям в программирование…

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

    Просто все, что делается, как-то расходится со словами чиновников про нехватку программистов. Я лично знаю примеры, когда люди не шли в программирование только потому, что оно им не понравилось в школе

    Reply
  18. zhichkin

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

    История моего проекта 1C# аналогична истории Перфоленты. Я так же, как и автор, ждал несколько лет, чтобы обнародовать результаты. В конечном итоге я пришёл к выводу, что всё это от излишнего перфекционизма и неуверенности в себе.

    Сейчас всё настолько быстро меняется, что времени ждать пока продукт будет «идеальным» нет! Выкладывайтесь на GitHub! Будьте уверены — Ваш проект прекрасен!

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

    Ещё раз желаю Вам успеха!

    Reply
  19. kravchuk

    Автору большой респект за проделанную работу, удачи и сил для его развития.

    Reply
  20. xSavantx

    Очень интересно. Автору плюс и поддержка см 🙂

    Несколько проектов в одном окне можно открыть? Я просто не нашел. Или пока не реализовано?

    Reply
  21. Perfolenta

    (23) Большое спасибо за поддержку!

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

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

    Reply
  22. Perfolenta

    (26) Большое спасибо!!!

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

    Reply
  23. Perfolenta

    (29) спасибо, как раз такого комментария для поднятия настроения и не хватало!

    Вы похоже из «настоящих» программистов?

    Как писал ДанЭпплман: «.. коллеги, работавшие на С++, часто задирали носы и говорили: «Visual Basic — не настоящий объектно-ориентированный язык. В настоящем объектно-ориентированном языке есть полноценное наследование». Услышав это, бедный программист VB удалялся в свою каморку и за час выдавал больше кода, чем программист С++ мог написать за целую неделю.»

    П.С. пока я писал ответ, ругательный комментарий (29) куда-то исчез, не знаю, то-ли модераторы удалили, то-ли сам писавший… но я решил оставить этот ответ из-за цитаты Дана Эпплмана, которая отвечает на часто встречающуюся придирку к языкам вроде 1С, OneScript, VB, а теперь вот и Перфоленты…

    Reply
  24. Darklight

    (21)(22)Действительно, под XP это может и нет смысла собирать, а вот под Linux — смысл очень даже большой есть! Учитывая что плафторма Dot NET — но тут сейчас сначала имеет смысл это всё под кросплатформенный NET Core 3.0 перевести, ну или немного подождать и года через 3 переводить уже под NET 5

    Reply
  25. Perfolenta

    (31) совершенно верно, я примерно так и планирую…

    Reply
  26. sikuda

    (22) Тогда кулик перелетай в наше болото php1c.ru

    Reply
  27. Darklight
    Reply
  28. AllexSoft

    Очень крутой проект, особенно для тех кто начинал изначально на 1С и хотел бы куда нибудь продвинуться в языки с ООП. По поводу применения, а можно сделать шаблон для создания native компонент к 1С ? типа просто hello world? Это и в реальных проектах пригодилось бы, да и с точки зрения обучения 1Сника можно начать писать что то не на 1С, но далеко не отходить от 1С.

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

    Reply
  29. AllexSoft

    (34)

    ввести-таки программные скобки «{ }» — практически ставшие стандартом разграничения блоков алгоритмов

    вот не согласен, ибо это превратит из разработки «как в 1С только круче», в «очередной си-образный язык, по-русски, но зачем?»

    Насколько я понял автора то его прямая аудитория это 1С-ники которым мало штатного функционала платформы и они хотят «почти на 1с» писать системные приложения. Если концепция такая то и концептуально синтаксис перфоленты должен быть похож на 1С, что бы можно было сделать «по-одинэсному».

    (34)

    То что убрали «;» выглядит очень не привычно

    вот с этим согласен, как раз из тех же соображений, как в 1С.

    Reply
  30. Perfolenta

    (34) спасибо за поддержку и добрые слова! Вы одном комментарии умудрились описать несколько лет моей работы и добавить еще столько же… я тоже, когда начинал, не представлял сколько надо сделать, что бы стало хотя бы немного похоже на настоящий язык программирования… теперь представляю… и даже просто на то, что бы довести до ума то, что сегодня представил, планирую еще минимум полтора года…

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

    Однако, все равно я скобочки вынужден был в язык ввести, все три вида, () для параметров, [ ] для индексаторов и { } для инициализаторов…

    На счет изящества языков вопрос всегда спорный, минимум 10 лет, с начала 90-х, я из каждого утюга слушал об изяществе, выразительности и эллегантности С++, потом вдруг он оказался сложным и неприятным… теперь вот Питон изящный и Котлин… а на самом деле это вопрос привычки и предпочтения конкретных людей… мне как раз нравится, когда я вижу концы операторов и понимаю, что во что вложено выше по тексту… а скобочки }}}}} ничего мне не говорят о том, что там выше по тексту делается… склонять для меня не проблема, я же русский, а не англичанин…

    динамическая типизация в Перфоленте есть, даже не надо ничего писать типа dynamic… просто вызываете метод, а он свяжется во время выполнения, если он есть и параметры подходят…

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

    Перем только для переменных, переменные «живут» в методах… Поля (fields) существуют у объектов это общепринятая терминология… есть еще Конст, константы, их естественно нельзя изменять…

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

    где-то так… еще раз спасибо! мне сейчас моральная поддержка очень важна.. да и идеи я стараюсь анализировать все, что поступают.. (из Котлина и Питона я тоже кое что потянул :))

    Reply
  31. Perfolenta

    (37) про ; написал в ответе на (34)… я не убрал ; а сделал не обязательной, если и так понятно, что строка переносится… а можно ставить ; как привыкли…

    Reply
  32. Darklight
    Reply
  33. Darklight

    (37)

    вот не согласен, ибо это превратит из разработки «как в 1С только круче», в «очередной си-образный язык, по-русски, но зачем?»

    Это не Си образная концепция — это уже каноническая и широкопринятая современная концепция выделения блоков алгоритмов. А Вариант синтаксиса 1С — это отсылка к 50-м годам прошлого (!) века и к Фортрану — давно уже устаревшая концепция. Имеющая целую кучу недостатков — и практически вымершая среди актуальных императивных языков программирования. Отчасти сохранилась только в Visual Basic — но это особый случай.

    Даже Pascal появившийся в 1970 году уже имел единую концепцию программных скобок «begin end» (просто язык Си появился на два года позже — 1972 году — и ввёл ещё более простые и лаконичные — фигурные скобки — это и есть эволюция)

    Reply
  34. Perfolenta

    (40) слово тип пишется быстрее, чем ставится : и читается лучше…

    проверьте, если хотите… я проверял… (конечно, у разных людей будет по разному)

    почитайте о переменных в Перфоленте тут: http://promcod.com.ua/Article.asp?code=20190712173855028344

    там большая часть ваших идей описана…

    Тип Объект тоже есть…

    Если надо пишите:

    Перем А тип Объект = Неопределено

    А=5

    А=»ало»

    А=»Б»с

    и т.д.

    Reply
  35. Perfolenta

    (41) предел такой эволюции С это С++… в котором разнообразные знаки, их сочетания и порядок имеют огромное значение, причем хорошо продуманное, просто идеальное… но программисты проголосовали ногами…

    в Перфоленте я сделал очень многое для уменьшения писанины по сравнению с 1С, но превращать язык в подобие Си (в любом его виде) мне не хочется…

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

    Reply
  36. Darklight

    (42)

    слово тип пишется быстрее, чем ставится : и читается лучше…

    Не согласен (свои аргументы я привёл), но не буду спорить — автору виднее!


    Перем А тип Объект = Неопределено

    А=5

    А=»ало»

    А=»Б»с

    Это хорошо

    Интересно, а вот так можно:

    Класс Класс1

    Поле Б = 1

    КонецЦкласса

    Перем А тип Класс1 = Неопределено

    А = А?.Б //интересно какой будет тип у А)

    А = Новый Класс1()

    А = А?.Б //интересно какой будет тип у А)

    Reply
  37. Darklight

    (43)

    но превращать язык в подобие Си (в любом его виде) мне

    Ни в коем случае и не надо! Не ориентируйтесь на языки (и позаимствованные из них концепции других языков, не сыскавших массовости) которым почти полвека (и больше)! Ориентируйтесь на языки, которые появились в XXI веке — и смотрите на то, что в этих языках массово и неизменно уже почти полвека — это ведь не спроста так! Если, конечно, не готовы рискнуть — и выкатить что-то ещё более оригинальное, чем было предложено в этих языках (как, скажем в языке Kotlin, к примеру взяли и упразднили Поля у Классов — но это пример слабого риска; Более рискованным, например, было появление в Nemerle принципа выведения типов, или того — что все инструкции языка — это всегда выражения — я правда не уверен, что это всё первым появилось в Nemerle — но тогда это было совсем в новинку; Или появление встроенной в язык поддержки парадигмы Контрактного программирования в языке Eiffel, к сожалению пока так и не сыскавшей широкого распространения, хоть и потихоньку внедряемой в разных языках — но чаще всего на уровне библиотек, а не в составе синтаксиса языка; или в том же языке Eiffel — реализованная встроенная поддержка Аспектнориентированного программирования — мощнейшая вещь, которой, кстати, так не хватает в 1С (как и контрактов)).

    Ну я красота синтаксиса языка Scala — меня всегда впечатляла — хотя да, язык не самый простой для программирования, хотя уже готовый код читается очень легко!

    Reply
  38. Perfolenta

    (44) для полей и свойств на данный момент тип указывать обязательно… я пока не пришел к однозначному выводу стоит ли сделать так же как для переменных или нет…

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

    оператор ?. у меня пока не реализован… он хорош, но в нем есть неочевидности, думаю пока над ним…

    а в целом, тип у А будет Класс1, как вы и заявили объявляя переменную…

    Reply
  39. Darklight

    (46)

    Класс Класс1

    Поле Б тип Целое = 1

    КонецЦкласса

    Перем А = Новый Класс1()

    А = А.Б //интересно какой будет тип у А — По идеи должна быть ошибка

    //Только так её не должно быть

    Перем А тип Объект = Новый Класс1() //тип должен быть Класс1

    А = А.Б //Тип должен быть Целое

    А = Новый Объект //По идее тоже должно прокатить — тип должен быть Объект, верно?

    Reply
  40. Perfolenta

    (45) упразднить поля просто, не используйте их…

    я рассматривал много языков, когда пытался отобрать подходы для Перфоленты, потянул из них всё, что приглянулось и вписывалось в рамки уже созданного… куда будет эволюционировать Перфолента еще не понятно, т.к. еще и полностью готового первого релиза нет… сравните C# версии 1 и версии 8, очень большая разница… а у меня пока версия 0.3 и многие штучки из разных современных языков уже есть, но многие еще не доделаны… я сначала доделаю все, что задумал, а потом эволюционировать начну… таков план…

    Reply
  41. Perfolenta

    (47) все верно… (47) все верно… в первом случае будет ошибка, а во втором тип будет меняться класс1-целое-объект

    Reply
  42. Darklight

    (46)

    оператор ?. у меня пока не реализован… он хорош, но в нем есть неочевидности, думаю пока над ним

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

    Так же хорошо определять и так называемые Nullable-типы («Целое?») допускающие неопределено, в данном случае хорошо бы запретить такое

    Перем А тип Объект = Неопределено

    Но разрешить такое

    Перем А тип Объект? = Неопределено

    Но Вы опять придерётесь к символу «?»

    ну тогда хотя бы так — по длинному

    Перем А тип (Объект и Неопределено) = Неопределено //или ещё иначе определять составной тип (но это уж очень длинно): Перем А составнойтип (Объект, Неопределено) = Неопределено //Где вообще могут быть несколько типов (слабо?): Перем А тип Составной {Целое, Класс1, Класс2, Неопределено} //использование инициализатора для типа «составнойтип»

    Reply
  43. Labotamy

    Огонь! Сил Вам терпения и комьюнити побольше!

    Reply
  44. Perfolenta

    (50) нет 🙂 к символу ? в данном случае не придерусь… лаконичнее для Nullable типов придумать трудно… поэтому взял как у других…

    Nullable это единственное слово пока, к которому я не могу придумать хороший русскоязычный термин… 🙂

    в общем, у меня стандартно

    Перем А тип Целое? = Неопределено

    в дистрибутиве есть пример по операциям с Nullable

    хотя, в последних версиях С# Nullable распространили и на ссылочные (объектные) типы, но у меня пока только к структурным (значимым) типам это применимо…

    Reply
  45. Darklight
    Reply
  46. Perfolenta

    (56) я против увеличения числа значков, но у меня есть одно правило «все, что может быть вызвано в Net должно вызываться из Перфоленты»… поэтому я не мог не сделать Nullable… а значки в определении типа надиктовывать будет гораздо легче, чем в выражениях, т.к. почти всегда известно, что в этом месте программы речь идет об определении типа…. поэтому вы сможете сказать «тип Целое двухмерный массив» и в программе напишется «тип Целое[,]»

    Смысл в том, что вы написали про Непределено, конечно есть… но я очень осторожно добавляю в язык дополнительные правила… возможно сделаю отключаемую опцию, что бы «параноики» могли включать «защиту» от Неопределено, а «смелые» парни пусть не заморачиваются… 🙂

    Запишу в планы подумать над этим вопросом…

    Андрей Овсянкин, автор OneScripta, выше написал, что боится, что легче будет выучить СтШарп, чем Перфоленту… я этого тоже боюсь, поэтому с радикальными новинками не спешу… пусть люди к тому, что есть хотя бы привыкнут…

    Reply
  47. nytlenc

    Круть! Автору респект и плюс к публикации!

    Reply
  48. Petr54-ru

    Когда я учился в универе, — конец 80-х начало 90-х, все нормальные студенты, фанатеющие по программированию, писали свой С компилятор, свою ось типа DOS, свой текстовый редактор. Было весело и таких унылых вопросов, как лицензионная чистота не стояла.

    Интересно, как с этим обстоит дело на Перфоленте, в силу того, что они использовали .NET Framework?

    Reply
  49. andreosh

    Дополню, что редактор перфоленты позволяет писать на OneScript и Русском Фоксе (РФокс) https://www.youtube.com/watch?v=FAieIk_VePs&list=PLo4sldcUomOrKAPb_0A5Kv-nILQG3I7Dd&index=24

    Dll от Перфоленты можно подключать в РФокс.

    Reply
  50. v77

    Было бы хорошо, если бы в 1с был такой язык. Кто пишет на OneScript, тому наверное пригодится.

    Reply
  51. Perfolenta

    (60) на использование Net Framework нет ни каких ограничений, как и на использование любых API Windows… если Windows у вас лицензионная, то пользуйтесь как хотите…

    Reply
  52. Evil Beaver

    (60) а что не так с .NET Fw и лицензионной чистотой?

    Reply
  53. Evil Beaver

    (57) Я не боюсь, я знаю. Зарплата просто ведущего/старшего разраба C# равна +20-40% зарплаты опытного 1С-ника с медалями во всю спину. Вот сидит такой 1С-ник, мечтающий покодить в ООП и думает: что бы мне выучить — VB.NET или Перфоленту? Дай-ка посмотрю вакансии по .NET… Ага, хорошо, вакансий хватает и платят неплохо. А по Перфоленте?

    Reply
  54. Perfolenta

    (65) если с такой точки зрения смотреть, то вы абсолютно правы… однако, сколько лет C#-пу и сколько Перфоленте… собственно, Перфоленты еще даже нет, есть только демонстратор… но, читая любую русскоязычную книгу по программированию, вы обнаружите абсолютно все те же понятия, что есть в Перфоленте… этого я и хочу добиться…

    Сценарий может быть другим: сидит такой 1С-ник и думает, надо мне вот такую штуку замутить… 1С не подходит, что делать, СиШарп учить или на более-менее знакомой Перфоленте попробовать? Попробовал, получилось, тогда и СиШарп не нужен…

    Перфолента как мостик, если вы знаете 1С, то знаете минимум половину Перфоленты, а выучив Перфоленту вам будет легко освоить любой язык Net… а может вам её и хватит с головой… а что бы подтянулись работодатели придется доказать, что Перфолента готова к промышленной эксплуатации… сегодня она не готова… сегодня нужны энтузиасты… и хорошо, что они есть… пока мало, надеюсь будет больше…

    в общем, жизнь покажет…

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

    Reply
  55. Darklight
    Reply
  56. Petr54-ru

    (64) На самом деле вопрос не такой постой, как на первый взгляд кажется. Сама платформа она free, а не GNU. Если бы была на подобие GNU лицензии, как у Python — Python Software Foundation License, тогда бы вопросов не было.

    Дальше надо посмотреть на лицензию .Net Framework SDK и прочих программных средств, которые были использованы разработчиками. Вопрос склизский и нужен эксперт по лицензированию продуктов от Microsoft. Я не знаю ответа на этот вопрос, поэтому и спросил.

    Reply
  57. Perfolenta

    (65) кстати, наблюдая, как 1С-ники пишут на Перфоленте, я вижу, что поначалу они пишут строго по 1С-ному, неэффективно… но хватает нескольких толчков в правильном направлении и их код резко улучшается…

    при этом ни каких не известных им операторов Перфоленты они просто не используют…

    еще заметил маниакальное желание 1с-ников использовать многопоточность… думаю это из-за комплекса по поводу медлительности 1с..

    Reply
  58. Darklight

    (68)Ну автор вроде бы на .NET Core 3.0 переводить собрался — там платформа OpenSource и «лицензия MIT» — а это открытая лицензия, без копирайта, совместимая с GPL (а это уже пратически GNU)

    Reply
  59. Darklight

    (69)

    еще заметил маниакальное желание 1с-ников использовать многопоточность..

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

    Помните — что 64 ядерные серверные x86 процессоры появятся уже будущем году (не x86 уже были давно представлены)

    Ещё десятилетие и для настольных компьютеров будут доступны 128 ядерные процессоры

    А после 2040 года наличие не менее 256 ядер в настольных компьютерах будет вообще нормой (не говоря уже о серверных — где число ядер будет измеряться тысячами на сервер)

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

    Reply
  60. Perfolenta

    (67) у вас талант описывать в маленьком комментарии целую вселенную… что бы обдумать все сказанное вами и обстоятельно ответить мне наверное целый день надо потратить….

    отвечу пунктиром:

    — ваши русские варианты слова Nullable мне не нравятся (как и десяток придуманных мной) так что вопрос по прежнему открыт…

    — кроме сокращения Перем в Перфоленте можно полностью писать слово Переменная, поэтому вы сможете просто сказать «переменная количество товара тип целое с неопределенностью… дальше… пока количество товара меньше, чем 10, цикл…» и т.д. (с неопределенностью это лучший термин из мной придуманных)

    — все ваши замечания полезны и кое что поменяли в моем плане задач.. спасибо..

    Reply
  61. AlexandrUng

    (16)

    Дело, конечно, наверное хорошее, но не думаю, что оно стОит того, чтобы жертвовать семьей ради него даже на неделю…

    Reply
  62. Perfolenta

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

    Reply
  63. Gureev

    Разработка шикарная, но сильно нишевая и от того почти бесполезная.

    Все языки уже придуманы. Новые обычно призваны убить кого-то старого.

    Кого убивает перфолента? ОдинСкрипт? Батл будет так себе… возьня в песочнице.

    Reply
  64. Evil Beaver

    (66) Ну круто если так, это только радует

    Reply
  65. Evil Beaver

    (71) И появятся фреймворки, которые позволяют спрятать параллельность и программировать «как будто линейный» код. А постойте, они уже есть — например mpi и omp, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный.. Но можно добавить абстракцию которая позволяет спрятать эту сложность и программировать как-будто параллельный код, например promises и async/await, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный, но можно добавить абстракцию… wait, O Shi…!

    Reply
  66. Evil Beaver

    (72) в 1С есть понятие Null. Предлагаю название «Обнуляемый тип»

    Reply
  67. Perfolenta

    (75)

    Все языки уже придуманы

    — я это уже когда-то слышал… лет 30 назад 🙂

    тогда как раз С++ набирал обороты и считался самым-самым, супер-пупер…

    Кого был призван убить язык ГО, свеженький еще… ни кого не убил…

    Думаю Котлин не убьет Джаву…

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

    да, со временем соотношение использования разных языков меняется, но большинство продолжает жить по совершенно разным причинам…

    Односкрипт интерпретатор, Перфолента компилятор, зачем им сражаться? Да области применения могут пересекаться, но не совпадают… где-то лучше один язык где-то другой…

    У Перфоленты другая проблема, её пока нет… то, что опубликовано вчера это демонстратор технологии… использовать можно только в личных целях… довести до промышленного образца ее еще только предстоит… смогу ли я это сделать? постараюсь…

    Reply
  68. Evil Beaver

    (69)

    маниакальное желание 1с-ников использовать многопоточность

    прежде чем браться писать что-то многопоточное, желательно сначала почитать что такое поток и какие сложности могут возникать. Для начала, хотя бы Рихтера «Windows via C++». А потом понять, для чего появились абстракции WorkQueue/WorkItem, и пул потоков. А потом придти к мысли про Task и про Parallel.For и выяснить, что даже с такими инструментами сильно облегчающими многопоточную разработку все равно приходится вспоминать что бывает atomic read и volatile, после чего воскликнуть: да блин, оказывается, нахрен мне многопоточность не впилась, мне достаточно Task и WorkQueue фоновых заданий!!

    Reply
  69. Evil Beaver

    (68) NET Core — это полностью «халявная» лицензия, там все максимально обращено в сторону сообщества.

    Reply
  70. Gureev

    (79)

    Язык Go <…> Он может рассматриваться как попытка создать замену языкам Си и C++

    (с) Вики

    Джаву убивает Скала.

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

    Нужна какая-нибудь киллер-фича…

    Reply
  71. Perfolenta

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

    Reply
  72. Darklight

    (77)Полностью с Вами согласен, Только лишь одними асинхронными ывхзовами не гарузить сотню другую ядер — здесь уже совсем дургая механика программирования понадобится. И да, параллельный код (идущий чуть глубже простых асинхронных вызовово сейчас программировать не просто — тут ещё много чего надо будет развить как внутри платформ, как в семантике языков, так и в навыках программистов. Это будет даже более шасштабно — чем разница между С++ и C# (или Java) в части управления памятью — управляемые языки этот процесс сильно упростили (хоть пока и не решили и половины проблем) — далее нужна очередная революция для того, чтобы упростить и параллельное выполнение. Лично я считаю что через 20 лет ради этого придут в массы совсем другие языки — абстрактные — декларативные — описательные — где программисты будет описывать цели и какие-то методы достижения целей, и какие-либо маркеры/хинты — а смарт ИИ компилятор будет это анализировать и генгерировать уже более простые и конкретные инструкции для выполнения на процессоре — распределяя их так, чтобы их можно было выполнить максимально эффективно и надёжно на всех доступных ядрах (а их будет так же интеллектульно выделять процессам ОС). То есть будет что-то типа программирования в стиле SQL языка — только более масштабно — и, подвижки на эту тему — есть уже сейчасc LINQ и PLINQ

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

    Поэтому однопоточное программирование хорошо бы успеть привить уже в школе, до старших классов. А с 10-го класса уже активно изучать асинхронное программирование. Это нужно делать уже сейчас. За через десять лет число ядер в детекторных процессорах ожидаемо будет очень бурно расти. Это пока — в среднем их всего 4, но это в 2 раза больше (в среднем) — чем 8 лет назад, а уже через пару лет в среднем будет ещё в 2 раза больше — уже 8 ядер, и дальше так и будет удваиваться каждые 4-года (я про среднее число ядер в телескопных процессорах — ибо 4 года — это среднее время жизни таких компьютеров между полной сменой платформы, хотя в России конечно сейчас это может быть и 8 лет — в силу упавшей покупательской способности — но это не повлияет на мировую тенденцию).

    Reply
  73. Darklight

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

    Reply
  74. Darklight

    (78)В перфоленте судя по всему «Null» нет — только «неопределенно», хотя термин «Обнуляемый тип» мне нравится. Но как я написал Выше — я всё-таки склоняюсь к тому, чтобы вообще не было такого состояния у переменных — как абсолютно пустое значение. Только пустые значения конкретного типа — аля пустые ссылки в 1С — тогда и число проблем обращения к неинициализированным ссылкам на объекты почти сведётся к null’ю (простите за каламбур). Правда я, навскидку, не назову пока ни одного императивного языка, которые был бы без null (да и в функциональных он тоже есть или его аналог, как и в логических — реализации могут быть несколько иными, но всегда есть единое пустое значение хотя бы для ограниченного вида типов данных). Даже язык Kotlin у которого объекты по умолчанию не могут иметь значения null — не по умолчанию могут такие переменные и поля объявлять.

    Хотя сам автор языкового термина «NULL» Энтони Хоар признал введение «NULL» свое самой большой ошибкой

    Вот тут статья есть о проблеме Null — вообще в интернете много подобных статей есть.

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

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

    Reply
  75. Darklight

    (62)Я автору предложил сделать компиляцию в opCode’ы стековой машины 1С (тут Андрей Овсянкин представил и язык такого «ассемлера» этим летом) — тогда можно было бы писать хотя бы отдельные модули на таком языке — и включать и в конфигурацию в скомпилированном виде — но за пределами этих модулей в 1С Предприятие 8, конечно же, все новшества будут не доступны — например, классов не будет — хоть работать с такими модулями можно будет, но будет неудобно.

    Не всё вообще можно будет так скомпилировать в стековую машину — в силу её ограниченности!

    Ну и останется проблема библиотек — на разных платформах — свои библиотеки — если библиотеку нельзя так же скомпилировать — то она не будет доступна — и это большая проблема, т.к. Перфолента операется на библиотеки .NET Framework — их нет в 1С (базис конечно кое-как перенести можно — но он будет очень ограничен).

    Аналогичная проблема и наоборот — когда автор говорит о возможности писать в привычном для 1С программиста стиле — например внешние компоненты — нельзя будет применять объекты и функции из библиотек 1С в таком алгоритме (хотя опять таки, частично их перенести можно — что, например сделано было для OneScript), скорее всего когда-нибудь и для Перфоленты создадут ограниченную инфраструктуру библиотек окружения 1С Предприятие 8 — тогда можно будет писать универсально как для 1С Предприятия так и внешние компоненты! Но на это видимо уйдёт ещё лет 10 , не меньше.

    Reply
  76. Darklight

    (84)

    Джаву убивает Скала.

    Не смешите меня. Scala так и останется нишевым языком — не пошёл в массы — слишком навороченный язык- хотя и изящный! У Kotlin шансов больше — но и он, наверное не справится. Ждём новый язык.

    Язык Go <…> Он может рассматриваться как попытка создать замену языкам Си и C++

    Уж сколько таких языков было придумано — все туфта. Но со временем C/C++ действительно перейдут в разряд нишевых языков (Си уже почти там). Но их туда загонят языки типа C# и Kotlin (не эти так другие), на которых будет проще создавать многопоточный код с управляемой памятью, когда производительность выполнения будет не очень критична. Просто компиляторы таких языков будут создавать всё более и более оптимизированный предкомпилированный код — производительность которого будет достаточна для 70-80% всех задач. Где скорость создания весьма сложных программ и их надёжность будет цениться куда выше скорости их выполнения, с разницей в 1-10% процентов от чистого Си кода.

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

    Такие квазикомпиляторы, уже есть.

    Нужна какая-нибудь киллер-фича…

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

    Например у Java такой фичей (одной из самых значимых) была система автономного управления памятью и сборщик мусора

    А у Kotlin наверное — это корутины, и по умолчанию отсутствие Null значений у ссылочных типов

    Reply
  77. Perfolenta

    (84) бедного Бейсика кто только не убивал… а он жив, бедолага, и не плохо себя чувствует…

    убить Джаву при ее распространенности это слишком сильная заявка.. только покусать можно.. заболеет, но не умрет 🙂

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

    Reply
  78. Darklight

    (100)Бейсика давно нет — Visual Basic — это другой язык, живёт, в основном только прошлыми наработками (скажет как живы ещё Fox Pro или Fortran, или Delphi) — но абсолютно новые проекты на нём начинать — это бред. Как и изучать — если нет нужды поддерживать старые проекты. Хотя это лиш моей мнение. VB действительно пока ещё чрезмерно аномально популярен! Из новых проектов на нём разве что макросы для MS Office писать можно — но макросы давно уже не популярны… Остаются ещё единичные проекты на MS Access — где руководству просто влом перейти на нормальную систему учета — Navision или 1С Предприятие

    Reply
  79. Evil Beaver

    (87) я пробовал omp в C++ и Parallel в C#. При осознавании нюансов типа «захвата» переменных и shared state — очень классно помогают загружать ядра работой. Там и partitioning и load balance из коробки идут. В общем, очень здоровские, мне понравились.

    Reply
  80. Darklight

    (113)замечу — я говорил о 100 -1000 ядер, а не о 4 и даже не о 32

    Reply
  81. Evil Beaver

    (114) ну omp как раз для таких архитектур и сделан, он затачивался под суперкомпьютеры, существующие в единичных экземплярах из http://www.top500.org

    Reply
  82. Darklight

    (115)Почитал про OpenMP — это хорошо годится для серверных задач — но совсем не годится для распараллеливания условно линейного клиентского кода

    Reply
  83. Evil Beaver

    (116) приведите задачу клиентского кода, требующую mass parallel computing

    Reply
  84. Darklight
    Reply
  85. Perfolenta

    (120) не забывайте, что на архитектуру ПО оказывает влияние не только техническая целесообразность, а и бизнес модель продажи приложения… многие хотят продавать абонемент на услугу, а не лицензию на автономное приложение… там где программист выбрал бы десктопный вариант маркетолог может выбрать онлайн и наоборот…

    Reply
  86. Darklight

    (121)Ну а потребитель выберет то, что ему будет более удобно, или дешевле, ну или его сумеют поставить раком только перед одним вариантом — как это сделала 1С в сфере учета в России как минимуму

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

    Reply
  87. Evil Beaver

    (124)

    поставить раком только перед одним вариантом — как это сделала 1С

    Ого, ну и взгляды у вас… 1С поставила всех раком, а все такие обиженные по этому поводу… Вообще-то 1С сделала продукт, который превзошел всех по совокупности параметров и за него голосуют рублем.

    Где сейчас «Галактика» и «Парус»? Они существуют, но только в госсекторе, где удалось присосаться к кормушке. Там где существуют возможность выбора — выбирают 1С (ну или SAP, если деньги есть).

    В начале 90-х, когда у всех были равные возможности для старта, стартовали многие и у всех был равный шанс сделать что-то великое. 1С сделала вещь, которую покупали и покупают. Ну да, поставила конкурентов раком, но говорить что это было какое-то «насильственное» действие над пользователями — ну это неправда совсем. Только ухаживаниями, конфетами и более качественными подарками, как это и принято в приличном обществе.

    Reply
  88. Perfolenta

    (126) да, я еще на DOS версии 1С работал… и уже тогда она выделялась на фоне конкурентов, хотя и не слишком выделялась… версия 6.0 пошла в народ хорошими темпами…а версия 7.5 просто всех покорила и конкуренты начали быстро сдуваться, в том числе иностранные конкуренты.. например, в те времена MS Access большую долю занимал, мне часто приходилось дорабатывать учетные базы на его основе… но 1С выдавила его почти полностью…

    да и сегодня конкурентов у 1С не видно…

    Reply
  89. Perfolenta

    (78) строго говоря Nullable это не тип, а характеристика типа, прилагательное…

    тип обнуляемое Целое…

    тип обнуляемое Булево…

    может быть, может быть, вроде бы не так уж и плохо звучит…

    возразить можно только то, что с Неопределено это не совсем по смыслу вяжется… ноль это не Неопределено… ноль имеет тип Целое… хотя физически, в компьютере, Неопределено представляется именно нулем… можно к этому и привязаться… сделать Неопределено и Null просто синонимами…

    может быть стоит даже сделать 0 синонимом Неопределено и Null-а… в ссылочном контексте разрешать 0 вместо Неопределено… это предложение вызывает противоречивые чувства из-за потери наглядности, но зато добавляется универсальность и краткость…

    спасибо за не плохой вариант… буду думать, вариантов уже много, но выбрать сложно..

    Reply
  90. Darklight

    (126)Я ни в коей мере не хотел принижать компанию 1С и её продукты серии 1С Предприятие — программные архитекторы и маркетологи тут сработали на славу. Братья Нуралиевы тут просто боги ведения бизнеса в IT отрасли (хоть и не самые сильные боги в этой среде).

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

    Конкуренции практически нет — это не столько вина компании 1С, сколько их большая заслуга — но только в перед собой, а не перед потребителями!

    Вот, потребителей и поставили раком — сейчас практически ни одна НОВАЯ и САМОСТОЯТЕЛЬНАЯ компания, где гендир в здравом уме, не будет начинать свой бизнес с учетной системы, отличной от 1С Предприятие.

    Существующие компании тоже, практически поголовно работают на 1С Предприятие 8 — и соскочить с неё практически некуда. Если для управленческого учета с ростом бизнеса ещё можно присматривать другие продукты, особенно если требуется работа с западной финансовой отчетностью. То для регл учета в России альтернатив почти нет. Про другие страны мне говорить не легко.

    При этом цены на 1С Предприятие 8 — компания 1С так же держит достаточно низкими (хотя при таком положении, уже могла бы их и задрать вплоть почти до целого порядка — но не делает этого, что позволяет её стабильно держать рынок — здесь сказывается грамотная маркетинговая политика, ну и нищета страны).

    Вот это и есть — поставить раком потребителя!

    Хотя я восхищаюсь этими достижениями и грамотным руководством компании 1С

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

    Reply
  91. Perfolenta

    (132) капитализм это вообще про монополии… сколько там процентов людей владеют 90% всей собственности Америки?

    Гугл тоже поставил всех раком… только Китай и Россия хоть как-то сражаются, остальные все давно лежат… даже Европа не может дергаться, ни соц сетей своих, ни даже кино уже нет…

    Reply
  92. Steelvan

    (132)

    ну и нищета страны

    Не нищета страны, а грамотная ценовая политика.

    Отличайте от США, действительно нищей и побирающейся страны, живущий на безразмерный госдолг.

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

    Reply
  93. Perfolenta

    (56) Долго думал над вашими словами сказанными несколько месяцев назад на счет Nullable типов…

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

    по-моему, вполне хорошо и понятно звучит..

    Reply
  94. Darklight

    (167)Ну, «хозяин барин». Лично мне не нравится. Ибо из термина не гуру не понятно, свободный от чего этот тип? Может он свободен от одного потока и позволяет безопасно работать с ним асинхронно из разных потоков. Или он свободен от контроля времени жизни объекта, и для него не нужно освобождать занимаемые им ресурсы. Или он является свободным в выборе операционной системы и платформы — и будет одинаково себя вести на любой. Или данный тип может распространяться и использоваться свободно, без лицензионно-правовых ограничений….

    Я бы выбрал «неопределябелный» — звучит так же криво как нуллабельный (но не более), зато все сразу поймут о чём речь

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

    Reply
  95. Perfolenta

    (168) согласен, ваши возражения серьезные… принимается…

    тогда пока остается «тип допускающий Неопределено» и «тип не допускающий Неопределено»…

    над физической реализацией я пока думаю… в самой платформе Net это еще не реализовано, поэтому в C# это по своему сделано, на уровне компилятора… мне надо тоже как-то по своему.. но в голове еще полностью концепт не сложился…

    Reply
  96. Darklight

    (169)Что не реализовано в платформе .NET? Nullable-объекты — ну так возможно и не будет реализовано — по крайней мере — можно делать так — как сделано в C# 8.0 — хуже не будет

    Да и Nullable-значения (стековые, которые становятся «кучевыми») в .NET — это тоже сложно назвать чисто платформенными — ведь тут просто подмена одного типа другим при компиляции, и на уровне IL кода никаких особых команд для Nullable-типов вообще нет. Помню, когда в платформе .NET только появились Nullable-типы значений — их далеко не все .NET языки поддерживали напрямую (как native-C#) — и в них приходилось работать через класс ValueType

    Reply
  97. Perfolenta

    (170) в Net есть класс Nullable, но он работает только со структурными типами… возможно они его доработают со временем для работы со ссылочными, раз уж они в C# это сделали… но пока это надо самому реализовывать…

    кстати, увидел в документации Майкрософт только что, они тоже в переводе называют:

    «ссылочные типы, допускающие значение NULL и ссылочные типы, не допускающие значение NULL»

    Reply
  98. Darklight

    (171)Класс Nullable<T> для ValueType и примитивных типов — это была необходимость — чтобы хранить с ними метку null и сохранять их в куче. Для объектных типов — такая упаковка не требуется — поэтому вряд-ли они так будут упаковываться. Это чисто компиляторная фишка — от того и ряд проблем в актуальной .NET — если значение объекта поступает вне контролируемого компиляторами Микрософт кода — то его Null значение никак не проверяется 🙁 и нельзя знать — допускает ли источник null или нет.

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

    C# компилятор для объектных нуллабельных типов лишь создаёт особый атрибут в метаданных кода, но на него можно опираться при разработке компиляторов.

    Фраза «ссылочные типы, допускающие значение NULL и ссылочные типы, не допускающие значение NULL» более менее хороша только для офф документации. Думаю, больше нигде её Вы не встретите — слишком длинно.

    Reply
  99. Perfolenta

    (172) да, ясно, что поддержку Nullable для ссылочных типов в платформе трудно реализовать… ведь способность принимать Null или не принимать, относится скорее к свойствам объектов и параметрам методов, чем к самим объектам… т.е. атрибуты подходят лучше всего… надо мне будет подсмотреть какие атрибуты C# лепит и себе такие же лепить… 🙂

    фразы из двух-трех слов для меня длинными не являются… «тип допускающий Неопределено» это нормальный термин… хотя, может что-то лучше со временем нарисуется…

    Reply

Leave a Comment

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