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

31.07.19

База данных - Технологический журнал

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

Файлы

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

Наименование Скачано Купить файл
Исходный текст программы парсинга ТЖ на языке Перфолента
.pfl 6,06Kb ver:1.0.0
0 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Подтолкнула меня к экспериментам статья Go. Разбор лога технологического журнала. Достойная альтернатива perl'у

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

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

Итак, поехали… Для начала, мне очень понравилась картинка в указанной статье, демонстрирующая многопоточную обработку файлов ТЖ (здесь и далее ТЖ равно «технологический журнал») и я решил, что и на Перфоленте попробую сделать похожую структуру программы. Затем, сделал вывод, что мне не хочется изобретать и использовать массу параметров командной строки. Проще сделать копию программы для другого отбора и обработки строк, ведь исходный код всегда под рукой. Постепенно накопятся все необходимые мне варианты.

Начало программы стандартное, нажимаем меню Шаблоны\Программа и получаем начальный шаблон, где необходимо ввести имя программы:

 

//***************************
#ИспользоватьСтандартнуюБиблиотеку
Программа ПарсерТЖ
    //---------------------------
    Процедура Старт

    КонецПроцедуры
КонецПрограммы    

 

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

 

   //выбираем все лог файлы из текущей папки
   //загрузим все ядра процессора
   Рез=ПараллельныеДействия.ДляКаждого<Файл>(
                   ФС.ВыбратьФайлы(ЭтаПрограмма.Каталог,"*.log"),
                   ПолучитьДелегат(,ОбработатьФайл,"ДействиеПроц<Файл>"))

 

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

Синтаксис оператора ПолучитьДелегат такой:

ПолучитьДелегат( Объект , ИмяМетода, "ТипДелегата")

В нашем случае параметр Объект не обязателен, т.к. метод расположен в этом же модуле Программа. Тип делегата выбираем из имеющихся в стандартной библиотеке, главное, что бы совпадало число и тип параметров. Параметр ТипДелегата в данном случае тоже можно опустить, компилятор поймет и так ПолучитьДелегат(,ОбработатьФайл), но я решил написать в примере полный синтаксис, есть случаи, когда этот параметр обязателен.

 

