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

Публикация № 1095329

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

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

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

Привет, Мир!

Прошу любить и жаловать, на сцену выходит новый язык программирования Перфолента. Перфолента это язык общего назначения с русскоязычным синтаксисом и стандартной библиотекой, который может быть полезен при написании широкого круга приложений. Это могут быть простые и сложные консольные утилиты, оконные приложения с пользовательским интерфейсом, библиотеки классов, службы 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. Теперь планируется переезд на Net Core 3, где с кроссплатформенностью уже должно быть все в порядке. На данный момент, разрабатывать программы на Перфоленте можно только под Windows, но откомпилированные программы вполне могут запускаться под Линукс. По крайней мере, из проверенных мной и другими людьми примеров, более половины работали на Линуксе нормально. Однако, вся работа над кроссплатформенностью еще впереди.

 

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

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

 

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

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

 

141

Скачать файлы

Наименование Файл Версия Размер
Дистрибутив языка программирования Перфолента.
.exe 22,33Mb
22.07.19
107
.exe 0.3.0 22,33Mb 107 Скачать бесплатно

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
4. blackhole321 1103 23.07.19 07:22 Сейчас в теме
Круто!
А что с отладчиком?
14. Perfolenta 183 23.07.19 09:59 Сейчас в теме
(4) отладчика в представленном релизе нет, т.к. он пока глючный, но к новогоднему релизу будет как огурчик :)
15. blackhole321 1103 23.07.19 10:03 Сейчас в теме
5. SerVer1C 198 23.07.19 08:28 Сейчас в теме
Судя по описанию, огромная работа проделана. Автору однозначно жирный плюс! Имхо, данный проект должен способствовать постепенному переливанию из мира 1С в мир ДотНет.
alanto23; protexprotex; Jeka44; Soloist; vvp117; Астиг; andreosh; +7 Ответить
16. Perfolenta 183 23.07.19 10:17 Сейчас в теме
(5) да уж, объем работы это моё больное место... семья серьезно пострадала, т.к. эта работа фактически украла меня у них... надеюсь, что не зря, но об этом пока все еще рано думать... только мечтать...
а на перетекание программистов из 1С в мир Net, Перфолента если когда и повлияет, то очень не скоро... 1С это огромная махина, с ней только сопоставимая по ресурсам корпорация могла бы сразиться...
а у меня, даже просто донести до множества людей, что Перфолента существует и мотивировать их попробовать, уже проблема...
alanto23; rumik007; +2 Ответить
73. AlexandrUng 24.07.19 11:15 Сейчас в теме
(16)
Дело, конечно, наверное хорошее, но не думаю, что оно стОит того, чтобы жертвовать семьей ради него даже на неделю...
74. Perfolenta 183 24.07.19 11:29 Сейчас в теме
(73) капитализм сильно способствует тому, что бы люди становились работоголиками... сначала заказов мало и ты тратишь свободное личное время, что бы их найти, семью-то кормить надо... потом заказов много и ты тратишь личное свободное время, что бы их разгрести и сделать в срок... потом привыкаешь и уже не можешь просто все бросить, уйти домой и забыть про работу...
alanto23; D_e_X_T_e_R; di.vinogradov; vvp117; +4 Ответить
6. w.r. 479 23.07.19 08:33 Сейчас в теме
Это очень хорошо, что есть такие проекты!

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

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

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

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

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

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

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

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

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

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

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

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

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

П.С. пока я писал ответ, ругательный комментарий (29) куда-то исчез, не знаю, то-ли модераторы удалили, то-ли сам писавший... но я решил оставить этот ответ из-за цитаты Дана Эпплмана, которая отвечает на часто встречающуюся придирку к языкам вроде 1С, OneScript, VB, а теперь вот и Перфоленты...
alanto23; user811769; WinterIT; +3 Ответить
34. Darklight 20 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С.
39. Perfolenta 183 23.07.19 16:46 Сейчас в теме
(37) про ; написал в ответе на (34)... я не убрал ; а сделал не обязательной, если и так понятно, что строка переносится... а можно ставить ; как привыкли...
41. Darklight 20 23.07.19 18:06 Сейчас в теме
(37)
вот не согласен, ибо это превратит из разработки "как в 1С только круче", в "очередной си-образный язык, по-русски, но зачем?"

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

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

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

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

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

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

