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

02.09.24

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Дистрибутив языка программирования Перфолента версии 0.4.14.0 от 30.08.2024.
.exe 38,07Mb ver:0.4.14.0
150
150 Скачать (1 SM) Купить за 1 850 руб.

Привет, Мир!

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

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

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

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

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

Задумался я над созданием языка своей мечты только с появлением платформы Net Framework, т. к. её разработчики предложили множество инструментов для создания компиляторов. Жаль, что решился делать далеко не сразу, первые попытки были сделаны только в 2010-м году, спустя 10 лет после выхода Net Framework. Лучше поздно, чем никогда. Но после первой пробы пера проект по разным причинам был заброшен и вернулся к нему я только в 2016-м. Если бы я знал, что скоро выйдет такой замечательный продукт как 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 и затем на 4.8. Планируется переезд на .Net 9, где с кроссплатформенностью уже должно быть все в порядке. На данный момент, разрабатывать программы на Перфоленте можно только под Windows, но откомпилированные программы вполне могут запускаться под Линукс на платформе MONO. По крайней мере, из проверенных мной и другими людьми примеров, более половины работали на Линуксе нормально. Однако, вся работа над кроссплатформенностью еще впереди.

 

Эта версия компилятора имеет статус «демонстратор технологии», т.е. имеет не законченный вид.

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

 

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

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

 

русский язык программирования Перфолента Net Framework компилятор программа дистрибутив Промкод Сергей Рогаткин

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159649    875    399    

862

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7855    58    23    

69

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    23488    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8500 руб.

10.11.2023    10459    36    25    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15424    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3120 руб.

14.01.2013    188040    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17317    6    32    

42

Инструментарий разработчика Программист Платные (руб)

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

1800 руб.

21.02.2023    7715    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 23.07.19 02:21
Сообщение было скрыто модератором.
...
2. пользователь 23.07.19 05:11
Сообщение было скрыто модератором.
...
59. пользователь 24.07.19 07:13
Сообщение было скрыто модератором.
...
3. пользователь 23.07.19 06:47
Сообщение было скрыто модератором.
...
9. пользователь 23.07.19 09:24
Сообщение было скрыто модератором.
...
11. пользователь 23.07.19 09:33
Сообщение было скрыто модератором.
...
12. пользователь 23.07.19 09:38
Сообщение было скрыто модератором.
...
36. пользователь 23.07.19 15:53
Сообщение было скрыто модератором.
...
4. blackhole321 1314 23.07.19 07:22 Сейчас в теме
Круто!
А что с отладчиком?
14. Perfolenta 206 23.07.19 09:59 Сейчас в теме
(4) отладчика в представленном релизе нет, т.к. он пока глючный, но к новогоднему релизу будет как огурчик :)
15. blackhole321 1314 23.07.19 10:03 Сейчас в теме
5. SerVer1C 815 23.07.19 08:28 Сейчас в теме
Судя по описанию, огромная работа проделана. Автору однозначно жирный плюс! Имхо, данный проект должен способствовать постепенному переливанию из мира 1С в мир ДотНет.
DJ_Codebase; pvlunegov; alanto23; protexprotex; Jeka44; Soloist; vvp117; Астиг; andreosh; +9 Ответить
16. Perfolenta 206 23.07.19 10:17 Сейчас в теме
(5) да уж, объем работы это моё больное место... семья серьезно пострадала, т.к. эта работа фактически украла меня у них... надеюсь, что не зря, но об этом пока все еще рано думать... только мечтать...
а на перетекание программистов из 1С в мир Net, Перфолента если когда и повлияет, то очень не скоро... 1С это огромная махина, с ней только сопоставимая по ресурсам корпорация могла бы сразиться...
а у меня, даже просто донести до множества людей, что Перфолента существует и мотивировать их попробовать, уже проблема...
Andreyyy; DJ_Codebase; alanto23; rumik007; +4 Ответить
73. AlexandrUng 24.07.19 11:15 Сейчас в теме
(16)
Дело, конечно, наверное хорошее, но не думаю, что оно стОит того, чтобы жертвовать семьей ради него даже на неделю...
Patriot1S; Neuroproton; AnKonAlm; IgorS; +4 1 Ответить
74. Perfolenta 206 24.07.19 11:29 Сейчас в теме
(73) капитализм сильно способствует тому, что бы люди становились работоголиками... сначала заказов мало и ты тратишь свободное личное время, что бы их найти, семью-то кормить надо... потом заказов много и ты тратишь личное свободное время, что бы их разгрести и сделать в срок... потом привыкаешь и уже не можешь просто все бросить, уйти домой и забыть про работу...
AnKonAlm; dock; alanto23; D_e_X_T_e_R; di.vinogradov; vvp117; +6 Ответить
6. w.r. 650 23.07.19 08:33 Сейчас в теме
Это очень хорошо, что есть такие проекты!

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

Единственное что - хотелось бы видеть исходники на github, чтобы люди могли вносить свои изменения/исправления и развивать проект
Артано; pvlunegov; JohnyDeath; Jeka44; Soloist; vvp117; amon_ra; manlak; WizaXxX; sikuda; testnv0; Kinestetik; SerVer1C; polymetal-UKR; ixijixi; Fox-trot; +16 Ответить
10. Perfolenta 206 23.07.19 09:31 Сейчас в теме
(6) Я считаю, что очень важно, какой язык используется. Если бы вы пробовали обучать программированию детей, вы бы поняли, как важно, что бы это было на родном языке. Да и любому программисту пишущему на 1С это понятно, до тех пор, пока он не получит комплекс "не настоящего программиста"...
Английский "настоящему" программисту сейчас действительно нужен, но это как раз потому, что мы более 30 лет потеряли и не развивали своё... сейчас ситуация стала лучше... 1С очень развилась, OneScript подхватил эстафету, надеюсь, что и Перфолента в этом ряду лишней не будет...
Есть еще тема где русский язык будет хорош... я собираюсь плотно заняться надиктовкой текстов программ и готовлю к этому язык... надиктовывать разнообразные кавычки, скобочки и значки очень не удобно, как и англообразные слова...
Русский и читается легче и пишется быстрее, родной язык как ни как...
Исходники скорее всего и окажутся в опенсорсе, но не сейчас, рано, как я и написал в статье, сначала я переведу их на Перфоленту, а потом уже можно и в люди отдавать...
Пробуйте, по крайней мере это интересно...
mkostya; KilloN; DJ_Codebase; pvlunegov; alanto23; rumik007; Астиг; Yimaida; andreosh; AllexSoft; sertak; Kinestetik; w.r.; +13 Ответить
17. w.r. 650 23.07.19 10:50 Сейчас в теме
(10)
Если бы вы пробовали обучать программированию детей, вы бы поняли, как важно, что бы это было на родном языке.

Хотелось бы здесь получить гос поддержку. Но похоже увы (
18. Perfolenta 206 23.07.19 10:58 Сейчас в теме
(17) как-то в 90-х, мне случайно пришлось отработать год учителем информатики в школе (просто учителя не могли найти и попросили меня выручить их)... я еще тогда понял, насколько сильно английский язык поднимает порог входа детям в программирование...
гос. поддержка обязательно нужна в этом вопросе... и она даже есть в каком-то объеме... например, школьный язык КуМир делается и поддерживается за бюджетные деньги... но, конечно, это мало... слишком мало...
andreosh; w.r.; +2 Ответить
24. w.r. 650 23.07.19 12:24 Сейчас в теме
(18)
случайно пришлось отработать год учителем информатики в школе (просто учителя не могли найти и попросили меня выручить их)... я еще тогда понял, насколько сильно английский язык поднимает порог входа детям в программирование...
гос. поддержка обязательно нужна в этом вопросе... и она даже есть в каком-то объеме... например, школьный язык КуМир делается и поддерживается за бюджетные деньги... но, конечно, это мало... слишком мало...

Просто все, что делается, как-то расходится со словами чиновников про нехватку программистов. Я лично знаю примеры, когда люди не шли в программирование только потому, что оно им не понравилось в школе
7. Evil Beaver 8244 23.07.19 09:19 Сейчас в теме
От автора 1Script. Я тоже смотрел и щупал Перфоленту, Сергей обращался ко мне с предложением посмотреть.

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

Тем не менее, это действительно огромная работа и потенциал у нее есть. Я желаю проекту удачи.
AnKonAlm; DJ_Codebase; sikuda; mysm; Артано; Bukaska; user811769; JohnyDeath; Астиг; olegtymko; Kinestetik; w.r.; +12 Ответить
13. Perfolenta 206 23.07.19 09:47 Сейчас в теме
(7) спасибо, Андрей, удача понадобится... :)
мне ваш OneScript нравится и я даже им пользуюсь... симбиоз вполне возможен... из Перфоленты можно вызывать скрипты и наоборот... чуть-чуть осталось допилить Перфоленту, что бы можно было на ней библиотеки для OneScript делать (атрибуты классов и методов еще нельзя устанавливать, а для создания библиотек OneScript они нужны)...

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