Напишем эту процедуру чуть ниже процедуры Старт:

 

    //---------------------------
    Процедура ОбработатьФайл(Ф тип Файл
    
        Ив = Новый ИнтервалВремени
        
        Чт = Новый ЧтениеТекста(Ф)

        Пт = Новый ПостроительТекста

        Кво=0
        Цикл 
            Стр=Чт.ПрочитатьСтроку
            ПрерватьЕсли Стр Это Неопределено
            
            //началом строки события считаем шаблон ^\d\d:\d\d\.\d+
            //однако проверка только разделителей вполне надёжна и достаточна
            Если Сред(Стр,3,1)=":" И Сред(Стр,6,1)="." 
               Если Пт.Количество <> 0
                   Кво++
                   ОтборСтрок(Пт.ВСтроку)
               КонецЕсли    
               Пт.Очистить
            КонецЕсли
            Пт.Добавить(Стр)
        КонецЦикла
        Если Пт.Количество <> 0
            Кво++
            ОтборСтрок(Пт.ВСтроку)
        КонецЕсли    
        
        Чт.Закрыть
        
        ВыводСтроки "Обработали файл: "+Ф+"  Количество строк = "+Кво+"  Время, сек: "+Ив.ВсегоСекунд
        
    КонецПроцедуры    

 

Готово… Теперь наши файлы обрабатываются и для каждой строки вызывают процедуру ОтборСтрок(ТекущаяСтрока). Объект ПостроительТекста используем для ускорения конкатенации строк. Объект ИнтервалВремени используем для измерения времени обработки файла. Строки приходится склеивать потому, что в файле ТЖ могут быть многострочные фрагменты в определении одного события. Формально, в ТЖ события заканчиваются символами ВКПС, а многострочные строки разделяются символом ПС, но, к сожалению, для объекта ЧтениеТекста это одно и то же.

Теперь нам надо написать процедуру ОтборСтрок, в которой мы применим правила первого отбора. Почему я решил делать отбор в 2 этапа? Потому, что если файл лога у нас будет только один, или их будет меньше, чем ядер процессора, то процессор мы полностью не загрузим. Сложная обработка строки будет тормозить работу. А если быстро отобрать строки только по имени события, например «SDBL», то дальнейший отбор мы сможем вести многопоточно, вне зависимости от числа файлов.

Процедура получилась простая:

 

    //---------------------------
    //В этой процедуре отберем только интересующий нас вид строк
    Процедура ОтборСтрок(Стр тип Строка
        Если Найти(Стр,ФильтрСобытия)=0
            Возврат
        КонецЕсли
        Если ИспользоватьФильтрДанных И Найти(Стр,ФильтрДанных)=0
            Возврат
        КонецЕсли
        ОчередьСтрок.Добавить(Стр)
    КонецПроцедуры   

 

Как видно, мы используем в виде накопителя отобранных строк некий объект ОчередьСтрок, а так же еще несколько имен: ФильтрСобытия, ФильтрДанных, ИспользоватьФильтрДанных. Это всё поля, которые мы определили в модуле Программа:

 

Программа ПрасерТЖ

    Поле ФильтрСобытия тип Строка = ",SDBL,"
    Поле ФильтрДанных тип Строка = "Context=" 
    Поле ИспользоватьФильтрДанных тип Булево = НЕ ФильтрДанных.Пустая

    Поле ОчередьСтрок тип Очередь<Строка> = Новый Очередь<Строка

 

В Перфоленте у объектов есть Поля, которые похожи на переменные модуля 1С, но все же это не переменные, переменные в Перфоленте «живут» только в методах.

Объект ОчередьСтрок используется одновременно несколькими потоками, добавляющими в него отобранные строки. Если бы это была обычная коллекция, то могли бы возникнуть проблемы. Многопоточность опасна, если разные потоки одновременно обращаются к одним и тем же данным. Однако, в Перфоленте многие коллекции обобщенного типа, в том числе и Очередь<>, являются потокобезопасными и поэтому ни какая дополнительная синхронизация нам не потребуется.

 

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

 

       
       
//обработаем все найденные строки
       Рез=ПараллельныеДействия.ДляКаждого<Строка>(
                   
ОчередьСтрок,
                   
ПолучитьДелегат(,ОбработатьСтроку,"ДействиеПроц<Строка>"))

 

Ничего нового по сравнению с обработкой файлов в этом фрагменте кода нет, разве что тип Файл сменился типом Строка.

Напишем процедуру окончательной обработки строки лога:

 

    //---------------------------
    //Получим из строки интересующие нас данные
    Процедура ОбработатьСтроку(Стр тип Строка
        
//получим длительность события
        Длительность = Число(Стр.Сред("-",","))
        
        
//получим контекст
        //Контекст = Стр.Сред("Context='","'")
        
        
//а можно воспользоваться и регулярным выражением
        Контекст = ""
        
Рег = Новый РегулярноеВыражение("(?<=Context=').*?(?=')")
        
Если Рег.Совпадает(Стр)
            
Контекст=Рег.НайтиСовпадения(Стр)[0].Значение
        КонецЕсли
        
        
        
//нам все же понадобится блокировка, т.к. несколько потоков могут одновременно попытаться увеличить значение по одному и тому же контексту

        Блокировка ОчередьСтрок
            //сложим время одинаковых контекстов

            Было = Результат.Получить(Контекст)
           
Результат.Вставить(Контекст, Было+Длительность)

        КонецБлокировки

      
    
КонецПроцедуры  

 

Как мне кажется, этот код будет понятен всем программистам 1С. Отбор фрагментов строки можно осуществлять двумя способами, обычными функциями работы со строками и регулярными выражениями. Кому что больше нравится.

Результат в этот раз мы собираем в коллекцию типа Соответствие<Строка,Число>. Выглядит немного необычно для программистов 1С, но не для программистов C#. В данном случае, мы просто указываем, что ключ соответствия будет иметь тип Строка, а значение будет иметь тип Число. Другие типы в этой коллекции сохранить нельзя. Можно ли использовать обычное Соответствие? Можно, но скорость его работы будет меньше и понадобятся блокировки, т.к. обычное Соответствие не является потокобезопасным.

 

    Поле Результат тип Соответствие<Строка,Число> = Новый Соответствие<Строка,Число

 

Осталось обработать результат. А давайте сохраним его в файл Эксель и откроем.

 

      
       
//обработаем результат, например, создадим табличку
       Док=Новый ТабличныйДокумент
       НомСтр=1; 
       
Для КлючЗнач Из Результат
           //берем только длительные события
           ПродолжитьЕсли КлючЗнач.Значение<400000 
           
Док.УстановитьЗначениеЯчейки(НомСтр  , 1,КлючЗнач.Значение
           
Док.УстановитьЗначениеЯчейки(НомСтр++, 2,КлючЗнач.Ключ
       
КонецЦикла

       //сохраним и откроем в Экселе
       Док.Записать(ЭтаПрограмма.Каталог+"ТабличныйДокумент.xlsx") 
       
ЗапуститьПриложение(ЭтаПрограмма.Каталог+"ТабличныйДокумент.xlsx")  

 

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

 

А что со скоростью?

Вполне сопоставимо со скоростью программы на Go, у меня даже быстрее получилось, но не факт, что на любом компьютере будет так же. Тестовый файл размером 5,7 ГБ, около 10 млн. строк, пережевался за 5 минут.

 

А что с потреблением памяти и допустимым размером файлов лога?

Во время обработки файла размером 5,7 ГБ максимальное потребление памяти программой составило 1,2 ГБ. Файлы больше указанного размера я не проверял, но скорее всего проблем не будет.

 

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Администрирование СУБД Технологический журнал Мониторинг Системный администратор Программист Бесплатно (free)

Рассказываем, почему высоконагруженным бэкендам на 1С нужен регулярный мониторинг и что происходит, когда его нет: производительность и стабильность деградируют, а обращения пользователей копятся. Показываем, как построили легкую систему наблюдаемости для бэкендов корпоративных порталов. Она включает сбор метрик из технологического журнала, Apdex, журнала регистрации и динамики размеров таблиц с последующим анализом в связке ClickHouse и служебной информационной базы на 1С. Объясняем, какие отчеты и метрики быстрее всего помогают находить критичные проблемы производительности, и демонстрируем интерфейс расследования. Разбираем несколько кейсов оптимизации, найденных по итогам мониторинга, включая доработки функционала БСП «управление доступом» и «присоединенные файлы».

15.12.2025    2132    tystik    1    

7

Технологический журнал Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Убираем лишние переносы строк в событии технологического журнала с помощью SIMD.

1 стартмани

24.11.2025    666    0    sdf1979    2    

2

Мониторинг Журнал регистрации Технологический журнал Системный администратор Программист Бесплатно (free)

Мониторинг в ландшафте 1С помогает не только вовремя выявлять проблемы и повышать SLA, но и укреплять информационную безопасность. Разбираем источники данных, ограничения штатных инструментов и современные практики мониторинга на базе Prometheus, ClickHouse и Grafana. А также рассказываем о коробочном решении «Оркестратор 1С-систем» и планах его развития.

29.10.2025    1638    Sibars    0    

5

Технологический журнал Программист Россия Бесплатно (free)

Logcfg editor — это удобное веб-приложение, предназначенное для создания конфигурационного файла logcfg.xml для системы логирования в 1С:Предприятие. Приложение позволяет настраивать параметры логирования через интуитивно понятный интерфейс, избавляя от необходимости вручную редактировать XML-файлы.

25.08.2025    2587    Metrika42    3    

13

Технологический журнал Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Утилита для конвертирования Технологического журнала из текстового формата в JSON.

1 стартмани

28.07.2025    2907    1    SerVer1C    2    

8

Технологический журнал Системный администратор Программист Бесплатно (free)

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

24.07.2025    7620    aidar_safin    2    

25

HighLoad оптимизация Рефакторинг и качество кода Технологический журнал Программист 1С:Предприятие 8 Россия Бесплатно (free)

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

19.03.2025    6801    Metrika42    9    

9

Технологический журнал Механизмы платформы 1С Запросы Программист 1С:Предприятие 8 Бесплатно (free)

Существуют различные методики и инструменты просмотра запроса 1С в PostgreSQL. В этой статье мы разберём подробнее метод анализа запроса 1С на стороне PostgreSQL с помощью технологического журнала платформы 1С и команд в терминале Ubuntu.

04.03.2025    4028    user593895_gurov-boris-spb    6    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evil Beaver 8385 31.07.19 17:56 Сейчас в теме
У вас Если без Тогда? т.е. переносить операции на другую строку уже нельзя?

Если А = 1 и 
    БольшоеСложноеДействие() // это все еще выражение условия?
    В = 3; // а это тело условия?
КонецЕсли;


И что такое "ПродолжитьЕсли"? Такое есть в VB.NET? Я в C# не встречал
2. Perfolenta 207 31.07.19 18:03 Сейчас в теме
(1) можете смело писать Тогда, оно просто не обязательное... можете переносить так как написали в своем комментарии, хотя я больше люблю, что бы И было не в конце строки, а в начале следующей...
да, ПродолжитьЕсли это оригинальный оператор Перфоленты...
еще есть:
ПрерватьЕсли Условие
ВозвратЕсли Условие
можно и с пробелом:
Прервать Если Условие
Возврат Если Условие
3. Evil Beaver 8385 31.07.19 18:06 Сейчас в теме
Кажется перфоленте не хватает описания формальной грамматики языка где-нибудь в открытом доступе. А то читаешь и удивляешься чего только не надо будет узнать...

P.S. я пожалуй пока останусь при своем мнении, что это совсем другой язык, даже не "похожий на 1С", и учить его не полезнее, чем сразу учить C#. Я могу ошибаться.
VladC#; GreenDragon; kuntashov; +3 Ответить
4. Perfolenta 207 31.07.19 18:07 Сейчас в теме
(3) это верно, я файл документации только на четверть написал... надеюсь, как и обещал к новому году выкатить...
5. Perfolenta 207 31.07.19 18:08 Сейчас в теме
(3) для начала можно просто по 1с-ному писать... постепенно узнавая что-то новое... я не думаю, что у вас лично возникла проблема с пониманием хотя бы одной строки кода...
а для чистых 1С-ников да, есть новинки, но не так много, что бы нельзя было понять их смысл... а как иначе привнести в язык современные новинки?
Как прикажете записать кортежи не меняя синтаксис 1с? пришлось менять... старался осторожно подходить, что бы не слишком страшно выглядело...
6. Evil Beaver 8385 31.07.19 18:18 Сейчас в теме
(5) Нуу... я в уме переводил на шарп или на VB. Но это как раз говорит о том, что когнитивная нагрузка языка довольно большая. А чисто по 1С-ному разве можно? У вас же строгая типизация, переменные объявлять надо.
7. Perfolenta 207 31.07.19 18:21 Сейчас в теме
(6) объявлять типы обязательно только для полей, свойств и в сигнатурах методов... переменные можно все неявно инициализировать, как и делают в 1с чаще всего... я сначала начинал делать то, что получилось у вас, но потом понял, что ни как не впишусь в рамки 1С и начал "реформу" языка, старая сохранить наследственность от 1С, но не более того...
8. Evil Beaver 8385 31.07.19 18:36 Сейчас в теме
(7) ну потому что MSIL и CLR рассчитывают на строгую типизацию, поэтому я на ранних этапах забросил идею компиляции в MSIL или использования LLVM
9. Perfolenta 207 31.07.19 18:40 Сейчас в теме
(8) вам повезло :) я не ожидал того объема работ, который пришлось и еще предстоит сделать... там еще и подводных камней оказалось предостаточно... документация Microsoft та еще штучка... особенно обидно, когда что-то делаешь, а потом натыкаешься где-то на сноску мелким шрифтом и понимаешь, что делал все не правильно...
25. Darklight 37 02.08.19 11:14 Сейчас в теме
(8)Зря забросили идею компиляции в LLVM
Есть языки с динамической типизацией, имеющие компилятор в LLVM (ну если я не ошибаюсь - я тут пока профан, но тема мне очень интересна), например JavaScript, Python, Ruby

Вот тутесть небольшая статья "Динамическая компиляция программ на языке JavaScript в статически типизированное внутреннее представление LLVM"

Хотя я лично за языки со статической типизацией (и верю что будущее развития языка платформы 1С Предприятие именно в статике) - но и динамические тоже нужны - особенно для скриптов и макросов, но если они ещё и компилятор в LLVM получат - так вообще очень круто выходит - за LLVM будущее!
16. Perfolenta 207 02.08.19 00:51 Сейчас в теме
(6)
А чисто по 1С-ному разве можно? У вас же строгая типизация, переменные объявлять надо


Сегодня, ради проверки ответа на ваш вопрос, я взял библиотеку для OneScript под названием TRun1C, думаю знаете такую... в ней 1921 строка кода... прилично...
У меня ушло примерно 20 минут, что бы превратить ее в DLL библиотеку!
Ушло бы и меньше, но я же не автор библиотеки, так что на беглое изучение кода потратился...
Я только обернул ее в класс, прописал типы в сигнатуры методов и еще несколько мелочей, вроде замены слова Экспорт на атрибут &ВидноВсем... и все, библиотека нормально откомпилировалась и заработала...
т.е. в самих методах мне почти ничего не пришлось менять... все по односкриптному осталось...
Вывод... для начала вполне можно писать по одинэсному, изучив минимальные требования к оформлению программы... и прочитав немного о переменных и типах, например тут http://promcod.com.ua/subcat.asp?cat=perfolenta-programmig-language&subcat=perfolenta-syntax
22. Darklight 37 02.08.19 11:00 Сейчас в теме
(5)Простите, а где у Вас здесь продемонстрирован кортеж?
23. Perfolenta 207 02.08.19 11:05 Сейчас в теме
(22) это к слову пришлось... пример с кортежами есть в дистрибутиве...
выглядят кортежи примерно так:

к3 = $(400,"Hello_5")


или вот функция возвращающая кортеж:

Функция ПолучитьКортежValueTuple() тип $<Целое,Строка> //работает
        
        Возврат $(200,"Hello_2") //работает
        
        //и более длинные варианты того же самого:
        
        Возврат $<Целое,Строка>(200,"Hello_2") //работает
        Возврат Новый $<Целое,Строка>(200,"Hello_2") //работает
        Возврат Новый ValueTuple<Целое,Строка>(200,"Hello_2") //работает
        Возврат ValueTuple.Create<Целое,Строка>(200,"Hello_2") //работает
        
КонецФункции
Показать
27. Darklight 37 02.08.19 11:18 Сейчас в теме
(23)Здорово! А именнованные поля кортежей поддерживаются? А деконструкция? А Свитчи?
29. Perfolenta 207 02.08.19 11:29 Сейчас в теме
(27) ну вы прям всё сразу от меня хотите :)
именованые поля пока не поддерживаются, я их отложил в долгий ящик... т.к. не считаю их слишком уж полезными...
деконструкция уже есть, но пока только в переменные и в массив... в цикле Для уже есть, но в опубликованном дистибутиве этого еще нет...
со свитчами сложнее, сделать их совсем просто, но я ни как не могу придумать хороший русскоязычный вариант... мучаюсь с этим...
с одной стороны хочется такой же мощный Select как на VB, но с другой стороны простинький как в С# мне тоже нравится... короче как остановлюсь на чем-то так и появится...
33. Darklight 37 02.08.19 11:36 Сейчас в теме
(29)Именованные поля очень полезны - я при работе с кортежами предпочитаю как раз с ними работать!
40. Perfolenta 207 02.08.19 12:51 Сейчас в теме
(33) может быть... хотя я обычно именование полей в кортежах не использую... у меня в программах кортежи это временные транзитные структуры.. а если надо долгоживущую, то я обычную структуру делаю..
я обязательно именованные поля сделаю, но значительно позже... сейчас еще большой список задач, которые я считаю более важными...
59. Perfolenta 207 08.08.19 15:28 Сейчас в теме
(27) сделал "свитчи" :)
выглядит так

Выбор [Для] <expr> :
( Когда <expr> [ПРИ <expr>] [, <expr> [ПРИ <expr>]] [ Тогда ] : <stmt>+ : )+
[ Иначе : <stmt>+ : ]
КонецВыбора

работает...

      Для Инд=1 По 8
       
           Выбор Для Инд
           Когда 1,3,5 Тогда
               ВыводСтроки "Не четные"
           Когда 2,4,6 //ключевое слово Тогда не обязательное
               ВыводСтроки "Четные"
           Когда 35
             Тогда
               ВыводСтроки "Таких не бывает"
           Иначе
               ВыводСтроки "Больше 6"
           КонецВыбора        
       
       КонецЦикла
    
       Для Инд=1 По 8
       
           //каждый блок в одну строку
           Выбор Инд //ключевое слово Для не обязательное
           Когда 1,3,5 Тогда ВыводСтроки "Не четные"
           Когда 2,4,6;      ВыводСтроки "Четные" 
           Когда 35;         ВыводСтроки "Таких не бывает"
           Иначе             ВыводСтроки "Больше 6"
           КонецВыбора        
       
       КонецЦикла
       
       Для Каждого Об тип Объект Из {5, 10, 15, "Привет", "А"с, "Ф"с, Истина, '20191231'}
       //а можно просто 
       //Для Об Из {5, 10, 15, "Привет", "А"с, "Ф"с, Истина, '20191231'}
       
           //с дополнительным условием ПРИ      
           Выбор ТипЗнч(Об)
           Когда Тип("Целое") При Об>10,
                 Тип("Целое") При Об=10
                ВыводСтроки "Целое >= 10"
           Когда Тип("Целое") При Об<10 Тогда
                ВыводСтроки "Целое < 10"
           Когда Тип("Символ") При Об<"Я"с и Об>"О"с Тогда
                ВыводСтроки "Символ"
           Когда Тип("Дата")
                ВыводСтроки "Дата"
                Прервать //это прерывание цикла, а не выход из блока, как в C#!!!!
           Иначе       
                ВыводСтроки "Другое значение: "+Об+" ТипЗнч="+ТипЗнчСтр(Об)
           КонецВыбора        
   
       КонецЦикла

Показать
61. Darklight 37 19.08.19 10:07 Сейчас в теме
(59)Это хорошо!
А свитчи-выражения?


Когда 2,4,6; ВыводСтроки "Четные"

Такая запись (с точкой запятой посреди оператра) выглядит очень непривычно и как-то не логично (даже не знаю - есть ли где-то ещё, в других языках такие конструкции - где точка с запятой может разделять секции одного оператора, хотя - конечно же такое есть - это цикл for например в c ++ (и некоторых других, схожих с ним языках) "for (int i = 1 ; i < 100; i++)" - но тут внутри скобок список из трёх отдельных выражений, а не одно семантическое выражение, разделённое на части через ";" - но мне никогда такая запись не нравилась - в Kotlin или Python это реализовано более изящно, но это лирика - речь не про циклы, а про применение ";" внутри одного оператора - ну очень коряво это, на мой взгляд.

А по поводу свитчей - всё же посмотрите лучше в сторону Kotlin и его оператора "when"
62. Perfolenta 207 19.08.19 19:03 Сейчас в теме
(61)
Такая запись (с точкой запятой посреди оператра) выглядит очень непривычно и как-то не логично

ну почему же не привычно... на языке 1с в одну строку именно через точку с запятой и пишут... точка с запятой может использоваться везде где нужен разделитель... кстати, в данной конструкции ее можно было даже и не ставить, я просто тестировал разные варианты написания.... компилятор Перфоленты в большинстве случаев прекрасно переваривает отсутствие ;
А свитчи-выражения?

не понял что вы имеете ввиду? в моем предыдущем комментарии, в самом начале, там где формальное описание, <expr> означает выражение...
А по поводу свитчей - всё же посмотрите лучше в сторону Kotlin и его оператора "when"

смотрел я... ничего особенного не увидел... по-моему, в C# и в Vb даже мощнее, чем в Котлине... если не считать функциональной формы оператора when, когда возвращается результат... может быть такую тоже сделаю... а, понял... вы, наверное, это и имели ввиду, спрашивая про свитчи-выражения?

кстати... в Перфоленте функциональную форму котлиновского оператора when частично заменяет оператор ?(условие1, результат1, условие2, результат2 ..., условиеN, результатN, результатИначе)
63. Darklight 37 20.08.19 10:43 Сейчас в теме
(62)
ну почему же не привычно... на языке 1с в одну строку именно через точку с запятой и пишут...

Речь идёт не о разделение разных операторов друг от друга, а о составных операторах, состоящих их нескольких вложенных секций выражений. Покажите мне в 1С такой оператор, где секции составного оператора разделены ";" ? Хотя я сам уже знаю ответ ("если а = 1 тогда б=1; иначе б=2 конецесли" - в 1С это допустимая синтаксическая конструкция в составном операторе условия - но тут "иначе" - это одновременно и операторная скобка (двусторонняя) новый оператор. Лично мне допустимость ";" перед "иначе" не нравится. Мне больше по душе Сишный вариант (или Паскалевский...) - когда перед оператором точка с запятой не ставится.

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

Говоря о Kotlin я намекал о лаконичности, простоте и унифицированности синтаксической конструкции "when", которая семантически тяготеет к функциональным языкам и оператору "match" - минимум ключевых слов, максимум наглядности и унифицированности (в данном случае с лямда выраженияями): оператор "when" всей своей семантической конструкцией представляет просто список сопоставления с образцом в формате лямбда-выражения, которые и так ассоциированы с некоторым функциональным сопоставлением, а вернее отображением левой части в правую (обычно)


fun describe(obj: Any): String
{
when (obj) {
1 -> return "Единица"
in 1..10 -> return "издеваетесь?"
in 10..100 -> return "маловато будет"
in 100..1000 -> return "кота прокормлю"
in 1000..1000000 -> return "на хлеб с икрой!"
is Cat -> return "Кот!"
"Hello Kitty" -> return "Приветствуем котика"
is Long -> return "Long"
!is String -> return "Не строка"
'а', 'е', 'ё', 'и', 'о', 'у', 'я', 'э', 'ы', 'ю' ->return "$obj гласная"
else -> return "Unknown (Неведома зверушка)"
}
}
Показать


Или в виде выражения (но это уже другое предложение):

fun describe(obj: Any): String =
when (obj) {
1 -> "Единица"
in 1..10 -> "издеваетесь?"
in 10..100 -> "маловато будет"
in 100..1000 -> "кота прокормлю"
in 1000..1000000 -> "на хлеб с икрой!"
is Cat -> "Кот!"
"Hello Kitty" -> "Приветствуем котика"
is Long -> "Long"
!is String -> "Не строка"
'а', 'е', 'ё', 'и', 'о', 'у', 'я', 'э', 'ы', 'ю' ->"$obj гласная"
else -> "Unknown (Неведома зверушка)"
}

[/IS-QUOTE]

Единственное, что Kotlin так и не поддерживает пока несколько условий в одной строке сопоствления, напримерh C# может так (switch case when):


object a = get_a();
switch (a)
{
case int a when a == 0: Console.WriteLine("а - это целое число = 0");
break;
case double a when a > 0: Console.WriteLine("а - это дробное число > 0");
break;
case string a when a.length > 0: Console.WriteLine("а - это строка, длинной больше нуля");
break;
case object a when a != null: Console.WriteLine("а - это существующий объект");
break;
default: Console.WriteLine("а - не известно");
}

Показать


Правда в таком синтаксисе лишние case и break излишни напрягают!
Кстати, ";" тут тоже есть - но они не отделют две части составного подвыражения case друг от друга - а отделяют отдельные строки сопоставления с образцом.

Кстати, с недавних пор C# тоже поддерживает switch-выражения


var operation = 2;

var result = operation switch
{
1 => "Case 1",
2 => "Case 2",
3 => "Case 3",
4 => "Case 4",
_ when value > 10 => "case > 10",
_ when value <= -10 => "case <= -10",
_ => "No case availabe"
};
Показать


И заметьте - синтаксис преобразился и стал очень похож на Kotlin (тоже описывается лямбда-выражений)
Кстати, применение символа "_" для секции иначе/дефолт - я считаю более логичным (первый раз такое заметил в Scala - там вообще очень любят этот символ обрабатывать особым образом), странно почем так не сделали в Kotlin (правда там для этого применяют ключевое слово "it"). Даже применять "_" можно несколько раз - и доп. условия "when" поддерживаются.
И тут уже нет ";" внутри составного оператора - что для едино-вычисляемого выражения было бы вообще дико (наличие внутри ";").
Так что - можете смотреть на новый синтаксисиc switch'ей в C# 8.0 - он более продвинут даже чем в Kotlin - только если уж делать такой - то унифицированно для switch классических операторов и выражений
64. Perfolenta 207 20.08.19 11:30 Сейчас в теме
(63)
Хотя я сам уже знаю ответ ("если а = 1 тогда б=1; иначе б=2 конецесли"

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

и Котлин и Шарп наследники синтаксиса Си, поэтому не удивительно, когда они приходят к похожим решениям...
но Перфолента наследует синтаксис 1С, поэтому я не могу делать его Си-подобным и не хочу...
я просто пытаюсь здравые идеи других языков красиво выразить в синтаксисе Перфоленты...
например, благодаря вам, я решил, что надо добавить оператор В (in), я и раньше о нем думал, но теперь пришел к мнению, что он точно будет...
еще, задумался над необходимостью диапазонов 1..10, может тоже сделаю, но еще не решил... надо определиться какие операции будут доступны с диапазонами и что они из себя внутренне будут представлять...
Спасибо за ваши советы, они заставляют думать о том, о чем не думал до этого... вы уже повлияли на развитие Перфоленты :)
65. Darklight 37 20.08.19 12:20 Сейчас в теме
(64)

и Котлин и Шарп наследники синтаксиса Си, поэтому не удивительно, когда они приходят к похожим решениям...
но Перфолента наследует синтаксис 1С


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

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

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

Вот, например C# и VB сейчас развиваются именно так. Их тяготит груз прошлого - ориентированности на своих "прародителей" в виде C++ и VB6 более ранних версий. Не могу сказать, что мне это нравится - но у них нет выхода - создатели языков хотя их развивать и шагать в ногу со временем, но языки уже не новые - и у них есть много груза "из прошлого" который они тянут ради совместимости и приемственности, которые были в них внедряны на этапе их первоначального проектирования чтобы привлечь программистов, знакомых с языками-прорадителями!

Вот Python - сделал ход - отказался от совместимости с устревшим синтаксисос при переходе на 3-тю редакцию - это болезненное решение, но думаю со временем там всё устаканится.

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

А Вы изначально хотите в новом языке тянуть груз прошлого - как это было с вышеназванными языками. Но Вы тут единоличный автор - царь и бог - и только Вам сейчас решать какие перспективы будут у Вашего языка лет так через 10.

Да, и ещё, не всегда, когда семантика языка логически может допускать отсутствие того или иного ключевого символа/слова - его стоит полностью исключать / делать не обязательным. Тем более когда язык только находится на этапе разработки (лучше опустить его позже - когда будет ясно, что без него действительно выходит более красивый и понятный код, который будет проще набирать). А во многих таких случая - лучше делать автоподстановку в IDE пропущенных слов, однозначно подразумеваемых в семантической конструкции - так часто делает например Visual Studio).
Ну и с ";" будьте поаккуратнее - если синтаксис подразумевает опущение данного символа, то это не значит что его следует позволять ставить там, где его обычно совсем не ожидаешь (исходя из общей практики программирования).

Ну и ещё :-) Я бы всё-таки больше смотрел сейчас в строну того, как в императивные языки проникают веяния из функциональных языков (активно развиваемые ещё со времён Scala - где это одна из основных фишек всей семантики языка, а не отдельных вкраплений синтаксиса) - тут и тотальное применение лямбда-подобного синтаксиса, и упрощённое определение функций высшего порядка + продвинутая функциональная логика их комбинаций, и упрощённый матчинг (сопоставление с образцом), и ориентированность того, что практически каждый оператор - может быть выражением и т.п. Это мировая тенденция - скрещивать императивный и функциональный стили программирования - это она рождает очень красивые и мощные гибриды - и на это стоит сразу ориентироваться при проектировании нового языка!

Ну и про нулабельнымие классы - тоже не стоит забывать - лучше сразу заложить (как в Kotlin), что все переменные классов в простом синтаксисе не могут быть нулабельными (неопределябельными/пустоватыми) - что если переменная/поле допускает значение "неопределено" то это явно должно быть обозначено при её определении. Это уже общепризнаный правильный подход - но пока малораспространнёный именно из-за груза совместимости с прошлым. Не повторяйте эту ошибку. Ну и вводите сразу операторы - безопасного обращения к нулабельным объектам и быстрой проверки на нулабельность (в C# и в Kotlin тут всё крассиво придумано).


И ещё :-D Я Вам просто напомню - пожалуйста - уберите неявное определение переменных как в 1С - это очень плохая механика - чреватая неявными ошибками при разработке программ, её поддерживающих. Большинство языков сейчас этого не позволяют - и правильно делают! А в IDE всегда стоит выделать отдельно (цветом или ещё как) локальные переменные от, объявленных вне данного болока видимости локальных переменных

Ну и :-))))) откажитесь от полей - делайте только свойства - как это реализовано в Kotlin
66. Perfolenta 207 20.08.19 16:27 Сейчас в теме
(65) на данный момент у меня два основных требования:
1) Перфолента это расширение языка 1с, т.е. код написанный по правилам языка 1С должен работать с минимальными переделками...
2) Все, что есть в Net должно вызываться...

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