где-то так... еще раз спасибо! мне сейчас моральная поддержка очень важна.. да и идеи я стараюсь анализировать все, что поступают.. (из Котлина и Питона я тоже кое что потянул :))
alanto23; AllexSoft; +2 Ответить
40. Darklight 20 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 183 23.07.19 18:10 Сейчас в теме
(40) слово тип пишется быстрее, чем ставится : и читается лучше...
проверьте, если хотите... я проверял... (конечно, у разных людей будет по разному)

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

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


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

Это хорошо

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

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

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

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

Но Вы опять придерётесь к символу "?"
ну тогда хотя бы так - по длинному
Перем А тип (Объект и Неопределено) = Неопределено //или ещё иначе определять составной тип (но это уж очень длинно): Перем А составнойтип (Объект, Неопределено) = Неопределено //Где вообще могут быть несколько типов (слабо?): Перем А тип Составной {Целое, Класс1, Класс2, Неопределено} //использование инициализатора для типа "составнойтип"
52. Perfolenta 183 23.07.19 19:07 Сейчас в теме
(50) нет :) к символу ? в данном случае не придерусь... лаконичнее для Nullable типов придумать трудно... поэтому взял как у других...
Nullable это единственное слово пока, к которому я не могу придумать хороший русскоязычный термин... :)
в общем, у меня стандартно
Перем А тип Целое? = Неопределено
в дистрибутиве есть пример по операциям с Nullable
хотя, в последних версиях С# Nullable распространили и на ссылочные (объектные) типы, но у меня пока только к структурным (значимым) типам это применимо...
56. Darklight 20 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 183 24.07.19 01:21 Сейчас в теме
(56) я против увеличения числа значков, но у меня есть одно правило "все, что может быть вызвано в Net должно вызываться из Перфоленты"... поэтому я не мог не сделать Nullable... а значки в определении типа надиктовывать будет гораздо легче, чем в выражениях, т.к. почти всегда известно, что в этом месте программы речь идет об определении типа.... поэтому вы сможете сказать "тип Целое двухмерный массив" и в программе напишется "тип Целое[,]"

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

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

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

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

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