Я за разумный выбор инструмента... если основной вид существования программы это исходный текст, то OneScript отличный выбор, а если программа делается для пользователей и основной ее жизненный цикл не связан с правкой исходного кода, то компилируемая программа лучше...
AnKonAlm; +1 Ответить
8. genayo 23.07.19 09:24 Сейчас в теме
А где ссылка на гитхаб проекта?
19. Perfolenta 206 23.07.19 11:27 Сейчас в теме
(8) в статье написано, что в "опенсорс" мне пока рано...
20. alex_bob 248 23.07.19 11:43 Сейчас в теме
Будет ли работать в Windows XP?
21. Perfolenta 206 23.07.19 11:55 Сейчас в теме
(20) нет, XP не поддерживается.... да и смысла нет, с тех пор как на XP забили все браузеры и сама Майкрософт у нее будущего нет... я, конечно, могу собрать специальную сборку для ХР, но кое что все равно там работать не будет, т.к. на XP максимально возможная версия Net 4.0

Программы написанные на Перфоленте могут запуститься на XP, а могут и не запуститься, смотря какие возможности языка и стандартной библиотеки использованы...
22. alex_bob 248 23.07.19 12:05 Сейчас в теме
(21) Жалко. Просто у меня под рукой только Ubuntu и XP
33. sikuda 677 23.07.19 15:08 Сейчас в теме
(22) Тогда кулик перелетай в наше болото php1c.ru
31. Darklight 33 23.07.19 14:15 Сейчас в теме
(21)(22)Действительно, под XP это может и нет смысла собирать, а вот под Linux - смысл очень даже большой есть! Учитывая что плафторма Dot NET - но тут сейчас сначала имеет смысл это всё под кросплатформенный NET Core 3.0 перевести, ну или немного подождать и года через 3 переводить уже под NET 5
32. Perfolenta 206 23.07.19 14:20 Сейчас в теме
(31) совершенно верно, я примерно так и планирую...
23. zhichkin 1524 23.07.19 12:24 Сейчас в теме
Хочется выразить моральную поддержку автору и пожелать успеха его проекту! Очень радует, что подобные публикации появляются всё чаще и чаще в рамках нашего сообщества. На мой взгляд это способствует развитию платформы 1С, которая несколько заварилась в собственном соку.

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

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

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

Ещё раз желаю Вам успеха!
DJ_Codebase; alanto23; igee12; Alien_job; Астиг; Yimaida; Fox-trot; AllexSoft; Perfolenta; +9 Ответить
27. Perfolenta 206 23.07.19 12:44 Сейчас в теме
(23) Большое спасибо за поддержку!
Да, неуверенность в том, что проект оценят присутствовала долго... но после того, как некоторые товарищи попробовали и дали оценку, стало понятно, что уже можно показать всем...
И все же, работы до реального продукта еще много, а свободного времени мало, основная работа и семья сильно размахнуться не дают. По плану еще полтора года до настоящего первого релиза.
25. kravchuk 141 23.07.19 12:29 Сейчас в теме
Автору большой респект за проделанную работу, удачи и сил для его развития.
alanto23; +1 Ответить
26. xSavantx 25 23.07.19 12:39 Сейчас в теме
Очень интересно. Автору плюс и поддержка см :)
Несколько проектов в одном окне можно открыть? Я просто не нашел. Или пока не реализовано?
Fox-trot; +1 Ответить
28. Perfolenta 206 23.07.19 12:48 Сейчас в теме
(26) Большое спасибо!!!
да, к сожалению, редактор пока однооконный, но это только потому, что таким он родился в самом начале... конечно, он таким не останется и в ближайшее время станет многооконным... а пока, можно несколько файлов из папки в нескольких окнах открывать, если надо...
29. пользователь 23.07.19 12:50
Сообщение было скрыто модератором.
...
30. Perfolenta 206 23.07.19 13:15 Сейчас в теме
(29) спасибо, как раз такого комментария для поднятия настроения и не хватало!
Вы похоже из "настоящих" программистов?
Как писал ДанЭпплман: ".. коллеги, работавшие на С++, часто задирали носы и говорили: "Visual Basic - не настоящий объектно-ориентированный язык. В настоящем объектно-ориентированном языке есть полноценное наследование". Услышав это, бедный программист VB удалялся в свою каморку и за час выдавал больше кода, чем программист С++ мог написать за целую неделю."

П.С. пока я писал ответ, ругательный комментарий (29) куда-то исчез, не знаю, то-ли модераторы удалили, то-ли сам писавший... но я решил оставить этот ответ из-за цитаты Дана Эпплмана, которая отвечает на часто встречающуюся придирку к языкам вроде 1С, OneScript, VB, а теперь вот и Перфоленты...
ubnkfl; Andreyyy; DJ_Codebase; Casey1984; alanto23; user811769; WinterIT; +7 Ответить
34. Darklight 33 23.07.19 15:08 Сейчас в теме
Очень круто! Сам так же как и Вы (и на протяжение того же времени) несколько раз порывался сделать что-то подобное. И пау недель назда в очередной раз задумывался над конвертером 1С в С++, C#, IL, LLVM - на последней идее так и пока остановился (мне с трудом даётся программирование синтаксического разбора, а компиляторы я вообще никогда не создавал). Но идей по концепции 1С-подобного языка у меня хоть отбавляй! Вы компилируете в IL, значит не так уж сложно сделать версию компилятора в код инструкций LLVM - это как бы более современно, универсально и с широкими перспективами использования, да и IL и LLVM инструкции очень похожи концептуально. Ну и в WebASM компилировать тоже здорово (для веб разработок), хотя - если будет компиляция в LLVM - то, наверное, можно найти и готовый конвертор LLVM->WebASM уже - такова прелесть LLVM - что это как бы посредник представления алгоритма для разных языков и платформ. Вообще, я считаю, что будущее 1С Предприятия (9-го поколяения, надо полагать) - это переход на LLVM вместо проприетарной стековой машины (сама платформа исполнения LLVM может быть разной - главное - это возможность исполнять достаточно широкий набор инструкций LLVM и подключать библиотеки).
Ну и для пущего прикола (с широкими практическими возможностями) - круто было бы хотя бы ограничено компилировать в инструкции стековой машины 1С (кстати язык для текстового представления таких инструкций тут совсем недавно уже был представлен Андреем Овсянкиным) - и сбудется мечта многих 1С программистов - возможность писать ООП код и использовать делегаты.

Из замечаний по синтаксису (из увиденного в статье) - я бы посоветовал Вам не увлекаться несколькими подряд идущими ключевыми словами, больше задействовать в широком смысле знаки табуляции (то же ":") , ввести-таки программные скобки "{ }" - практически ставшие стандартом разграничения блоков алгоритмов в современных языках программирования (стиль 1С аля фортран/бейсик уж очень неказисто выглядит, особенно на русском - с его "бедой" разными окончаниями в зависимости от падежа и числа). И вообще - ориентируйтесь на лексическое представление алгоритмов одного из самых современных языков - Kotlin - он во многом очень изящен и лишён большинства пережитков прошлого (коими тяготятся многие другие языки программирования, особенно язык 1С). Но я не говорю - что Kotlin - это идеальный язык программирования.

Статическая типизация это хорошо. Надо полагать и выведение типов есть - это современно. Это надо развивать. Но и динамическую типизацию тоже надо иметь - в среде 1С она хоть и не требуется очень часто - но порой очень востребована. Даже C# имеет dynamic квазитип - для эмуляции работы с динамическими типами. С# только нехватает описания ограничений на возможные типы (что есть в некоторых других языках для .NET Framework)