От полей я не откажусь, т.к. они есть в Net и особых проблем не вызывают... а вот защиту от неопределенности обязательно буду развивать...
В неявном объявлении переменных я тоже проблемы не вижу... они ведь получают при этом тип и дальше операции с ними проверяются на типобезопасность... это не то же самое, что переменные неопределенного типа...
67. Darklight 37 20.08.19 17:12 Сейчас в теме
(66)
код написанный по правилам языка 1С должен работать с минимальными переделками...

Учитывая, что 1С это язык с динамической типизацией, а Перфолента - статически типизированный язык - поддерживать это правило практически не возможно! Совместимость будет - но лишь отчасти!

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

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

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

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

Это только один из примеров. Вот, ещё пример - это когда код, разработанный в одном месте, с неявными переменными - переносится в другое место - где происходит пересечение имён переменных и свойств, в вышестоящей иерархии - у меня такое в 1С, например, бывает часто - особенно при переносе кода в контекст формы - у меня ранее происходили пересечения локальной переменной по имени "Параметры".

Так что, неявное объявление переменных - плохая практика. Не говоря уже о том, что тут просто трудно при анализе текста понимать - где объявление новой переменной, а где присвоение значения уже объявленной ранее переменно/поля/свойства!

Поэтому в подавляющем большинстве языков нет неявного объявления переменных! Тем более в статически типизипрованных!