За многопоточностью будущее - вообще считаю что все современные языки программирования должна активно к этому подталкивать, и конечно же упрощать процесс написания многопоточного программного кода.
Помните - что 64 ядерные серверные x86 процессоры появятся уже будущем году (не x86 уже были давно представлены)
Ещё десятилетие и для настольных компьютеров будут доступны 128 ядерные процессоры
А после 2040 года наличие не менее 256 ядер в настольных компьютерах будет вообще нормой (не говоря уже о серверных - где число ядер будет измеряться тысячами на сервер)
Тогда то и окончательно и бесповоротно наступит эра параллельных вычислений - весь код должен будет создаваться из расчёта максимальной асинхронности выполнения (по крайней мере, в задачах, где хоть как-то важна будет производительность, т.е. где процесс не будет тормозиться нерасторопностью интерактивной работы пользователя - хотя даже при ней - отзывчивость интерфейса должна будет быть критически быстрой - чего сейчас очень не хватает 1С Предприятию)
Fox-trot; +1 Ответить
77. Evil Beaver 6364 24.07.19 11:57 Сейчас в теме
(71) И появятся фреймворки, которые позволяют спрятать параллельность и программировать "как будто линейный" код. А постойте, они уже есть - например mpi и omp, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный.. Но можно добавить абстракцию которая позволяет спрятать эту сложность и программировать как-будто параллельный код, например promises и async/await, но у них иногда протекают абстракции и приходится вспоминать, что код-таки параллельный, но можно добавить абстракцию... wait, O Shi...!
Артано; +1 Ответить
87. Darklight 20 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 6364 25.07.19 10:39 Сейчас в теме
(87) я пробовал omp в C++ и Parallel в C#. При осознавании нюансов типа "захвата" переменных и shared state - очень классно помогают загружать ядра работой. Там и partitioning и load balance из коробки идут. В общем, очень здоровские, мне понравились.
114. Darklight 20 25.07.19 12:25 Сейчас в теме
(113)замечу - я говорил о 100 -1000 ядер, а не о 4 и даже не о 32
115. Evil Beaver 6364 25.07.19 16:52 Сейчас в теме
(114) ну omp как раз для таких архитектур и сделан, он затачивался под суперкомпьютеры, существующие в единичных экземплярах из www.top500.org
116. Darklight 20 25.07.19 18:11 Сейчас в теме
(115)Почитал про OpenMP - это хорошо годится для серверных задач - но совсем не годится для распараллеливания условно линейного клиентского кода
117. Evil Beaver 6364 25.07.19 19:16 Сейчас в теме
(116) приведите задачу клиентского кода, требующую mass parallel computing
ildarovich; +1 Ответить
120. Darklight 20 26.07.19 10:24 Сейчас в теме
(117) Первым делом хочу заметить, что задачи параллельных вычислений, которые есть сейчас (кроме случаев массового сервисного обслуживания и моделирования и анализа каких-либо процессов) , на мой взгляд, пока ещё слабо выражены как нуждающиеся в распараллеливании. Попросту говоря – сейчас сознание (и восприятие мира) как пользователей, так и программистов, сильно повёрнуто в сторону линейного мышления – где «рулит» количество последовательных операций в секунду – т.е. гигагерцы процессоров. Но я думаю за несколько десятилетий эта ситуация в корне изменится.

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

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

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

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

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

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

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

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

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

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

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

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

В начале 90-х, когда у всех были равные возможности для старта, стартовали многие и у всех был равный шанс сделать что-то великое. 1С сделала вещь, которую покупали и покупают. Ну да, поставила конкурентов раком, но говорить что это было какое-то "насильственное" действие над пользователями - ну это неправда совсем. Только ухаживаниями, конфетами и более качественными подарками, как это и принято в приличном обществе.
127. Perfolenta 183 27.07.19 11:51 Сейчас в теме
(126) да, я еще на DOS версии 1С работал... и уже тогда она выделялась на фоне конкурентов, хотя и не слишком выделялась... версия 6.0 пошла в народ хорошими темпами...а версия 7.5 просто всех покорила и конкуренты начали быстро сдуваться, в том числе иностранные конкуренты.. например, в те времена MS Access большую долю занимал, мне часто приходилось дорабатывать учетные базы на его основе... но 1С выдавила его почти полностью...
да и сегодня конкурентов у 1С не видно...
132. Darklight 20 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 183 29.07.19 13:26 Сейчас в теме
(132) капитализм это вообще про монополии... сколько там процентов людей владеют 90% всей собственности Америки?
Гугл тоже поставил всех раком... только Китай и Россия хоть как-то сражаются, остальные все давно лежат... даже Европа не может дергаться, ни соц сетей своих, ни даже кино уже нет...
164. Steelvan 31.07.19 12:12 Сейчас в теме
(132)
ну и нищета страны


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

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