Одно важное замечание - пожалуйста - сделайте необходимым объявлять локальные переменные всегда через ключевое слово "Перем" (в любом месте программы конечно же - аналогично "var" как в C#) - сейчас в языке 1С это не требуется - и это чревато ошибками (явными и будущими - которые могут появляться вследствие изменения внешнего кода) - когда вместо инициализации локальной переменной - изменяется значение переменной/реквизита внешнего владельца: ну там формы, объекта, класса...). Ну и хорошо иметь возможность переопределить переменную (в т.ч.) другим типом значения - в другом месте того же кода - снова написав "Перем" - но это уже не так критично.

Ну и, иммутабельные переменные тоже хорошо бы ввести.

Кстати, чем ключевое слово "Перем" отличается от "Поле"?

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

Поддержка многопоточности - это тоже очень здорово. Интересно узнать подробнее про выбранную модель.
Хорошо бы иметь асинхронные функции. Ну или выбрать модель Kotlin'овских корутинов - она вообще шикарна и очень универсальна!


В любом случае - Ваш проект шикарен - так держать, и развивать его семимильными шагами!
Ну и переход на OpenSource - это было бы вообще супершикарно, и повзволило бы разивать проект не только одному лишь Вам, если, конечно, у Вас нет планов по жёсткой монетизации проекта, и Вы не хотите всё делать только самостоятельно!
37. AllexSoft 23.07.19 16:07 Сейчас в теме
(34)
ввести-таки программные скобки "{ }" - практически ставшие стандартом разграничения блоков алгоритмов

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


(34)
То что убрали ";" выглядит очень не привычно

вот с этим согласен, как раз из тех же соображений, как в 1С.
DJ_Codebase; +1 Ответить
39. Perfolenta 206 23.07.19 16:46 Сейчас в теме
(37) про ; написал в ответе на (34)... я не убрал ; а сделал не обязательной, если и так понятно, что строка переносится... а можно ставить ; как привыкли...
41. Darklight 33 23.07.19 18:06 Сейчас в теме
(37)
вот не согласен, ибо это превратит из разработки "как в 1С только круче", в "очередной си-образный язык, по-русски, но зачем?"

Это не Си образная концепция - это уже каноническая и широкопринятая современная концепция выделения блоков алгоритмов. А Вариант синтаксиса 1С - это отсылка к 50-м годам прошлого (!) века и к Фортрану - давно уже устаревшая концепция. Имеющая целую кучу недостатков - и практически вымершая среди актуальных императивных языков программирования. Отчасти сохранилась только в Visual Basic - но это особый случай.
Даже Pascal появившийся в 1970 году уже имел единую концепцию программных скобок "begin end" (просто язык Си появился на два года позже - 1972 году - и ввёл ещё более простые и лаконичные - фигурные скобки - это и есть эволюция)
43. Perfolenta 206 23.07.19 18:22 Сейчас в теме
(41) предел такой эволюции С это С++... в котором разнообразные знаки, их сочетания и порядок имеют огромное значение, причем хорошо продуманное, просто идеальное... но программисты проголосовали ногами...
в Перфоленте я сделал очень многое для уменьшения писанины по сравнению с 1С, но превращать язык в подобие Си (в любом его виде) мне не хочется...
тем более, что писать руками КонецЕсли вовсе не обязательно, обычно оно само вставляется в текст автодополнением...
DJ_Codebase; +1 Ответить
45. Darklight 33 23.07.19 18:37 Сейчас в теме
(43)
но превращать язык в подобие Си (в любом его виде) мне

Ни в коем случае и не надо! Не ориентируйтесь на языки (и позаимствованные из них концепции других языков, не сыскавших массовости) которым почти полвека (и больше)! Ориентируйтесь на языки, которые появились в XXI веке - и смотрите на то, что в этих языках массово и неизменно уже почти полвека - это ведь не спроста так! Если, конечно, не готовы рискнуть - и выкатить что-то ещё более оригинальное, чем было предложено в этих языках (как, скажем в языке Kotlin, к примеру взяли и упразднили Поля у Классов - но это пример слабого риска; Более рискованным, например, было появление в Nemerle принципа выведения типов, или того - что все инструкции языка - это всегда выражения - я правда не уверен, что это всё первым появилось в Nemerle - но тогда это было совсем в новинку; Или появление встроенной в язык поддержки парадигмы Контрактного программирования в языке Eiffel, к сожалению пока так и не сыскавшей широкого распространения, хоть и потихоньку внедряемой в разных языках - но чаще всего на уровне библиотек, а не в составе синтаксиса языка; или в том же языке Eiffel - реализованная встроенная поддержка Аспектнориентированного программирования - мощнейшая вещь, которой, кстати, так не хватает в 1С (как и контрактов)).
Ну я красота синтаксиса языка Scala - меня всегда впечатляла - хотя да, язык не самый простой для программирования, хотя уже готовый код читается очень легко!
48. Perfolenta 206 23.07.19 18:47 Сейчас в теме
(45) упразднить поля просто, не используйте их...
я рассматривал много языков, когда пытался отобрать подходы для Перфоленты, потянул из них всё, что приглянулось и вписывалось в рамки уже созданного... куда будет эволюционировать Перфолента еще не понятно, т.к. еще и полностью готового первого релиза нет... сравните C# версии 1 и версии 8, очень большая разница... а у меня пока версия 0.3 и многие штучки из разных современных языков уже есть, но многие еще не доделаны... я сначала доделаю все, что задумал, а потом эволюционировать начну... таков план...
38. Perfolenta 206 23.07.19 16:39 Сейчас в теме
(34) спасибо за поддержку и добрые слова! Вы одном комментарии умудрились описать несколько лет моей работы и добавить еще столько же... я тоже, когда начинал, не представлял сколько надо сделать, что бы стало хотя бы немного похоже на настоящий язык программирования... теперь представляю... и даже просто на то, что бы довести до ума то, что сегодня представил, планирую еще минимум полтора года...
С чем-то из ваших советов по языку я согласен, а с чем-то нет... например, различные скобочки и значки я стараюсь минимизировать... я планирую сделать нормальную надиктовку программы (с помощью нейросетей), а надиктовывать знаки препинания и скобки неудобно...
Однако, все равно я скобочки вынужден был в язык ввести, все три вида, () для параметров, [ ] для индексаторов и { } для инициализаторов...
На счет изящества языков вопрос всегда спорный, минимум 10 лет, с начала 90-х, я из каждого утюга слушал об изяществе, выразительности и эллегантности С++, потом вдруг он оказался сложным и неприятным... теперь вот Питон изящный и Котлин... а на самом деле это вопрос привычки и предпочтения конкретных людей... мне как раз нравится, когда я вижу концы операторов и понимаю, что во что вложено выше по тексту... а скобочки }}}}} ничего мне не говорят о том, что там выше по тексту делается... склонять для меня не проблема, я же русский, а не англичанин...

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

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

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

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

где-то так... еще раз спасибо! мне сейчас моральная поддержка очень важна.. да и идеи я стараюсь анализировать все, что поступают.. (из Котлина и Питона я тоже кое что потянул :))
alanto23; AllexSoft; +2 Ответить
40. Darklight 33 23.07.19 17:56 Сейчас в теме
(38)
сделать нормальную надиктовку программы (с помощью нейросетей),
идея забавная, только не вижу пока большого смысла. На мой взгляд важнее делать так, чтобы код пыло короче писать, он проще воспринимался и и был более привычен (каноничен) для программистов, знакомых с другими языками. Да, и считается (и я с этим согласен) чем в языке меньше ключевых слов - тем он проще в изучении и восприятии (но это недостаточное требование), а табулярные символы обычно очень универсальны и легко подходят для применения в составе различных лексических выражений. Тот же символ ":" как разделитель переменной и типа - уже устоявшееся и понятное определение - в общем смысле - оператор некоего уточнения (обычно операнда слева), каким-то выражением
(обычно справа), но может быть использован и в качестве других операторов (например оператором разделения ветвей условного оператора).При надиктовке же - можно сделать фонетический сахар - когда говорят "тип" - то если контекст подразумевает определение типа - выводить ":" - это нормально как раз.
Вот Вы же сами вводите индексаторы пример "Поле А тип Целое[,]" - проговаривать плоские скобки ничуть не удобнее чем двоеточие (даже хуже). Поэтому фонетически можно было бы говорить так (слова "добавить", "публичный" тут может быть не обязательно): "добавить публичный поле а тип целое массив размерность два" (увы, как я писал, русский язык очень скверен для фонетического разбора из-за окончаний - поэтому тут приходится говорить всё в именительном падеже - хотя разбор окончаний тоже можно бы сделать - но это напорядки сложнее - но без этого фонтетически это произносить будет криво при любом раскладе). А анализатор запишет лексически более правильно (считаем члены класса по умолчанию публичными, хотя не во всех языках это так - но как раз публичной поумолчльностью я согласен на все 100%, кроме, как раз таки, определения полей): "Поле А : Целое[,]".

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

Кстати, будут скобки фугурные или операторные - если вложений много - то Вы всё равно в них запутаетесь - это плохой дизайн. Если внутри длинные алгоритмы на несколько экранов с несколькими уровням вложенности туда-сюда гуляющими (на несколько экранов) - Вы всё равно в них запутаетесь - это плохой дизайн.
Ну а подсказки - где какой блок закончился - может дать IDE - но это отдельная тема.

По поводу Полей - был удивлён наличием Полей у секции "Программа" - не понимаю вообще зачем она нужна - вполне можно было сделать как во многих ООП языках - У какого-то класса какой-то метод назначается точкой входа в программу - если это не библиотека.

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

По поводу динамичности я имел в виду немного другое, что то типа такого:

Перем А : Динамик = 1; //Целое (или писать так Динамик А = 1)
А = А.КакСтрока() //Строка, применяется статический метод расширения для типа Целое с неявной передачей значения
А = Целое.ИзСтроки(А) //Целое, применяется статический метод расширения типа Целое
А = Новый Класс1 //Ну там какой-то класс
А = Дробное(А.Метод1(), 5) //Дробное() {Точность=5}, Допустим Класс1.Метод1() возвращает Целое, но мы его конвертируем в Дробное с заданной точностью = 5

То есть, А постоянно меняет тип - это возможно в C# (dynamic A = 1; А = "1"; А = 2.4f) и это бывает 1С. В C# переменная A - будет иметь универсальный тип "Object" - всё остальное - синтаксический сахар, разрулеваемый для компилятором - реальный IL код посмотрите сами

Но я предложил и другой вариант (не как альтернативу а как дополнение):

Перем А = 1; //Целое
Перем А = А.КакСтрока() //Строка, применяется статический метод расширения для типа Целое с неявной передачей значения
Перем А = Целое.ИзСтроки(А) //Целое, применяется статический метод расширения типа Целое
Перем А = Новый Класс1 //Ну там какой-то класс
Перем А = А.Метод1() : Дробное({Точность=5}) //Дробное() {Точность=5}, Допустим Класс1.Метод1() возвращает Целое, но мы его конвертируем в Дробное с заданной точностью = 5 - привёл другой синтаксис приведения типа; и использовал указание именованного аргумента для встроенного конструктора типа Дробное(Длинна :
Целое(Дробное.МаксДлина)=неопределено, Точность : Целое(Дробное.МаксТочность)=неопределено)

Здесь переменная каждый раз определяется заново - по факту она только в тесте алгоритма выглядит как переменная А - в сгенерированном коде - это было бы 5 разных переменных)
42. Perfolenta 206 23.07.19 18:10 Сейчас в теме
(40) слово тип пишется быстрее, чем ставится : и читается лучше...
проверьте, если хотите... я проверял... (конечно, у разных людей будет по разному)

почитайте о переменных в Перфоленте тут: http://promcod.com.ua/Article.asp?code=20190712173855028344
там большая часть ваших идей описана...
Тип Объект тоже есть...
Если надо пишите:
Перем А тип Объект = Неопределено
А=5
А="ало"
А="Б"с
и т.д.
44. Darklight 33 23.07.19 18:24 Сейчас в теме
(42)
слово тип пишется быстрее, чем ставится : и читается лучше...

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


Перем А тип Объект = Неопределено
А=5
А="ало"
А="Б"с

Это хорошо

Интересно, а вот так можно:
Класс Класс1
Поле Б = 1
КонецЦкласса
Перем А тип Класс1 = Неопределено
А = А?.Б //интересно какой будет тип у А)
А = Новый Класс1()
А = А?.Б //интересно какой будет тип у А)
46. Perfolenta 206 23.07.19 18:37 Сейчас в теме
(44) для полей и свойств на данный момент тип указывать обязательно... я пока не пришел к однозначному выводу стоит ли сделать так же как для переменных или нет...
при беглом осмотре кода на неявных объявлениях взгляд гораздо дольше тормозит, чем на явных...
оператор ?. у меня пока не реализован... он хорош, но в нем есть неочевидности, думаю пока над ним...
а в целом, тип у А будет Класс1, как вы и заявили объявляя переменную...
47. Darklight 33 23.07.19 18:44 Сейчас в теме
(46)
Класс Класс1
Поле Б тип Целое = 1
КонецЦкласса
Перем А = Новый Класс1()
А = А.Б //интересно какой будет тип у А - По идеи должна быть ошибка

//Только так её не должно быть
Перем А тип Объект = Новый Класс1() //тип должен быть Класс1
А = А.Б //Тип должен быть Целое
А = Новый Объект //По идее тоже должно прокатить - тип должен быть Объект, верно?
49. Perfolenta 206 23.07.19 18:51 Сейчас в теме
(47) все верно... (47) все верно... в первом случае будет ошибка, а во втором тип будет меняться класс1-целое-объект
50. Darklight 33 23.07.19 19:01 Сейчас в теме
(46)
оператор ?. у меня пока не реализован... он хорош, но в нем есть неочевидности, думаю пока над ним

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

Так же хорошо определять и так называемые Nullable-типы ("Целое?") допускающие неопределено, в данном случае хорошо бы запретить такое
Перем А тип Объект = Неопределено
Но разрешить такое
Перем А тип Объект? = Неопределено

Но Вы опять придерётесь к символу "?"
ну тогда хотя бы так - по длинному
Перем А тип (Объект и Неопределено) = Неопределено //или ещё иначе определять составной тип (но это уж очень длинно): Перем А составнойтип (Объект, Неопределено) = Неопределено //Где вообще могут быть несколько типов (слабо?): Перем А тип Составной {Целое, Класс1, Класс2, Неопределено} //использование инициализатора для типа "составнойтип"
52. Perfolenta 206 23.07.19 19:07 Сейчас в теме
(50) нет :) к символу ? в данном случае не придерусь... лаконичнее для Nullable типов придумать трудно... поэтому взял как у других...
Nullable это единственное слово пока, к которому я не могу придумать хороший русскоязычный термин... :)
в общем, у меня стандартно
Перем А тип Целое? = Неопределено
в дистрибутиве есть пример по операциям с Nullable
хотя, в последних версиях С# Nullable распространили и на ссылочные (объектные) типы, но у меня пока только к структурным (значимым) типам это применимо...
56. Darklight 33 24.07.19 00:37 Сейчас в теме
(52)Считаю правильным распространить Nullable сразу и на Классы - как это делается в стандарте C# 8.0 (и из-за проблем совместимости сто старым кодом сильно мешает внедрению - хотя большнство прогаммистов C# за правильность такого подхода) - потому что проблемманеопределеённых значений актуальна была всегда и, кстати, язык 1С не исключение - тут эта проблема ещё более остра. Когда проверка и ограничение идёт на уровне компилятора - это очень здорово. Суть в том, что надо вообще щапрещать такой код

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

как и такой

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

Но должно быть разрешено вот так

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

И не разрешать передавать в методы и возвращать обратно неопределено если это не разрешено)

функция Метод1(А тип Объект) тип Объект
возврат неопределено //не разрешено типом вовращаемого значения
КонецФункции

Метод1(неопределено) //Не разрещено типом аргумента А

а вот так можно

функция Метод1(А тип Объект?) тип Объект
возврат неопределено
КонецФункции

Перем Б тип Объект? = Метод1(неопределено)

Вот, не пойму Вас, с одной стороны Вы любит слова, как "тип", когда общепринято в этом случае ":" (являющийся оператором, а не просто ключевым словом кстати), с другой - не против символа "?" как директивы уточнения типа или оператора "?.". Хотя фонетически это приносить вообще нереально (вспоминая Ваш очень несостоятельный, с моей точки зрения, аргумент за применение не общепринятых слов вместо общепринятых символов).

Русский синоним Nullable действительно не просто точно подобрать, но надо ли. В 1С есть и "null" и "неопределено" (и, кстати, не против такой двоякости, но в ходу в основном только "неопределено"), поэтому понятие Nullable даже в английском варианте тут не очень уместно. Кстати, в Visual Basic вместо null используется Nothing -хотя это я лукавлю - т.к. в VS всё немного по особенному (отчасти ближе к 1С Неопределено) и Nothing не равно null и не равно DBNULL
Поэтому и в Перфоленте нужно пойти немного своим путём в определении русскоязычного термина нулабельности. Я бы как вариант использовал термин "Детерменированный тип" или от обратного "Не детерминированный тип" - т.е. в первом случае переменная типа всегда должна иметь значение заданного типа. Во втором случае - допускается наличие неопределенного значения ("неопределено" или ещё какие - если будут, а так же могут быть значения разных типов - но это уже "Составной тип").

Хотя лично я вообще против значений как "null" и "неопределено" - считаю, что это всё "от лукавого" - значения переменных и полей всегда должны быть определены. А для случая, необходимости наличия пустого значения - нужно отдельно определять его в типе переменной - как для классов так и для примитивных типов - и с ним же и сравнивать (или применять специальный оператор/функцию универсальной проверки на пустое значение)

Перем А тип Целое //Не инициализирована, но не допускает пустые значения = значению по умолчанию = Целое.ПоУмолчанию = 0)
Если А = 0 сообщить("Равно нулю")

Перем Б тип Целое? /Не инициализирована, но допускает пустые значения которые не равны значению по умолчанию; Целое.Пустое не равно 0 и вообще это не число)
Если Б = 0 сообщить("Не должно вывестись")
Если Б = Целое.Пустое сообщить("Пустое")
Б = 0
Если А = 0 сообщить("Равно нулю")
Б = Целое.Пустое
Если Б = 0 сообщить("Не должно вывестись")
Если не ЗначениеЗаполнено(Б) сообщить("Пустое") //Универсальный вариант проверки