Но если уже так хочется оставить неявное объявление переменных - сделайте опцию компиляции (выключенную по умолчанию) и директиву компиляции модуля (метода) для случаев требования высокой обратной совместимости с кодом 1С

Хотя я не вижу в этом (в обратной совместимости) никакого смысла - уж очень далеки платформы 1С и .NET друг от друга! Да и сам язык 1С уже очень сильно морально устарел - зачем тащить весь этот хлам в светлое будущее - мне не понятно!

Хотите делать язык с полностью русским синтаксисом - делайте! Хотите клепать его по шаблонам современного VB - да пожалуйста - но оглядывайтесь на то, за что ругают актуальны языки , и создавайте то, что будет востребовано через и 20 и 30 лет. А не канет в лету как только 1С откажется от своего морально устаревшего языка в угоду современным тенденциям и ориентации за запад - где в ходу совсем другие подходы в семенатики программирования!

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

ну а если к языку ещё и компиляторы в LLVM и в байткод 1С прикрутить (хотя бы ограничено) - то сфера применения языка расширится многократно - и тут как раз его могут предпочесть за красивые фишки, которых нет в других языках, даже в проектах, которые пишутся на других платформах!

Вы царь и бог - решать Вам!
AlX0id; Fox-trot; Perfolenta; +3 Ответить
68. Perfolenta 207 20.08.19 19:08 Сейчас в теме
(67)
Спорить с Вами не хочу

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

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

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