прежде чем браться писать что-то многопоточное, желательно сначала почитать что такое поток и какие сложности могут возникать. Для начала, хотя бы Рихтера "Windows via C++". А потом понять, для чего появились абстракции WorkQueue/WorkItem, и пул потоков. А потом придти к мысли про Task и про Parallel.For и выяснить, что даже с такими инструментами сильно облегчающими многопоточную разработку все равно приходится вспоминать что бывает atomic read и volatile, после чего воскликнуть: да блин, оказывается, нахрен мне многопоточность не впилась, мне достаточно Task и WorkQueue фоновых заданий!!
67. Darklight 20 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 183 24.07.19 10:23 Сейчас в теме
(67) у вас талант описывать в маленьком комментарии целую вселенную... что бы обдумать все сказанное вами и обстоятельно ответить мне наверное целый день надо потратить....
отвечу пунктиром:
- ваши русские варианты слова Nullable мне не нравятся (как и десяток придуманных мной) так что вопрос по прежнему открыт...
- кроме сокращения Перем в Перфоленте можно полностью писать слово Переменная, поэтому вы сможете просто сказать "переменная количество товара тип целое с неопределенностью... дальше... пока количество товара меньше, чем 10, цикл..." и т.д. (с неопределенностью это лучший термин из мной придуманных)
- все ваши замечания полезны и кое что поменяли в моем плане задач.. спасибо..
78. Evil Beaver 6364 24.07.19 12:07 Сейчас в теме
(72) в 1С есть понятие Null. Предлагаю название "Обнуляемый тип"
Darklight; Fox-trot; +2 Ответить
90. Darklight 20 24.07.19 15:18 Сейчас в теме
(78)В перфоленте судя по всему "Null" нет - только "неопределенно", хотя термин "Обнуляемый тип" мне нравится. Но как я написал Выше - я всё-таки склоняюсь к тому, чтобы вообще не было такого состояния у переменных - как абсолютно пустое значение. Только пустые значения конкретного типа - аля пустые ссылки в 1С - тогда и число проблем обращения к неинициализированным ссылкам на объекты почти сведётся к null'ю (простите за каламбур). Правда я, навскидку, не назову пока ни одного императивного языка, которые был бы без null (да и в функциональных он тоже есть или его аналог, как и в логических - реализации могут быть несколько иными, но всегда есть единое пустое значение хотя бы для ограниченного вида типов данных). Даже язык Kotlin у которого объекты по умолчанию не могут иметь значения null - не по умолчанию могут такие переменные и поля объявлять.

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

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

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

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

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

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

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

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

Фраза "ссылочные типы, допускающие значение NULL и ссылочные типы, не допускающие значение NULL" более менее хороша только для офф документации. Думаю, больше нигде её Вы не встретите - слишком длинно.
173. Perfolenta 183 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 например строгая типизация это плюс даже, я например за строгую типизацию, приучает к какому то порядку в коде и в голове изначально.
Perfolenta; +1 Ответить
51. Labotamy 23.07.19 19:05 Сейчас в теме
Огонь! Сил Вам терпения и комьюнити побольше!
Perfolenta; +1 Ответить
58. nytlenc 24.07.19 04:11 Сейчас в теме
Круть! Автору респект и плюс к публикации!
60. Petr54-ru 73 24.07.19 08:09 Сейчас в теме
Когда я учился в универе, - конец 80-х начало 90-х, все нормальные студенты, фанатеющие по программированию, писали свой С компилятор, свою ось типа DOS, свой текстовый редактор. Было весело и таких унылых вопросов, как лицензионная чистота не стояла.

Интересно, как с этим обстоит дело на Перфоленте, в силу того, что они использовали .NET Framework?
63. Perfolenta 183 24.07.19 09:25 Сейчас в теме
(60) на использование Net Framework нет ни каких ограничений, как и на использование любых API Windows... если Windows у вас лицензионная, то пользуйтесь как хотите...
64. Evil Beaver 6364 24.07.19 09:28 Сейчас в теме
(60) а что не так с .NET Fw и лицензионной чистотой?
68. Petr54-ru 73 24.07.19 10:02 Сейчас в теме
(64) На самом деле вопрос не такой постой, как на первый взгляд кажется. Сама платформа она free, а не GNU. Если бы была на подобие GNU лицензии, как у Python - Python Software Foundation License, тогда бы вопросов не было.