Перем В тип Объект //Не инициализирована, не допускает пустые значения, должна быть ошибка компиляции (исключение - это определение полей классов - там проверка должна быть на выходе из конструктора)
В = Новый Класс1

Перем В тип Объект? //Не инициализирована, но допускает пустые значения, равна значению пустого объекта - которое обязано быть определено у такого класса - это просто предопределенный экземпляр данного типа
Если А = Объект.Пустое сообщить("Равен пустому объекту")

Но

Перем Г тип Класс1?
Если Г = Класс.Пустое сообщить("Равен пустому объекту типа Класс1")
Если Г = Объект.Пустое сообщить("Равенство не обязано быть - если Класс1 переопределит свойство "Пустое" базового класса "Объект" иным значением)
Если не ЗначениеЗаполнено(Г) сообщить("Пустое") //Поэтому так конечно же правильнее проверять было бы
Если Г пустое сообщить("Пустое") сообщить("Вариант универсальной проверки через оператор")
Если Г.Пустое() сообщить("Вариант универсальной проверки через встроенный метод (наследуемый от Объект)" //прикол в том, что в такой модели это всегда рабочий код - т.к. тут не бьвает неопределённых и null значений

Перем Д тип Целое
Если Д.Пустое() сообщить("Да, и так сработает") //Потому что будет вызван статический метод Пустое() у типа "Целое" а он для него определён как тоже самое что и свойство Целое.ПоУмолчанию = 0

Перем Д тип Целое? = 0
Если Д.Пустое() сообщить("Не выведет - 0 не пустое значение в для типа, допускающего пустые значения") //Потому что будет вызван статический метод Пустое() у типа "Целое?" а он для него определен особым значением и оно не равно Целое.ПоУмолчанию = 0

Перем Д тип Целое?
Если Д ЭтоПустое сообщить("Но так сработает")

Вот я бы так делал, и никаких "Неопределено" и "Null"

Да, ещё бы одно предопределённое свойство ввёл "Мертвое" - для проверки объеккта на то, что он более не актуален (т.е. после работы деструктора) - ведь пока на объект есть ссылки он должен быть в памяти - а такое свойство должно сигнализировать сслылкодержателей на то, чтобы эту ссылку отпустить но проблема деструкции и удаления объектов из памяти - это вообще отдельная и очень интересная тема!

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

А = Класс1.Пустое //Объект Класс1 будет дердатиь переменная Б

А = Б
Убить А; //Деструкция обекта Класс1, и присвоение переменно А = Класс1.Пустое

Если Б.Мертвое Б = Класс1.Пустое //После этого сборщик мусора сможет очистить память

А модно было бы подписаться на убийство

Перем А = Новый Класс1
Перем Б <= А //Особый оператор "<=" - Переменная Б будет автоматически очищена при деструкции объекта Класс1
Перем В тип Класс1;
В = А;
Подписать(ПоСсылке В, "Убийство", (ПоСсылке _ => _= ТипЗнч(_).Пустое)) //Без операторра "<=" ну тут я наворотил, конечно, и передачу переменной по ссылке, и подписку на системное событие объекта, и делегаты, и лямбды и обращение к статическому полю типа значения)

Тут много чего интересного можно сделать! Например для борьбы с утечками памяти или с кешированием или с ленивыми вычислениями!

Ну и, конечно же, обращение к не статическим свойствам и методам мёртвых объектов должны приводить к ошибке (естественно обращение к статическим методам через переадресацию от переменной - это нормально):
Перем А = Новый Класс1
Убить А;
Если не А.Пустое() сообщить("Не пустая") //Эквивалентно Если не Класс1.Пустое(А) сообщить("Не пустая") // Мёртвые объекты не равны пустым

Ну как-то так - таково моё виденье решения проблемы пустых значений!
57. Perfolenta 206 24.07.19 01:21 Сейчас в теме
(56) я против увеличения числа значков, но у меня есть одно правило "все, что может быть вызвано в Net должно вызываться из Перфоленты"... поэтому я не мог не сделать Nullable... а значки в определении типа надиктовывать будет гораздо легче, чем в выражениях, т.к. почти всегда известно, что в этом месте программы речь идет об определении типа.... поэтому вы сможете сказать "тип Целое двухмерный массив" и в программе напишется "тип Целое[,]"

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

Андрей Овсянкин, автор OneScripta, выше написал, что боится, что легче будет выучить СтШарп, чем Перфоленту... я этого тоже боюсь, поэтому с радикальными новинками не спешу... пусть люди к тому, что есть хотя бы привыкнут...
65. Evil Beaver 8244 24.07.19 09:31 Сейчас в теме
(57) Я не боюсь, я знаю. Зарплата просто ведущего/старшего разраба C# равна +20-40% зарплаты опытного 1С-ника с медалями во всю спину. Вот сидит такой 1С-ник, мечтающий покодить в ООП и думает: что бы мне выучить - VB.NET или Перфоленту? Дай-ка посмотрю вакансии по .NET... Ага, хорошо, вакансий хватает и платят неплохо. А по Перфоленте?
66. Perfolenta 206 24.07.19 09:49 Сейчас в теме
(65) если с такой точки зрения смотреть, то вы абсолютно правы... однако, сколько лет C#-пу и сколько Перфоленте... собственно, Перфоленты еще даже нет, есть только демонстратор... но, читая любую русскоязычную книгу по программированию, вы обнаружите абсолютно все те же понятия, что есть в Перфоленте... этого я и хочу добиться...
Сценарий может быть другим: сидит такой 1С-ник и думает, надо мне вот такую штуку замутить... 1С не подходит, что делать, СиШарп учить или на более-менее знакомой Перфоленте попробовать? Попробовал, получилось, тогда и СиШарп не нужен...

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

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

кстати, интересно, но некоторые люди уже попросили меня прикрутить к Перфоленте вещи, которые явно из энтерпрайза, хотя я на данный момент во весь голос кричу, что это только демонстратор технологии и надо ждать...
Andreyyy; AllexSoft; +2 Ответить
76. Evil Beaver 8244 24.07.19 11:52 Сейчас в теме
(66) Ну круто если так, это только радует
69. Perfolenta 206 24.07.19 10:03 Сейчас в теме
(65) кстати, наблюдая, как 1С-ники пишут на Перфоленте, я вижу, что поначалу они пишут строго по 1С-ному, неэффективно... но хватает нескольких толчков в правильном направлении и их код резко улучшается...
при этом ни каких не известных им операторов Перфоленты они просто не используют...
еще заметил маниакальное желание 1с-ников использовать многопоточность... думаю это из-за комплекса по поводу медлительности 1с..
71. Darklight 33 24.07.19 10:20 Сейчас в теме
(69)
еще заметил маниакальное желание 1с-ников использовать многопоточность..

За многопоточностью будущее - вообще считаю что все современные языки программирования должна активно к этому подталкивать, и конечно же упрощать процесс написания многопоточного программного кода.
Помните - что 64 ядерные серверные x86 процессоры появятся уже будущем году (не x86 уже были давно представлены)
Ещё десятилетие и для настольных компьютеров будут доступны 128 ядерные процессоры
А после 2040 года наличие не менее 256 ядер в настольных компьютерах будет вообще нормой (не говоря уже о серверных - где число ядер будет измеряться тысячами на сервер)
Тогда то и окончательно и бесповоротно наступит эра параллельных вычислений - весь код должен будет создаваться из расчёта максимальной асинхронности выполнения (по крайней мере, в задачах, где хоть как-то важна будет производительность, т.е. где процесс не будет тормозиться нерасторопностью интерактивной работы пользователя - хотя даже при ней - отзывчивость интерфейса должна будет быть критически быстрой - чего сейчас очень не хватает 1С Предприятию)
Fox-trot; +1 Ответить
77. Evil Beaver 8244 24.07.19 11:57 Сейчас в теме
(71) И появятся фреймворки, которые позволяют спрятать параллельность и программировать "как будто линейный" код. А постойте, они уже есть - например mpi и omp, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный.. Но можно добавить абстракцию которая позволяет спрятать эту сложность и программировать как-будто параллельный код, например promises и async/await, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный, но можно добавить абстракцию... wait, O Shi...!
Andreyyy; Артано; +2 Ответить
87. Darklight 33 24.07.19 15:11 Сейчас в теме
(77)Полностью с Вами согласен, Только лишь одними асинхронными ывхзовами не гарузить сотню другую ядер - здесь уже совсем дургая механика программирования понадобится. И да, параллельный код (идущий чуть глубже простых асинхронных вызовово сейчас программировать не просто - тут ещё много чего надо будет развить как внутри платформ, как в семантике языков, так и в навыках программистов. Это будет даже более шасштабно - чем разница между С++ и C# (или Java) в части управления памятью - управляемые языки этот процесс сильно упростили (хоть пока и не решили и половины проблем) - далее нужна очередная революция для того, чтобы упростить и параллельное выполнение. Лично я считаю что через 20 лет ради этого придут в массы совсем другие языки - абстрактные - декларативные - описательные - где программисты будет описывать цели и какие-то методы достижения целей, и какие-либо маркеры/хинты - а смарт ИИ компилятор будет это анализировать и генгерировать уже более простые и конкретные инструкции для выполнения на процессоре - распределяя их так, чтобы их можно было выполнить максимально эффективно и надёжно на всех доступных ядрах (а их будет так же интеллектульно выделять процессам ОС). То есть будет что-то типа программирования в стиле SQL языка - только более масштабно - и, подвижки на эту тему - есть уже сейчасc LINQ и PLINQ

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

Поэтому однопоточное программирование хорошо бы успеть привить уже в школе, до старших классов. А с 10-го класса уже активно изучать асинхронное программирование. Это нужно делать уже сейчас. За через десять лет число ядер в детекторных процессорах ожидаемо будет очень бурно расти. Это пока - в среднем их всего 4, но это в 2 раза больше (в среднем) - чем 8 лет назад, а уже через пару лет в среднем будет ещё в 2 раза больше - уже 8 ядер, и дальше так и будет удваиваться каждые 4-года (я про среднее число ядер в телескопных процессорах - ибо 4 года - это среднее время жизни таких компьютеров между полной сменой платформы, хотя в России конечно сейчас это может быть и 8 лет - в силу упавшей покупательской способности - но это не повлияет на мировую тенденцию).
vasvl123; +1 Ответить
113. Evil Beaver 8244 25.07.19 10:39 Сейчас в теме
(87) я пробовал omp в C++ и Parallel в C#. При осознавании нюансов типа "захвата" переменных и shared state - очень классно помогают загружать ядра работой. Там и partitioning и load balance из коробки идут. В общем, очень здоровские, мне понравились.
114. Darklight 33 25.07.19 12:25 Сейчас в теме
(113)замечу - я говорил о 100 -1000 ядер, а не о 4 и даже не о 32
115. Evil Beaver 8244 25.07.19 16:52 Сейчас в теме
(114) ну omp как раз для таких архитектур и сделан, он затачивался под суперкомпьютеры, существующие в единичных экземплярах из www.top500.org
116. Darklight 33 25.07.19 18:11 Сейчас в теме
(115)Почитал про OpenMP - это хорошо годится для серверных задач - но совсем не годится для распараллеливания условно линейного клиентского кода
117. Evil Beaver 8244 25.07.19 19:16 Сейчас в теме
(116) приведите задачу клиентского кода, требующую mass parallel computing
ildarovich; +1 Ответить
120. Darklight 33 26.07.19 10:24 Сейчас в теме
(117) Первым делом хочу заметить, что задачи параллельных вычислений, которые есть сейчас (кроме случаев массового сервисного обслуживания и моделирования и анализа каких-либо процессов) , на мой взгляд, пока ещё слабо выражены как нуждающиеся в распараллеливании. Попросту говоря – сейчас сознание (и восприятие мира) как пользователей, так и программистов, сильно повёрнуто в сторону линейного мышления – где «рулит» количество последовательных операций в секунду – т.е. гигагерцы процессоров. Но я думаю за несколько десятилетий эта ситуация в корне изменится.

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

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

1. Конструирование и модифицирование интерфейсов
2. Управление выводом интерфейсных элементов, в т.ч. имеющих высок выраженную динамику изменения отображения
3. Простые вычисления формул (обычно вызываемые при интерактивной работе), которые не оптимально гонять на сервер
4. Асинхронны серверные вызовы (в т.ч. облачных сервисов), и ожидания на них
5. Принципиально фоновые процессы – например проигрывание звуков, музыки, видео, или запись действий пользователя, или базовый анализ, например, введённых текстов или цифр и их валидация
6. Задачи взаимодействия с каким-либо клиентским оборудованием
7. Отдельно вынесу задачи поиска по коллекциям на клиентах – в первую очередь по кэшированным данным – хотя по хешированным ключам поиск идёт быстро – его распараллеливание может его ещё ускорить, особенно когда такой поиск будет требовать тысячи раз в секунду из-за возросшей нагрузки на кэширование данных (особенно это будет актуально с ростом числа доступной памяти на клиентах); жаль только сами операция хеширования плохо распараллеливаются – хотя… тут тоже можно найти свои компромиссы.
8. Условно сюда же можно отнести задачу анализа речи пользователя для смарт ассистентов – но это спорная задача – просто, на мой взгляд в клиент-серверных приложениях нужна очень высокая отзывчивость смарт ассистентов, поэтому желательно основную обработку голосового взаимодействия полностью выполнять на клиенте, с редкими асинхронными серверными вызовами. Ну а со смещением сетевых скоростей к сотням гигабит, с мизерной латентностью, наращивании сервисных мощностей серверов и смещению клиентского ПО в сторону размещения в облаках – конечно же все аудио процессы и анализы полностью уйдут на серверную сторону, но на это как раз ещё понадобится несколько десятилетий

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

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

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

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

Ну и, напоследок. Думаю через 30-50 лет новым трендом (помимо смарт помощников) будут системы, осуществляющие анализ действий пользователей и их дальнейшее прогнозирование, в т.ч. в клиентской среде – тогда можно будет выполнять вычислительные процессы в фоне на опережение, в т.ч. для клиентов будут актуальные не только возросшие потоки возможных ближайший асинхронных вызовы (к серверу или от/к оборудованию), выполняемые на опережение; но параллельные процессы выполняющие построение интерфейсов так же на опережение.

Предвосхищая возражение, что интерфейсы уже сейчас сроятся не на клиенте, а на сервере – отвечу – что, кроме облачных приложений, это не лучшая идея. Сервер может подготовить схему интерфейса – создавать и настраивать сами графические элементы всё равно придётся клиентскому приложению. Ну а если дальше интерфейс динамически меняется от интерактивной работы пользователя – то тоже, смысла больше есть всё-таки выполнять инструкции на клиенте, чем на сервере (ну если только схема интерфейса не меняется слишком кардинально). А не так как сейчас в управляемых формах 1С Предприятие 8 – хочешь на клиенте поменять цвет текста элемента на форме – это «к счастью» можно сделать в клиентском контексте, но сделать можно – а реально будет серверный вызов с передачей контекста формы на сервер и обратно! БРЕД! И так с каждым элементом, если на клиенте их нужно изменить несколько (ну а перейти в серверный контекст можно только алгоритму, находящемуся в модуле формы – тот ещё БРЕД!)
121. Perfolenta 206 26.07.19 10:44 Сейчас в теме
(120) не забывайте, что на архитектуру ПО оказывает влияние не только техническая целесообразность, а и бизнес модель продажи приложения... многие хотят продавать абонемент на услугу, а не лицензию на автономное приложение... там где программист выбрал бы десктопный вариант маркетолог может выбрать онлайн и наоборот...
124. Darklight 33 26.07.19 13:14 Сейчас в теме
(121)Ну а потребитель выберет то, что ему будет более удобно, или дешевле, ну или его сумеют поставить раком только перед одним вариантом - как это сделала 1С в сфере учета в России как минимуму

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

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

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

В начале 90-х, когда у всех были равные возможности для старта, стартовали многие и у всех был равный шанс сделать что-то великое. 1С сделала вещь, которую покупали и покупают. Ну да, поставила конкурентов раком, но говорить что это было какое-то "насильственное" действие над пользователями - ну это неправда совсем. Только ухаживаниями, конфетами и более качественными подарками, как это и принято в приличном обществе.
127. Perfolenta 206 27.07.19 11:51 Сейчас в теме
(126) да, я еще на DOS версии 1С работал... и уже тогда она выделялась на фоне конкурентов, хотя и не слишком выделялась... версия 6.0 пошла в народ хорошими темпами...а версия 7.5 просто всех покорила и конкуренты начали быстро сдуваться, в том числе иностранные конкуренты.. например, в те времена MS Access большую долю занимал, мне часто приходилось дорабатывать учетные базы на его основе... но 1С выдавила его почти полностью...
да и сегодня конкурентов у 1С не видно...
132. Darklight 33 29.07.19 10:27 Сейчас в теме
(126)Я ни в коей мере не хотел принижать компанию 1С и её продукты серии 1С Предприятие - программные архитекторы и маркетологи тут сработали на славу. Братья Нуралиевы тут просто боги ведения бизнеса в IT отрасли (хоть и не самые сильные боги в этой среде).

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

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

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

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

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

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

Хотя я восхищаюсь этими достижениями и грамотным руководством компании 1С
Но я очень печалюсь, что в России так и не появилось пока хоть немного конкурентной альтернативы такого же уровня развития продукта!
Fox-trot; +1 Ответить
135. Perfolenta 206 29.07.19 13:26 Сейчас в теме
(132) капитализм это вообще про монополии... сколько там процентов людей владеют 90% всей собственности Америки?
Гугл тоже поставил всех раком... только Китай и Россия хоть как-то сражаются, остальные все давно лежат... даже Европа не может дергаться, ни соц сетей своих, ни даже кино уже нет...
164. Steelvan 306 31.07.19 12:12 Сейчас в теме
(132)
ну и нищета страны


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

Отличайте от США, действительно нищей и побирающейся страны, живущий на безразмерный госдолг.
Вот там человек человек человеку волк и все стараются содрать друг с друга побольше, что даже все заводы из страны уехали кто в Китай, кто еще куда.
Perfolenta; +1 Ответить
86. Perfolenta 206 24.07.19 13:29 Сейчас в теме
(71) многопоточность порождает проблемы синхронизации, которые заводят неопытных программистов в дебри бесконечной отладки... причем, код может совершенно нормально работать в отладчике и падать в реальной работе... а еще хуже, когда код не падает, а просто врёт... в примерах идущих с Перфолентой есть пример многопоточного TCPСервера, в котором можно посмотреть, как из-за многопоточности портится вывод на экран консоли.... короче, сначала изучение теории и только потом многопоточность, и ни как не наоборот.. многопоточность это зло в неумелых руках...
88. Darklight 33 24.07.19 15:16 Сейчас в теме
(86)Поэтому я всё-таи за то, чтобы программиста как можно больше ограждать от реальных инструкций команд. И всё больше давая ему описательные методы - на основе которых уже умный и хитрый смарт ИИ компилятор будет генерировать корректный многопоточный код инструкций.
80. Evil Beaver 8244 24.07.19 12:15 Сейчас в теме
(69)
маниакальное желание 1с-ников использовать многопоточность

прежде чем браться писать что-то многопоточное, желательно сначала почитать что такое поток и какие сложности могут возникать. Для начала, хотя бы Рихтера "Windows via C++". А потом понять, для чего появились абстракции WorkQueue/WorkItem, и пул потоков. А потом придти к мысли про Task и про Parallel.For и выяснить, что даже с такими инструментами сильно облегчающими многопоточную разработку все равно приходится вспоминать что бывает atomic read и volatile, после чего воскликнуть: да блин, оказывается, нахрен мне многопоточность не впилась, мне достаточно Task и WorkQueue фоновых заданий!!
67. Darklight 33 24.07.19 10:01 Сейчас в теме
(57)
возможно сделаю отключаемую опцию, что бы "параноики" могли включать "защиту" от Неопределено, а "смелые" парни пусть не заморачиваются

Вот так и сделала Microsoft в C# - но это была вынужденная мера для совместимости (приведшая к тому что так сильно нужно программистам для повышения качества и надёжности кода - в большинстве случае выключено, и, вероятно, ещё очень долго не будет использоваться) - в Вашем же случае, я бы не тянул прошлое которого у Вас нет!

Кстати, вот ещё для Nullable типа пара русскоязычных терминов (кроме уже приведённого "Не детерминированного" (мне он всё-таки больше нравится - как-то более строго звучит, но очень длинно):

- "Неопределябельный тип" - т.к. у Вас вместо null используется "неопределено" - звучит не очень, зато максимально близко к используемому термину "неопределено", но всё-таки такой вариант звучит ещё и как-то двояко - так и кажется что данный тип какой-то странный, что его нельзя определить

- "Пустоватый тип" - звучит смешно, зато максимально близко, как к переводу "Nullable", так и к отражению сути данного типа - что он может иметь пустые значения - правда это не совсем корректно говорить, в общем смысле, т.к. было верно в C# для не ссылочных типов значений - для них конструируется специальный "Nullable generic" тип. А вот для Наллабельных классов это уже не так - их тип остаётся исходным, а проверки на null делает исключительно компилятор и исключительно в рамках компилируемого кода и его типов (или подключенных библиотек, скомпилированных с такой поддержкой) - так что это уже фича не типа, а переменной. Но об этом лучше особо не заморачиваться - чтобы не забивать голову лишним.

Но, по-любому, фонетически произносить "перем а тип целое вопросик" (чтобы получить "Перем А тип Целое?") - не так красиво как "перем а тип пустоватый целое" или даже "перем а тип не детерминированный целое" (чтобы получить "Перем А тип пустоватый<Целое>" или "Перем А тип недетерминированный Целое", или "Перем А тип Целое?" (как я уже сказал ранее - нет большой проблемы в такой конвертации иной фонетической лексики, как нет проблем ту же саму фразу сконвертировать в "Перем А : Целое?")

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

Это палка о двух концах - когда люди к чему-то привыкают - очень сложно потом переучиваться к чему-то более сложному и радикальному - и начинаются разговоры о том что язык слишком усложняется и умирает - не то что было лет так десять назад...
Да и если сразу не закладывать хороший дизайн, с хорошим заделом на будущее - то позже вносить расширения становится всё сложнее и сложнее - пример - 1С - язык почти не меняется уже как минимум с платформы 1С 8.2 (а реально и вообще с 8.0 - т.к. особенности программирования под управляемое приложение практически не связны с нововведениями в языке, аналогично и про особенности программирования под мобильную платформу).
Да и, основной фундамент языки закладывается в период до офрелиза, и первые годы после него (где-то до версии 2.0, 3.0 максимум (с очень большой натяжкой если версия вышла не позже пары лет от офрелиза)) - через 10 лет после анонсирования кардинально менять язык уже не получится, а всякие опции лишь будут пылиться за невостребованностью. Посмотрите на Python - до сих пор чаще программируют на 2-й версии Питона, а не на 3-тьей.

Ну и делая новый язык - он всё-таки должен быть чем-то кардинально лучше чем имеющиеся - ведь без этого - какой в нём смысл и да - действительно будет проще выучить C# или Java
Ну для языка должно быть обозначено практическое и коммерческое будущее применения - то как с помощью него можно зарабатывать деньги (в исключительных случая - выполнять какую-то социальную функцию - пример - Паскаль - изначально язык задумывался только для обучения программированию), причём речь не о заработке автора языка (хотя тут тоже нужно что-то придумывать).
И обязательно должна быть какая-то совместимость с другими проектами, написанными на других языках - да так, чтобы было желание писать дальше на новом языке, а не на уже имеющихся. Нужны вишенки на торте, пуская даже и рискованные.
Вот, например, я написал Вам про фичи о пустых классах и отказа от неопределено/null - это мировая тенденция - скоро эта тема будет очень популярна - так можно было бы запрыгнуть на гребень волны пока она ещё достигла высоты "5 этажного дома"?

Аналогично про фигурные скобки - только тут волна уже с 50-этажный дом, но Вам почему-то хочется остаться под ней!

Хотя, может какой-то оригинальной фишкой станет упоминаемый вами фонетический ввод - но если эта фишка не появится в первые годы офрелиза языка - это языку уже не поможет стать популярным! А с учетом задела на русскую речь делать фонетический ввод - дело вообще крайне сложное и тут намного проще сразу "споткнуться и поломать ноги", чем сделать что-то действительно удобоваримое: ну никак не звучит красиво фонетическая лексема "добавить перем а тип целое двухмерный массив", а звучит "добавить переменную а с типом двухмерного целого массива" - и это ещё просто фонетический случай. И если разрулить окончания и порядок следования встроенных термов ещё как-то можно - то вот с пользовательскми типами, переменными членами классов всё намного сложнее. На мой взгляд, такой фонетический разбор на английском то языке крайне сложен - а уже на русском - почти утопия (по крайней мере до прихода эры AI - а вот тут, как раз, просто не паханное пространство для фишек - нужно развивать интеллектуальные способности компилятора и IDE, а так же нарабатывать базу готовых решений как по оптимизации, так и просто шаблоны готовых алгоритмов - и Mictrosoft с линейкой своих продуктов и Visual Studio уже идут этим путём - через несколько лет там уже будут встроенные Смарт ассистенты)
72. Perfolenta 206 24.07.19 10:23 Сейчас в теме
(67) у вас талант описывать в маленьком комментарии целую вселенную... что бы обдумать все сказанное вами и обстоятельно ответить мне наверное целый день надо потратить....
отвечу пунктиром:
- ваши русские варианты слова Nullable мне не нравятся (как и десяток придуманных мной) так что вопрос по прежнему открыт...
- кроме сокращения Перем в Перфоленте можно полностью писать слово Переменная, поэтому вы сможете просто сказать "переменная количество товара тип целое с неопределенностью... дальше... пока количество товара меньше, чем 10, цикл..." и т.д. (с неопределенностью это лучший термин из мной придуманных)
- все ваши замечания полезны и кое что поменяли в моем плане задач.. спасибо..
78. Evil Beaver 8244 24.07.19 12:07 Сейчас в теме
(72) в 1С есть понятие Null. Предлагаю название "Обнуляемый тип"
Darklight; Fox-trot; +2 Ответить
90. Darklight 33 24.07.19 15:18 Сейчас в теме
(78)В перфоленте судя по всему "Null" нет - только "неопределенно", хотя термин "Обнуляемый тип" мне нравится. Но как я написал Выше - я всё-таки склоняюсь к тому, чтобы вообще не было такого состояния у переменных - как абсолютно пустое значение. Только пустые значения конкретного типа - аля пустые ссылки в 1С - тогда и число проблем обращения к неинициализированным ссылкам на объекты почти сведётся к null'ю (простите за каламбур). Правда я, навскидку, не назову пока ни одного императивного языка, которые был бы без null (да и в функциональных он тоже есть или его аналог, как и в логических - реализации могут быть несколько иными, но всегда есть единое пустое значение хотя бы для ограниченного вида типов данных). Даже язык Kotlin у которого объекты по умолчанию не могут иметь значения null - не по умолчанию могут такие переменные и поля объявлять.

Хотя сам автор языкового термина "NULL" Энтони Хоар признал введение "NULL" свое самой большой ошибкой
Вот тут статья есть о проблеме Null - вообще в интернете много подобных статей есть.

Я же предложил кардинально избавить от универсального пустого значения - чтобы у объекта всегда было значения - даже если переменная только объявлена но не проинициализирована.
Хотя я тоже предлагаю разделять объявлением переменной ссылочного типа на недопускающую даже пустого значения и допускающую пустое - но всё равно - конкретное, хоть и предопределённое для данного типа, значение!
130. Perfolenta 206 27.07.19 12:32 Сейчас в теме
(78) строго говоря Nullable это не тип, а характеристика типа, прилагательное...
тип обнуляемое Целое...
тип обнуляемое Булево...
может быть, может быть, вроде бы не так уж и плохо звучит...

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

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

спасибо за не плохой вариант... буду думать, вариантов уже много, но выбрать сложно..
167. Perfolenta 206 28.10.19 02:07 Сейчас в теме
(56) Долго думал над вашими словами сказанными несколько месяцев назад на счет Nullable типов...
Сейчас окончательно решил, что буду называть типы свободными и не свободными... свободный тип имеет право содержать значение Неопределено, а не свободный не имеет такого права и всегда обязан содержать значение...
по-моему, вполне хорошо и понятно звучит..
168. Darklight 33 29.10.19 13:49 Сейчас в теме
(167)Ну, "хозяин барин". Лично мне не нравится. Ибо из термина не гуру не понятно, свободный от чего этот тип? Может он свободен от одного потока и позволяет безопасно работать с ним асинхронно из разных потоков. Или он свободен от контроля времени жизни объекта, и для него не нужно освобождать занимаемые им ресурсы. Или он является свободным в выборе операционной системы и платформы - и будет одинаково себя вести на любой. Или данный тип может распространяться и использоваться свободно, без лицензионно-правовых ограничений....

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

Но важнее тут другое - это сразу сделать все типы по умолчанию не допускающими значения null без специального указания при объявлении переменной - вот это действительно серьёзное решение, которое нужно принять как можно ранее, чтобы избежать как можно больше проблем в будущем (своих и проблем разработчиков). А терминология - тут потом можно называть как угодно и менять названия - ну если только они не будут ключевыми словами - а Вы любите вводить много много ключевых слов в синтаксис....
169. Perfolenta 206 29.10.19 15:11 Сейчас в теме
(168) согласен, ваши возражения серьезные... принимается...
тогда пока остается "тип допускающий Неопределено" и "тип не допускающий Неопределено"...
над физической реализацией я пока думаю... в самой платформе Net это еще не реализовано, поэтому в C# это по своему сделано, на уровне компилятора... мне надо тоже как-то по своему.. но в голове еще полностью концепт не сложился...
170. Darklight 33 29.10.19 15:25 Сейчас в теме
(169)Что не реализовано в платформе .NET? Nullable-объекты - ну так возможно и не будет реализовано - по крайней мере - можно делать так - как сделано в C# 8.0 - хуже не будет

Да и Nullable-значения (стековые, которые становятся "кучевыми") в .NET - это тоже сложно назвать чисто платформенными - ведь тут просто подмена одного типа другим при компиляции, и на уровне IL кода никаких особых команд для Nullable-типов вообще нет. Помню, когда в платформе .NET только появились Nullable-типы значений - их далеко не все .NET языки поддерживали напрямую (как native-C#) - и в них приходилось работать через класс ValueType
171. Perfolenta 206 29.10.19 15:38 Сейчас в теме
(170) в Net есть класс Nullable, но он работает только со структурными типами... возможно они его доработают со временем для работы со ссылочными, раз уж они в C# это сделали... но пока это надо самому реализовывать...
кстати, увидел в документации Майкрософт только что, они тоже в переводе называют:
"ссылочные типы, допускающие значение NULL и ссылочные типы, не допускающие значение NULL"
172. Darklight 33 29.10.19 16:30 Сейчас в теме
(171)Класс Nullable<T> для ValueType и примитивных типов - это была необходимость - чтобы хранить с ними метку null и сохранять их в куче. Для объектных типов - такая упаковка не требуется - поэтому вряд-ли они так будут упаковываться. Это чисто компиляторная фишка - от того и ряд проблем в актуальной .NET - если значение объекта поступает вне контролируемого компиляторами Микрософт кода - то его Null значение никак не проверяется :-( и нельзя знать - допускает ли источник null или нет.
Ситуация напоминает ту, что была когда появились нуллабельные значения - нужна поддержка в других языках.
C# компилятор для объектных нуллабельных типов лишь создаёт особый атрибут в метаданных кода, но на него можно опираться при разработке компиляторов.

Фраза "ссылочные типы, допускающие значение NULL и ссылочные типы, не допускающие значение NULL" более менее хороша только для офф документации. Думаю, больше нигде её Вы не встретите - слишком длинно.
173. Perfolenta 206 29.10.19 17:03 Сейчас в теме
(172) да, ясно, что поддержку Nullable для ссылочных типов в платформе трудно реализовать... ведь способность принимать Null или не принимать, относится скорее к свойствам объектов и параметрам методов, чем к самим объектам... т.е. атрибуты подходят лучше всего... надо мне будет подсмотреть какие атрибуты C# лепит и себе такие же лепить... :)
фразы из двух-трех слов для меня длинными не являются... "тип допускающий Неопределено" это нормальный термин... хотя, может что-то лучше со временем нарисуется...
35. AllexSoft 23.07.19 15:23 Сейчас в теме
Очень крутой проект, особенно для тех кто начинал изначально на 1С и хотел бы куда нибудь продвинуться в языки с ООП. По поводу применения, а можно сделать шаблон для создания native компонент к 1С ? типа просто hello world? Это и в реальных проектах пригодилось бы, да и с точки зрения обучения 1Сника можно начать писать что то не на 1С, но далеко не отходить от 1С.
Ну а для тех кто перешел с Delphi например строгая типизация это плюс даже, я например за строгую типизацию, приучает к какому то порядку в коде и в голове изначально.
DJ_Codebase; Perfolenta; +2 Ответить
51. Labotamy 23.07.19 19:05 Сейчас в теме
Огонь! Сил Вам терпения и комьюнити побольше!
Perfolenta; +1 Ответить
53. пользователь 23.07.19 20:49
Сообщение было скрыто модератором.
...
54. пользователь 23.07.19 22:03
Сообщение было скрыто модератором.
...
55. пользователь 23.07.19 22:47
Сообщение было скрыто модератором.
...
58. nytlenc 24.07.19 04:11 Сейчас в теме
Круть! Автору респект и плюс к публикации!
60. Petr54-ru 92 24.07.19 08:09 Сейчас в теме
Когда я учился в универе, - конец 80-х начало 90-х, все нормальные студенты, фанатеющие по программированию, писали свой С компилятор, свою ось типа DOS, свой текстовый редактор. Было весело и таких унылых вопросов, как лицензионная чистота не стояла.

Интересно, как с этим обстоит дело на Перфоленте, в силу того, что они использовали .NET Framework?
63. Perfolenta 206 24.07.19 09:25 Сейчас в теме
(60) на использование Net Framework нет ни каких ограничений, как и на использование любых API Windows... если Windows у вас лицензионная, то пользуйтесь как хотите...
64. Evil Beaver 8244 24.07.19 09:28 Сейчас в теме
(60) а что не так с .NET Fw и лицензионной чистотой?
Оставьте свое сообщение