Но я бы лучше смотрел в сторону привлечения программистов, кто уже программирует на платформах .NET и Java, JavaScript

а зачем это им? они уже серьезно потратились на изучение англоязычного программирования... и оправдывая это перед самим собой, начинают утверждать, что русский язык не пригоден для программирования... ни кто из гуру не хочет снова стать чайником...
тем более, что их языки более развиты и стабильны чем мой, который я в одиночестве еще даже не доделал...
моя цель это новички и те, кто сможет получить дополнительные плюшки от нового языка переиспользуя уже полученный опыт 1с... они тоже не слабо потратились на его изучение...
я вовсе не копирую VB, но и он тоже стал донором некоторых конструкций, как и C#, и Kotlin, и Python тоже стали, я стараюсь у всех самое лучшее взять, но с перестилистикой...
ну а если к языку ещё и компиляторы в LLVM и в байткод 1С прикрутить

это я просто не потяну... мне бы выполнить все планы по Net... а там еще работы и работы... а дальше много будет зависеть от того, найду ли я схему монетизации... если не найду и пойду в опенсорс, то развитие будет очень медленным...
69. Darklight 37 20.08.19 20:26 Сейчас в теме
(68)Про совместимость я написал выше - лучше определится - либо стараться максимально быть приближенным к классчиескому 1С, тащить к себе всю его ущербность, и ориентироваться только на его аудиторию. Либо создавать что-то более совершенное, и привлекать адептов сразу со всех сторон. Но, Вы. всё-таи выбрали вариант совместимости - что же это Ваше право. Просто я не на этой стороне, уж простите. Была бы возможность программировать для платформы 1С на языке, скажем C# или Java - я бы программировал на нём и забыл бы это бред синтаксиса 1С как страшный сон. Хотя лично я не долюбливаю ни тот ни другой язык. Даже в более, "любbмих" (вру) мною , Scala и Kotlin мне много чего не нравится, и я не считаю их идеальными и даже близко. Увы - идеального языка для меня не существует - и сейчас я вообще вынашиваю планы о разработке совершенно иного императивного языка - технически более более близкого например к Transact SQL (который, к слову, мне тоже не очень нравится семантически, мне более подуще семантика языка LINQ to SQL/Entity framework) чем, скажем, к Kotlin. Но это язык более высокго порядка абстрации, подразумевающий взаимодействие с кодом, написанном в более классическом стиле (с применением LLVM не важно на каком языке и в какой парадигме).