Дальше надо посмотреть на лицензию .Net Framework SDK и прочих программных средств, которые были использованы разработчиками. Вопрос склизский и нужен эксперт по лицензированию продуктов от Microsoft. Я не знаю ответа на этот вопрос, поэтому и спросил.
70. Darklight 20 24.07.19 10:11 Сейчас в теме
(68)Ну автор вроде бы на .NET Core 3.0 переводить собрался - там платформа OpenSource и "лицензия MIT" - а это открытая лицензия, без копирайта, совместимая с GPL (а это уже пратически GNU)
81. Evil Beaver 6364 24.07.19 12:24 Сейчас в теме
(68) NET Core - это полностью "халявная" лицензия, там все максимально обращено в сторону сообщества.
61. andreosh 100 24.07.19 08:19 Сейчас в теме
Дополню, что редактор перфоленты позволяет писать на OneScript и Русском Фоксе (РФокс) https://www.youtube.com/watch?v=FAieIk_VePs&list=PLo4sldcUomOrKAPb_0A5Kv-nILQG3I7Dd&index=24
Dll от Перфоленты можно подключать в РФокс.
Il; Perfolenta; +2 Ответить
62. v77 147 24.07.19 09:08 Сейчас в теме
Было бы хорошо, если бы в 1с был такой язык. Кто пишет на OneScript, тому наверное пригодится.
91. Darklight 20 24.07.19 16:02 Сейчас в теме
(62)Я автору предложил сделать компиляцию в opCode'ы стековой машины 1С (тут Андрей Овсянкин представил и язык такого "ассемлера" этим летом) - тогда можно было бы писать хотя бы отдельные модули на таком языке - и включать и в конфигурацию в скомпилированном виде - но за пределами этих модулей в 1С Предприятие 8, конечно же, все новшества будут не доступны - например, классов не будет - хоть работать с такими модулями можно будет, но будет неудобно.
Не всё вообще можно будет так скомпилировать в стековую машину - в силу её ограниченности!
Ну и останется проблема библиотек - на разных платформах - свои библиотеки - если библиотеку нельзя так же скомпилировать - то она не будет доступна - и это большая проблема, т.к. Перфолента операется на библиотеки .NET Framework - их нет в 1С (базис конечно кое-как перенести можно - но он будет очень ограничен).
Аналогичная проблема и наоборот - когда автор говорит о возможности писать в привычном для 1С программиста стиле - например внешние компоненты - нельзя будет применять объекты и функции из библиотек 1С в таком алгоритме (хотя опять таки, частично их перенести можно - что, например сделано было для OneScript), скорее всего когда-нибудь и для Перфоленты создадут ограниченную инфраструктуру библиотек окружения 1С Предприятие 8 - тогда можно будет писать универсально как для 1С Предприятия так и внешние компоненты! Но на это видимо уйдёт ещё лет 10 , не меньше.
75. Gureev 24.07.19 11:49 Сейчас в теме
Разработка шикарная, но сильно нишевая и от того почти бесполезная.

Все языки уже придуманы. Новые обычно призваны убить кого-то старого.
Кого убивает перфолента? ОдинСкрипт? Батл будет так себе... возьня в песочнице.
79. Perfolenta 183 24.07.19 12:08 Сейчас в теме
(75)
Все языки уже придуманы
- я это уже когда-то слышал... лет 30 назад :)
тогда как раз С++ набирал обороты и считался самым-самым, супер-пупер...
Кого был призван убить язык ГО, свеженький еще... ни кого не убил...
Думаю Котлин не убьет Джаву...
на самом деле, убивать никого не надо... просто еще один инструмент... подходит для решения задачи - используйте, не подходит не используйте...
да, со временем соотношение использования разных языков меняется, но большинство продолжает жить по совершенно разным причинам...
Односкрипт интерпретатор, Перфолента компилятор, зачем им сражаться? Да области применения могут пересекаться, но не совпадают... где-то лучше один язык где-то другой...
У Перфоленты другая проблема, её пока нет... то, что опубликовано вчера это демонстратор технологии... использовать можно только в личных целях... довести до промышленного образца ее еще только предстоит... смогу ли я это сделать? постараюсь...
EasyWay; AllexSoft; +2 Ответить
84. Gureev 24.07.19 13:01 Сейчас в теме
(79)
Язык Go <...> Он может рассматриваться как попытка создать замену языкам Си и C++
(с) Вики
Джаву убивает Скала.

Язык пол беды. Нужен какой-то продукт, в котором будет применяться вышеназванный язык.
Нужна какая-нибудь киллер-фича...
94. Darklight 20 24.07.19 16:17 Сейчас в теме
(84)
Джаву убивает Скала.

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

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

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

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

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

А вот это всегда нужно в новых языках - что-то особенное должно цеплять, что-то чего нет у других и что реально может принести гигантскую пользу.
Например у Java такой фичей (одной из самых значимых) была система автономного управления памятью и сборщик мусора
А у Kotlin наверное - это корутины, и по умолчанию отсутствие Null значений у ссылочных типов
100. Perfolenta 183 24.07.19 16:41 Сейчас в теме
(84) бедного Бейсика кто только не убивал... а он жив, бедолага, и не плохо себя чувствует...
убить Джаву при ее распространенности это слишком сильная заявка.. только покусать можно.. заболеет, но не умрет :)
А вот на счет применения языка вы абсолютно правы... если не найдется достойного применения, то язык будет жить где-то под плинтусом... думаю над этим, но пока слишком занят самим языком...
102. Darklight 20 24.07.19 16:48 Сейчас в теме
(100)Бейсика давно нет - Visual Basic - это другой язык, живёт, в основном только прошлыми наработками (скажет как живы ещё Fox Pro или Fortran, или Delphi) - но абсолютно новые проекты на нём начинать - это бред. Как и изучать - если нет нужды поддерживать старые проекты. Хотя это лиш моей мнение. VB действительно пока ещё чрезмерно аномально популярен! Из новых проектов на нём разве что макросы для MS Office писать можно - но макросы давно уже не популярны... Остаются ещё единичные проекты на MS Access - где руководству просто влом перейти на нормальную систему учета - Navision или 1С Предприятие
Оставьте свое сообщение

См. также

Распаковка хранилища значений средствами MS SQL Server 15

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) MS SQL Абонемент ($m) Практика программирования

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

1 стартмани

23.09.2019    3013    SerVer1C    11       

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR 8

Инструменты и обработки Программист Архив с данными MS SQL Абонемент ($m) Практика программирования Разработка

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    3783    SerVer1C    9       

Упражнения на Перфоленте. Парсим технологический журнал 1С 20

Статья Системный администратор Программист Архив с данными Windows Абонемент ($m) Сервисные утилиты Инструментарий разработчика Практика программирования Разработка

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

1 стартмани

31.07.2019    3708    Perfolenta    62       

В 1000 раз быстрее 12

Статья Программист Архив с данными ИТ-компания Windows Абонемент ($m) Практика программирования Разработка

Реализация алгоритма трассировки лучей на новом языке программирования "Перфолента"

1 стартмани

24.07.2019    2677    vasvl123    6       

Вам нравятся запросы в 1С? 14

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    10597    1    m-rv    79       

Модель объекта 7

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) Инструментарий разработчика

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

1 стартмани

30.06.2019    3553    1    vadim1980    0       

Сценарий PowerShell для конвертации файла правил обмена данными КД 2 в Excel 1

Инструменты и обработки Программист Архив с данными Windows Абонемент ($m) Инструментарий разработчика Загрузка и выгрузка в Excel

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

1 стартмани

24.05.2019    1890    c1nil    5       

Безопасная работа с транзакциями во встроенном языке 187

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Разработка

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    15739    7    tormozit    35       

Пакетная сортировка метаданных основной конфигурации и расширений 3

Инструменты и обработки Программист Архив с данными Абонемент ($m) Инструментарий разработчика

Быстрая пакетная сортировка метаданных по алфавиту независимо от конфигурации поставщика. Сравнение производительности алгоритмов на Java и 1C:Enterprise.

1 стартмани

13.03.2019    2883    fr13    12       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 547

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    28734    266    bonv    110       

Редактор объектов информационной базы 8.3 40

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Windows Абонемент ($m) Инструментарий разработчика Универсальные обработки

Универсальная внешняя обработка (СДРОбъектУпр) для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.33 от 19.11.2019

2 стартмани

23.01.2019    10600    145    ROL32    27       

Настраиваемое мобильное приложение для сканирования штрихкодов 10