Говоря же о других (не 1С-ных) комьюнити, я в-первую очередь думал ещё не о закоренелых адептов "вражеских лагерей", а о тех, кто только делает первые шаги на поприще программирования. А сейчас yjdbxrb чаще всего изучают Java, JavaScript, C#, Python
Вот их, в первую очередь, и стоило бы "переманивать" (направлять в "своё" русло). Но "старым" "примитивным" языком с несовременной семантикой построения алгоритмов их не привлечь - их будут манить мощные и изящные фишки более активно развивающихся языков, ну и их востребованность (и как следствие - деньги и количество вакансий) будет их привлекать ещё больше!

Ну а сообщество 1С-адепотов - оно не долговечно - пройдёт ещё лет 30 и компания 1С уж наверняка анонсирует новую платформу - и поверьте, там не будет языка 1С в знакомом виде - это будет либо глубокая переработка (ещё больше, чем это было при переходе с 7.7 на 8.0), либо тотальная замена на другой язык (иначе он попросту останется "костяными счётами в мире суперкомпьютеров"). Таковы интересы компании - для которой сейчас западный рынок становится более привлекательным, чем русскоговорящий (тут они уже завоевали достаточно, и лишь будут стараться удерживать эти объёмы при дальнейшей эволюции). Возможно русский синтаксис сохранят, а может и нет.... не так уж много программистов кому он действительно нужен! А проблем с глобализацией разработок создаёт ого-го как много!

А по поводу монетизации - есди Вы выпустите бесплатный компилятор в .NET и платные в LLVM и в байткод 1С - то это могло бы быть оправдано. Ну компилятор в байткод 1С уж точно был бы востребован - т.к. многим программистам захотелось бы писать для платформы более продвинутый код - но так, чтобы он интегрировался с самой платформой, хотя бы на уровне простого взаимодействия: классический код, метаданные и библиотеки из конфигурации должен быть доступны в Перфоленте, а код перфоленты - должен быть доступен к вызову хотя бы на уровне процедур и функций общих модулей (хотя моудли объектов тоже можно было бы задействовать). Вот это была бы бомба! А если она ещё и на мобильной платформе работала....
70. Perfolenta 207 21.08.19 01:03 Сейчас в теме
(69)
и сейчас я вообще вынашиваю планы о разработке совершенно иного императивного языка

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

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

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

у языка 1с фишек нет, а вакансии есть... это не прямая корреляция... реклама и маркетинг больше влияют на развитие и распространение языка, чем любые его фишки... вспомните классику "написано однажды - работает везде" и сколько бабла на раскрутку этого слогана было потрачено...
да и сколько раз за 30 лет я слышал о новых крутых парадигмах и языках, но если честно, то большинство кода в мире пишется на обычных циклах и условных операторах... мало чем отличающихся от старых... достаточно примеры в GitHabe посмотреть на том же Шарпе...
10. Steelvan 315 01.08.19 14:31 Сейчас в теме
(3) со вторым абзацем согласен

В прошлом году тоже "новый" язык оприлюдили.
РусскийФокс называли.

Что-то автор перестал его продвигать в массы после нескольких публикаций.
13. Perfolenta 207 01.08.19 15:27 Сейчас в теме
(10) я общаюсь с автором Русского Фокса, он изначально утверждал, что для себя его делает... и он продолжает его делать, выкладывает ролики в Ютубе...
на мой взгляд у него одна проблема, Майкрософт бросила Фокс, совсем...
А Net пока ни кто бросать не собирается, более того, планы его развития изложены на годы вперед... так что мне на этот счет легче, чем Андрею Ошнурову...

я вовсе не питаю иллюзий, что мне удастся пробить недоверие... но, судя по большинству комментариев тех, кто скачал и посмотрел мой язык, люди приняли Перфоленту хорошо...
и это радует... а дальше от меня будет зависеть, смогу ли я сдела так, что бы люди хотели и им нравилось программировать на Перфоленте... буду стараться...
11. Steelvan 315 01.08.19 15:11 Сейчас в теме
Надо быстрее делать решения, которые решают важные для дельцов задачи.
Это может дать деньги для жизни за счет проекта + будут примеры использования на настоящих деловых задачах.

Иначе сообщество может Вас забросать бесплатными работами на 10 лет вперед.
Вы выдохнетесь (жена запилит, просто надоест и т.п.) и бросите.

Пока это просто "смотрите что могу". Поделка.
До продукта нужна обертка в сайт с разделами:
*) Примеры применения;
*) Документация:
*) Ссылки на выполненные работы с выгодой по сравнению с 1С;
*) Форум техподдержки;

Может и прозвучит грубо, но мое мнение такое, что автор это сделал для самовыражения.
Если бы он хотел этим зарабатывать, то доделал и выкатил бы сразу полный комплект сопутствующей атрибутики (сайт, примеры, документация). И это было бы воспринято серьезно с самого начала.
Обнародование "как есть, разбирайтесь сами" признак того, что это побарахтается немного и повторит судьбу onescript (будет пущено на самотек с доработками сообщества и минимальным участием авторов как регуляторов).

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

Все вышенабранное является личным мнением автора и может отличаться от мнения редакции :)
14. Perfolenta 207 01.08.19 15:42 Сейчас в теме
(11) да, вы все верно написали... без какой-то схемы монетизации всё будет жить и двигаться плохо... на грани выживания...
но для того, что бы двинуться в бизнес нужен продукт, а его сначала сделать надо... вот и делаю...
изначально я тоже думал, что лучше выкатить уже готовый продукт... но после нескольких экспериментов над 1с-никами, которые согласились попробовать Перфоленту (до опубликования), я понял, что знакомить людей с новым языком можно заранее... это работает... люди попробовали и стали делать для себя маленькие, но полезные программки... конечно, с моей помощью, но начали и у них получается, всё работает...
язык и коммерческий продукт на его основе это все же разные вещи...
Что вы можете сделать из того, что не можете на 1С?
Много чего, например, скорость работы кода Перфоленты может в сотни раз превышать скорость работы 1С... можно сделать службу Windows, независимое от лицензий 1С приложение, собственно всё, что делают люди выбирая C# или VB вместо 1С...
17. vasvl123 120 02.08.19 06:57 Сейчас в теме
(11) На 1С чего не пытаешься сделать, только учетная система получается)
Perfolenta; +1 Ответить
19. Perfolenta 207 02.08.19 09:33 Сейчас в теме
12. Steelvan 315 01.08.19 15:17 Сейчас в теме
Деньги двигатель всего.

На этом можно зарабатывать ?
Если да, то отлично.
Если нет, то вы у своей семьи украли КолВоЧасов * 1000руб (+/-).
15. Perfolenta 207 01.08.19 15:46 Сейчас в теме
(12) я это хорошо понимаю, поэтому думаю о том, как продукт будет монетизироваться... но на данный момент продукт еще доделать надо... пока был только анонс, что не противоречит практике маркетинга...
а у семей, в капитализме, все самозанятые вынуждены время красть, к сожалению...
я не могу себе позволить уйти с работы в 17-00, как это делали мои родители в СССР, или уйти в отпуск на 30 дней, абсолютно не вспоминая о работе, как это делал мой отец...
43. for_sale 901 02.08.19 18:37 Сейчас в теме
(15)
Кем это они у вас так замечательно работали??

И при чём тут капитализм? Я сейчас при капитализме ушёл на вольный хлеб - не нарадуюсь. В том числе и потому, что не надо никуда ездить, и работать можно, когда хочешь.
44. Fox-trot 166 02.08.19 18:57 Сейчас в теме
(43)
И при чём тут капитализм?

при социализме самозанятых почти не было, кругом работали от звонка до звонка
такие дела
Perfolenta; +1 Ответить
45. Perfolenta 207 02.08.19 22:39 Сейчас в теме
(43) обычными рабочими на обычном заводе работали...
при капитализме отдельный человек не показатель уровня жизни... чем ближе вы к вершине пирамиды, тем толще ваш бутерброд... как известно, под чертой средней зарплаты на много больше людей, чем над ней...
я тоже почти всю жизнь работаю сам на себя и на свой уровень жизни не жалуюсь, но клиентов на месяц не бросишь... поэтому и в отпуск нормальный сходить не могу...
46. for_sale 901 03.08.19 09:22 Сейчас в теме
(45)
Ну так, получается, капитализм тут не при чём? Вы организовываете свою работу и свой уровень жизни. Вы также, как и при социализме, можете пойти на завод и вкалывать там до седьмого пота в грязи, шуме, гари, крике среди пьяных коллег, половина из которых - бывшие уголовники (нет, я не обобщаю, это флешбеки из моего собственного заводского опыта). Зато скорее всего в положенный день вы получите положенную сумму и сможете с радостью раз в году хоть на месяц съездить в Турцию, а может даже и в Крым. У меня родители тоже на заводе, половину жизни при социализме, половину при капитализме, поверьте, если вы действительно хотите социализм и работать на заводе, то сейчас на заводе ничего не изменилось))

Но ведь вы не захотели на завод? Вы воспользовались тем, что дал вам капитализм - выбором, и выбрали другой путь, в тепле, с кондиционером, с чашечкой горяченького и обалденным видом за окном (опять не обобщаю, а делюсь своим нынешним опытом) и возможностью ругать проклятый капитализм и со слезой счастья вспоминать родной социализм))
47. Perfolenta 207 03.08.19 13:11 Сейчас в теме
(46) такое впечатление, что вы про разницу между капитализмом и социализмом ничего не знаете...
я бы и работал на заводе, был бы инженером кораблестроителем, на которого учился... только от него остались рожки да ножки... огромная территория на которой можно сталкера снимать... как и от остальных заводов и фабрик в городе... мне просто пришлось стать самозанятым в 90-е, что бы с голоду не помереть...
капитализм ничего не дал, он забрал... может быть вы не помните центральные улицы города застеленные на километры покрывалами, на которых лежали пожитки граждан надеявшихся хоть что-то продать, а я прекрасно помню... в этом суть капитализма, ни кто ни кому не нужен...
Сейчас на заводе кое-что изменилось... наш завод, на полученную прибыль, построил целый микрорайон для своих рабочих, несколько пансионатов и пионерских лагерей на море для своих рабочих и их детей, он содержал несколько десятков технических и гуманитарных кружков и спортивных секций, где я мог заниматься бесплатно, выбирая то, что нравится... а сегодня, вся эта прибыль уходит хозяевам, которые имели ввиду и рабочих и их детей... именно поэтому народ у нас недавно собрал деньги и поставил памятник директору нашего завода, с говорящей фамилией Заботин... который, помимо всего остального, построил яхтклуб для нас, а не купил яхту себе, как делают нынешние...
user1979159; Артано; +2 1 Ответить
48. for_sale 901 03.08.19 13:52 Сейчас в теме
(47)
Мда... Такое впечатление, что вы про разницу между капитализмом и развалившимся социализмом ничего не знаете. Это не капитализм - это разваленный, неспособный выжить социализм дал нам разруху и продаваемые пожитки. Я никак в толк не возьму - если он такой офигенный, этот социализм - почему же не то, что американцы какие-то, а даже вы в нём не живёте? Послушаешь - так всё офигенно было, да только развалился почему-то. А уже 100 лет гниющий капитализм шагает по планете.

Я вам расскажу в чём отличие капитализма от социализма. В капитализме вы действительно никому не нужны. А проще говоря - вы можете делать, что хотите. Эта огромная ответственность за вашу жизнь валится вам на голову, в отличие от социализма, где вы - настоящая овца в чужом стаде и можете только пахать на заводе. И всё горе этого народа в том, что он так привык быть в стаде, что уже для него нет худшей участи, чем нести ответственность за себя в своих руках.

Вы даже не понимаете, что вы сами можете быть директором завода и строить яхтклубы (или покупать яхты), что вы можете вообще не работать и жить припеваючи (или не припеваючи), что вы можете поехать в любую другую страну или в любой другой регион, можете строить заводы с нуля или придумывать языки программирования. Всё, что вам надо - это миска супа, работа с 9 до 18, нормированный отпуск раз в году и чтобы для вас кто-нибудь строил микрорайоны, яхтклубы и кружки, но только чтобы это был кто угодно, только не вы.
49. Perfolenta 207 03.08.19 15:54 Сейчас в теме
(48) гниющий капитализм никуда не шагает... он гниет, как и 100 лет назад...
он мог бы сделать нормальной жизнь людей в Африке, в латинской Америке, на ближнем востоке, много еще где, но он несет только смерть и разрушения ради собственной прибыли... они сами это прекрасно понимают... просто посмотрите их фильмы о будущем... оно мрачное...

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

съесть, то он съест, но кто ему даст... ваши слова напоминают речевки о походе в Европу на нашем украинском майдане... чашечка кофе с утра в парижском кафе по безвизу... ага... этот безвиз доступен очень не многим... а остальным только в виде "съездить в Париж и умереть"... вы прекрасно знаете, что 1% американцев владеет 82% богатства и не собирается ни с кем делиться...
user1979159; Артано; +2 1 Ответить
50. пользователь 03.08.19 16:24
Сообщение было скрыто модератором.
...
51. пользователь 03.08.19 16:30
Сообщение было скрыто модератором.
...
52. пользователь 03.08.19 17:12
Сообщение было скрыто модератором.
...
53. пользователь 03.08.19 19:22
Сообщение было скрыто модератором.
...
54. пользователь 03.08.19 19:52
Сообщение было скрыто модератором.
...
57. пользователь 04.08.19 20:28
Сообщение было скрыто модератором.
...
58. пользователь 04.08.19 20:29
Сообщение было скрыто модератором.
...
60. пользователь 18.08.19 20:32
Сообщение было скрыто модератором.
...
55. Fox-trot 166 04.08.19 07:57 Сейчас в теме
(48)
Вы даже не понимаете, что вы сами можете быть директором завода и строить яхтклубы (или покупать яхты), что вы можете вообще не работать и жить припеваючи