Инструменты и обработки Программист Приложение (apk) Android Абонемент ($m) Практика программирования Сканер штрих-кода Мобильная разработка

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

1 стартмани

14.01.2019    4050    2    inord777    5       

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019) 176

Инструменты и обработки Программист Архив с данными v8 v8::Mobile БУ УУ Android Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Абонемент ($m) Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    23186    223    informa1555    172       

Разработка внешних компонент на ассемблере goAsm 129

Статья Программист Архив с данными Windows Абонемент ($m) Практика программирования

Создание внешней компоненты по технологии Com "с нуля", используя ассемблер goAsm.

1 стартмани

26.11.2018    7747    6    chessman    40       

Навигатор по конфигурации базы 1С 8.3 105

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Windows Абонемент ($m) Инструментарий разработчика Универсальные обработки

Универсальная внешняя обработка (СДРНавигаторУпр) для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис "Управление итогами". Небольшой набор сервисных функций для повседневной работы. Для программистов и пользователей. Платформа 8.3, управляемые формы. Версия 1.1.0.45 от 08.11.2019

3 стартмани

28.10.2018    17122    198    ROL32    47       

Работа с публикациями "Инфостарт" 14

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    9700    10    RocKeR_13    16       

1C Форматер кода 5

Инструменты и обработки Программист Приложение (exe) Россия Абонемент ($m) Инструментарий разработчика

Автоматическое форматирование кода 1С

1 стартмани

24.08.2018    4682    2    admin_at_gkgeostroy    9       

Создаем объекты для модуля Bootstarp на Русском Фоксе 3

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    3952    andreosh    2       

РусскийФокс и BootStrap 3

Инструменты и обработки Программист Архив с данными Россия Абонемент ($m) Практика программирования

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    4222    2    andreosh    18       

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции 65

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    16178    23    informa1555    26       

РусскийФокс. Изменение DBF-файла и назначение командных клавиш 1

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Файловые протоколы обмена, FTP

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    4122    andreosh    2       

РусскийФокс. Создание DBF-файла, выгрузка в XML. 3

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    3774    2    andreosh    0       

РусскийФокс и ClickerMann заносят данные в 1С 5

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Сервисные утилиты Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

1 стартмани

21.07.2018    6687    1    andreosh    20       

Работа с данными выбора 40

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

17.07.2018    22446    13    kalyaka    15       

РусскийФокс и OpenOffice, а также исследование объектов 5

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . Взаимодействие с OpenOffice. GitHub https://github.com/UfaScript/RusFox

1 стартмани

12.07.2018    4107    1    andreosh    2       

РусскийФокс. Настройка NotePad++, 1C-подобные функции и операторы и создание объектов 11

Статья Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Создание объектов и настройка NotePad++. GitHub https://github.com/UfaScript/RusFox

1 стартмани

06.07.2018    7728    1    andreosh    12       

РусскийФокс — 1С-подобный язык программирования 8

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Знакомство.

1 стартмани

03.07.2018    6662    1    andreosh    50       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") 105

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    20197    86    m-rv    57       

Подсветка синтаксиса 1С для программы NotePad ++ 9

Инструменты и обработки Программист Архив с данными Абонемент ($m) Инструментарий разработчика

После установки подсветки, в программе "NotePad ++" будет подсвечиваться код 1С. Очень удобно работать с подсвеченным кодом... В архиве с файлом инструкция по установке....

1 стартмани

15.05.2018    7331    15    IceEvgen    4       

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному 240

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    28140    28    dsdred    34       

Как выполнить отчет на СКД через COM и получить данные отчета? 86

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    18329    10    wowik    3       

Работа со схемой запроса 176

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    29052    75    kalyaka    34       

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR 4

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    3953    1    bedvit    4       

Регистры правил [Расширение] 14

Инструменты и обработки Системный администратор Программист Расширение (cfe) v8 v8::Права УТ11 Абонемент ($m) Инструментарий разработчика Информационная безопасность

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

10 стартмани

15.03.2018    11219    28    33lab    0       