вот он предел мечтаний
ржунимагу
user1979159; Perfolenta; +2 1 Ответить
56. for_sale 901 04.08.19 09:39 Сейчас в теме
(55)
Неисключено) А вы, наверное, хотите осудить чей-то предел мечтаний?)) Показать "правильный" предел?))
18. vasvl123 120 02.08.19 07:01 Сейчас в теме
(12) А если в рабочее время, то обокрали работодателя
20. Perfolenta 207 02.08.19 09:36 Сейчас в теме
(18) я, к счастью, сам себе работодатель... хотя, если разобраться, то клиенты это тоже начальники и работодатели... только они не имеют возможности тебя уволить, но могут уволиться сами..
21. Perfolenta 207 02.08.19 10:51 Сейчас в теме
Только что проверил интересный момент: оказывается, C# и VB.Net не умеют делать цикл Для Каждого (foreach) по нескольким перечислителям, а Перфолента умеет!!!
Например, в стандартной библиотеке Перфоленты есть тип Матрица, который можно обойти в цикле Для Каждого двумя способами: по значениям и по элементам матрицы.
Для Значение тип ДВещ Из МояМатрица //цикл по IEnumerable<ДВещ>
   //
КонецЦикла 
Для Элемент тип ЭлементМатрицы Из МояМатрица  //цикл по IEnumerable<ЭлементМатрицы>
   //
КонецЦикла 

C# и VB.Net могут только первый перечислитель обойти по значениям, а второй не могут....
вот такой вот курьёз :) кое в чем Перфолента круче, хотя пока, конечно, в ней еще многого нет, что есть в этих двух языках... только работаю над многими вещами...
24. minimajack 81 02.08.19 11:07 Сейчас в теме
(21) чесно говоря ничего не понял...хотя пытался)
26. Perfolenta 207 02.08.19 11:15 Сейчас в теме
(24) значит цикл Для Каждого вам не понятен... все просто, когда вы пишете Для Каждого система определяет по какому типу можно пройтись в указанной коллекции...
например, когда вы идете по объекту СписокЗначений, то вы на каждом шаге получаете тип ЭлементСпискаЗначений...
но в Перфоленте коллекция может давать возможность обходить ее по разным типам содержимого... представьте, что СписокЗначений можно было бы обойти сразу по значениям или по представлениям, а не только по элементам....
28. Darklight 37 02.08.19 11:22 Сейчас в теме
(26)Дайте, пожалуйста, более наглядный пример - заинтриговали
32. Perfolenta 207 02.08.19 11:34 Сейчас в теме
(28) вот на C#
using System;
using Промкод.Перфолента;

namespace Энумерабле2
{
    class Program
    {
        static void Main(string[] args)
        {
            Матрица matr=new Матрица(3,3);
            foreach (Double element in matr)
            {
                Console.WriteLine($"Element: {element}");
            }
            foreach (ЭлементМатрицы element2 in matr) //ОШИБКА!!!
            {
                Console.WriteLine($"Element: {element2}");
            }

            Console.ReadLine();

        }
    }
}
Показать

то же самое на Перфоленте работает...
35. Darklight 37 02.08.19 11:39 Сейчас в теме
(32)Что-то пример какой-то не удачный. Всё равно мне не понятно
36. Perfolenta 207 02.08.19 11:58 Сейчас в теме
(35) что именно не понятно? есть коллекция, например, СписокЗначений как в 1С, его можно обойти в цикле Для Каждого получая на каждой итерации объект типа ЭлементСпискаЗначений из которого можно получить Значение....
а было бы хорошо, если бы можно было сразу по значениям пройтись...
вот в данном примере это и продемонстрировано...
сначала проходим по значениям матрицы, которые имеют тип Double, а потом по элементам матрицы, которые имеют тип ЭлементМатрицы и содержат информацию о строке и колонке значения...
в Перфоленте я так могу, а в C# и VB нет...
37. minimajack 81 02.08.19 12:06 Сейчас в теме
(36) это никому не надо, если надо - есть методы коллекций values(), keys() и т.п.
38. Perfolenta 207 02.08.19 12:09 Сейчас в теме
(37) надо или не надо это спорный вопрос... а вот собственные спецификации они криво реализовали это факт... у меня же работает, а я по ихним же спецификациям делал...
41. minimajack 81 02.08.19 12:56 Сейчас в теме
(38)
В СписокЗначений лежат ЭлементСпискаЗначений в котором значение типа ЭлементСпискаЗначений...
Как выбрать Значение?
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(1,"1");
СписокЗначений.Добавить(2,"2");

СписокЗначений2 = Новый СписокЗначений;

Для каждого ключЗнач Из СписокЗначений Цикл
	СписокЗначений2.Добавить(ключЗнач, ключЗнач.Представление);
КонецЦикла;

Для каждого ключЗнач Из СписокЗначений2 Цикл
	Сообщить(Строка(ТипЗнч(ключЗнач)) + " " + ТипЗнч(ключЗнач.Значение));
КонецЦикла;
Показать

Элемент списка значений Элемент списка значений
Элемент списка значений Элемент списка значений
42. Perfolenta 207 02.08.19 13:00 Сейчас в теме
(41) вы про 1С или про Перфоленту спрашиваете?
ответ в обоих случаях - никак...
я пока двойной перечислитель только в объекте Матрица сделал... а СписокЗначений и другие 1с-ные коллекции почти такие же как в 1С... но думаю, что сделаю и в них тоже такую возможность... а может и не буду...
30. Darklight 37 02.08.19 11:29 Сейчас в теме
У вас вот этот код
 Рег = Новый РегулярноеВыражение("(?<=Context=').*?(?=')")

Выполняется внутри процедуры "ОтборСтрок" которая вызывается циклически - это не очень хорошее решение - т.к. регулярне выражение каждый раз компилируется заново а это (в зависимости от выражения) может быть достаточно затратной операцией. Да ещё и объекты постоянно создаются заново - засоряя память и ускоряя процесс сборки мусора.
Я не знаю насколько потокобезопасен класс "РегулярноеВыражение" но лучше его вынести за рамки потока - либо сделать глобальную коллекцию предкомпилированных паттернов (используемую всеми потоками) - либо сделать для каждого параллельного алгоритима отдельный экземпляр(ы) (что сложнее в силу применения параллельного цикла, где очень сложно управлять асинхронностью).
В общем - тут неплохо бы показать оба подхода для людей, которым асинхронное программирование пока чуждо!
31. Perfolenta 207 02.08.19 11:32 Сейчас в теме
(30) вы прямо читаете мои мысли... я сначала вообще без регулярных выражений написал, а потом решил, что надо добавить пример с регулярным выражением... думал его вынести из процедуры, но потом решил, что так будет не наглядно... в производительности просадка копеечная, я проверял...
34. Darklight 37 02.08.19 11:38 Сейчас в теме
(31)Тут больше дело в показательноси хотя да, это палка о двух концах либо показывать как проще, либо показывать как нужно!
39. Perfolenta 207 02.08.19 12:31 Сейчас в теме
(34) наглядность и "синтаксический сахар" почти всегда побеждает соображения производительности, пока критически в них не упрется...
Для отправки сообщения требуется регистрация/авторизация