Генератор уникального идентификатора GUID для вставки в код модуля 0

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Инструментарий разработчика

Утилита предназначена для вставки в код модуля, при нажатии горячей кнопки "ALT+CTRL+G", строки сгенерированного GUIDа.

1 стартмани

14.02.2018    4198    1    sdjoker    3       

Заполняем по шаблону (по умолчанию) 68

Инструменты и обработки Программист Архив с данными v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

08.02.2018    18175    20    mvxyz    17       

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 124

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    25655    62    rpgshnik    46       

Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример 274

Статья Программист Внешняя обработка (ert,epf) v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

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

1 стартмани

19.01.2018    40103    59    rpgshnik    26       

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

Отчеты и формы Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Печатные формы документов Практика программирования Универсальные функции

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    23398    21    agent00mouse    0       

Веб-разработка на 1С (1Script) 142

Инструменты и обработки Программист Архив с данными Абонемент ($m) Практика программирования

Дорогие коллеги, под новый год хочется сделать небольшой сюрприз. Я уже два года обещаю сделать движок веб-разработки для 1С-ников, и вот, наконец, есть что показать. Этим новогодним постом я открываю сериал "Веб-разработка для 1С-ников". Все, кто знаком с проектом OneScript – добро пожаловать! Остальные, тоже не стесняйтесь!

1 стартмани

28.12.2017    25049    22    Evil Beaver    81       

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП 26

Инструменты и обработки Программист Расширение (cfe) v8 БП3.0 Абонемент ($m) Практика программирования Универсальные печатные формы

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    18838    52    kwazi    6       

Программное формирование форматированной строки в стиле html+inline CSS 53

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Работа с интерфейсом Инструментарий разработчика

Если вам приходилось работать с форматированными строками программно, то вы знаете, какая это боль. Данное решение облегчает программное формирование таких строк.

1 стартмани

18.11.2017    20314    25    bonv    6       

Программа для изменения осей движения мыши - IMouse 4

Инструменты и обработки no Архив с данными Россия Windows Абонемент ($m) Практика программирования

Программа предназначена для изменения движения курсора мыши.

1 стартмани

10.08.2017    9163    1    GubinDenis    12       

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

Статья Программист Архив с данными Абонемент ($m) Практика программирования

В первую очередь, статья адресована разработчикам 1С, но надеюсь, что интересно будет не только им.

1 стартмани

18.07.2017    28919    786    Tavalik    58       

Расширения конфигураций 1С: учимся перехватывать методы 112

Инструменты и обработки Программист Расширение (cfe) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

30.05.2017    86090    14    signum2009    45       

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов 176

Статья Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы Универсальные функции Производительность и оптимизация (HighLoad)

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    39770    168    DarkAn    86       

Набор подсистем "Умные таблицы" 64

Инструменты и обработки Системный администратор Программист Архив с данными v8 Беларусь Россия Казахстан Абонемент ($m) Инструментарий разработчика

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    24499    99    Silenser    33       

Консоль запросов с графом (Анализатор сложных запросов) 341

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::УФ v8::Запросы 1cv8.cf Windows Абонемент ($m) Консоль запросов

Консоль запросов для анализа запросов с большим количеством временных таблиц и вложенных запросов. Отображает структуру взаимосвязей временных таблиц в виде графа. Позволяет быстро передвигаться по тексту запроса и получать результат выполнения подзапросов. Единственная консоль запросов, которая позволяет выводить результат выполнения вложенных запросов и любой части объединения запроса. Удобное получение данных запроса из отладчика включая временные таблицы. Текст запроса в структурированном виде (можно свернуть, развернуть текст подзапроса). И еще много другого, чего вы не найдете в других консолях запросов. Поддержка УФ и ОФ. Версия 0.9.1 от 18.10.2019 (поддержка WebKit).

10 стартмани

03.05.2017    87333    380    manuel    226       

СКД. Использование встроенного макета, разделителя страниц 2

Инструменты и обработки Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Windows Абонемент ($m) Практика программирования

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

1 стартмани

31.03.2017    11083    14    Vin_Tik    0