|
Динамическая или статическая типизация? | ☑ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Ненавижу 1С
гуру
08.05.20
✎
14:09
|
Навеяло статьей
https://habr.com/ru/post/500926/ Я лично за статическую типизацию с автовыводом типа, ну максимум - за смешанную Это уменьшает число багов в ран-тайме, да и может ускорить работу виртуальной машины ака Платформа 1С. Ваше мнение по данному вопросу? |
||||||||||||||||
120
Serginio1
10.05.20
✎
10:38
|
(117) Я и на ней тоже. Вернее это 1С++ и OpenConf
https://www.script-coding.com/Intellisense.html Перем ТЗ, //:ТаблицаЗначений СЗ; //:СписокЗначений Перем Сам; // : Контекст //тип будет определён из контекста, например, для классов 1С++ //(для получения списка методов и свойств класса после точки) //"Контекст" можно использовать и для типов функций (см. примеры чуть ниже) //*********************************************** Процедура ТестПроц (СЗ2, Контр, МД, Таб) // СЗ2 //:СписокЗначений // Контр //:Справочник.Контрагенты // МД //:Метаданные // Таб //:Таблица ... КонецПроцедуры Опять же 1С может пойти по пути TypeScript. Там анотация типа она нужна только во время написания кода. Только для интеллисенсе и предупреждений. Хочешь пользуйся, хочешь нет. Но многие используют TypeScript вместо JavaScript |
||||||||||||||||
121
Serginio1
10.05.20
✎
10:40
|
(116) И что такого плохого сделал, что ты хочешь меня расстрелять? Как хочу так и пишу. Если 1С не дает инструментов, нужно придумать их самому.
|
||||||||||||||||
122
H A D G E H O G s
10.05.20
✎
11:07
|
(116) я делаю, иногда тоже самое но через препроцессор, за что тут стрелять?
|
||||||||||||||||
123
Конструктор1С
10.05.20
✎
12:33
|
(121)(122) ну может не стрелять, но за мусорный, отвлекающий код а-та-та по рукам
|
||||||||||||||||
124
ILM
гуру
10.05.20
✎
13:34
|
(119) Если рассматривать предопределенные методы, то все они привязаны к типовым объектам метаданных и скорее являются функциями этих типов/классов, которые определяют его поведение.
|
||||||||||||||||
125
Serginio1
10.05.20
✎
14:01
|
(123) Меня не отвлекает.
Всегда можно комментарий написать // Для интеллисенсе Если ложь тогда тз= новый ТаблицаЗначений; КонецЕсли // конец интеллисенсе И все понятно. Этот код не отвлекающий, а как раз вспомогательный, что бы ручками методы не вбивать и плодить синтаксические ошибки которые в ветвлениях выстреливают раз в год. Так, что каждый выбирает сам кому какой код писать. Но в том же вэб программировании все больше выбирают типизированный TypeScript вместо нетипизированного JS. А раз 1С с async awaite вступила на путь JavaScript то стоит и посмотреть в сторону TypeScript при этом можно аннотацию отключить при компиляции. Будут выдаваться только предупреждения. Или писать как сейчас без типов. По умолчанию any |
||||||||||||||||
126
Сияющий в темноте
10.05.20
✎
15:37
|
Как бы,в 1с необязательное объявление переменных.
поставить типы значений у функций - это ничем 1с не навредит,а позволит более точно выполнять проверку кода. но,объект Структура нетипизированный,и в него все равно,можно будет положить все,что душа пожелает. вот введение структур с заранее заданными полями и типами - да - очень бы спасло. сейчас приходится доя таких объектов в структуре вводить обчзательное поле Тип. |
||||||||||||||||
127
ДенисЧ
10.05.20
✎
17:08
|
(122) За препроцессор - не надо.
Но нагружать интерпретатор лишним инструкциями... |
||||||||||||||||
128
Serginio1
10.05.20
✎
17:13
|
Ну опять же в TypeScript для этого есть дженерики https://xsltdev.ru/typescript/handbook/generics/. А для мапов есть keyof
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html#support-number-and-symbol-named-properties-with-keyof-and-mapped-types |
||||||||||||||||
129
Конструктор1С
10.05.20
✎
17:15
|
(125) воспользовался контекстной подсказкой и грохни этот мусорный код. Не заставляй читающих твой код тратить время и интеллектуальные ресурсы на чтение подобных "произведений"
|
||||||||||||||||
130
Serginio1
10.05.20
✎
17:15
|
(127) Ну интерприратор обрабатывает байт код. А в нормальных компиляторах недостижимый код и не попадает. Просто редко пишу на 1С.
Замени "Tckb" на препроцессор |
||||||||||||||||
131
ДенисЧ
10.05.20
✎
17:18
|
(129) Хорошо, уговорил. Теперь я больше не буду читать твои посты.
|
||||||||||||||||
132
Serginio1
10.05.20
✎
17:18
|
Сейчас речь о том, что бы эту хрень вообще не писать! Я сейчас редко пишу на 1С и ооочень рад этому.
Но часто приходится его читать и вот если бы был такой "Мусорный код" я бы был только рад". Проще с кодом разбираться. Особенно в 1С. На вкус и цвет ... |
||||||||||||||||
133
Serginio1
10.05.20
✎
17:19
|
132->129
|
||||||||||||||||
134
Конструктор1С
10.05.20
✎
17:24
|
(132) проще с кодом разбираться когда у переменных и методов хорошие, лаконичные имена, четко описывающие их предназначения, а не когда там лишний мусорный код
|
||||||||||||||||
135
Serginio1
10.05.20
✎
18:48
|
(134) Еще раз для когo мусор, а для другого это клад. Еще и комментариев побольше с описанием параметров методов и возвращаемых значений.
Проблема опять же не в этом. А в том, что в 1С нет аннотации типов. А при аннотации не только имена переменных, но и тип переменных самодокументируются. Например в том же TypeScript для публичных методов комментируется сам метод, параметры и возвращаемое значение. В коде 1С этому следуют не всегда. |
||||||||||||||||
136
Serginio1
10.05.20
✎
20:59
|
|||||||||||||||||
137
Конструктор1С
11.05.20
✎
07:52
|
(135) не обманывайся. Во-первых у тебя на ровном месте лишняя точка принятия решения (конструкция Если), а чем больше точек принятия решения, тем сложнее для восприятия код. Во-вторых такая конструкция заведомо вынуждает несколько раз побегать глазами ввех-вниз, прежде чем станет понятно, зачем оно было надо и влияет ли оно на логику процедуры. Эдакий интеллектуальный мартышкин труд. Очевидно, ты никогда не занимался командной разработкой, поэтому и не знаешь ценности хорошего кода и уродливости таких вот сорных вставок
|
||||||||||||||||
138
Вафель
11.05.20
✎
10:02
|
конечно одно если аардинально портит производительность
|
||||||||||||||||
139
Вафель
11.05.20
✎
10:03
|
и цикломатическая сложность прям зашкаливает
|
||||||||||||||||
140
ДенисЧ
11.05.20
✎
10:06
|
|||||||||||||||||
141
dezss
11.05.20
✎
10:14
|
(126) Как это не обязательное объявление?
Объявление обязательное, в вот строгой типизации нет. |
||||||||||||||||
142
ДенисЧ
11.05.20
✎
10:19
|
(141) Где это в 1с обязательное объявление переменных?
Напиши Процедура а() пока аа < 10 цикл сообщить(аа); конецЦикла; КонецПРоцедуры И 1с тебе вообще ни слова ни скажет. Пока не запустишь... |
||||||||||||||||
143
dezss
11.05.20
✎
10:25
|
(142) Написал
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5869,8)}: Переменная не определена (аа) пока <<?>>аа < 10 цикл (Проверка: Сервер) {ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5870,14)}: Переменная не определена (аа) сообщить(<<?>>аа); (Проверка: Сервер) |
||||||||||||||||
144
dezss
11.05.20
✎
10:27
|
(143) + на клиенте то же самое
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5869,8)}: Переменная не определена (аа) пока <<?>>аа < 10 цикл (Проверка: Тонкий клиент) {ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5870,14)}: Переменная не определена (аа) сообщить(<<?>>аа); (Проверка: Тонкий клиент) |
||||||||||||||||
145
dezss
11.05.20
✎
10:27
|
Может у тебя аа объявлена в качестве переменной модуля или реквизита формы?
|
||||||||||||||||
146
Serginio1
11.05.20
✎
10:59
|
(137) Ты не читаешь, что я пишу. По твоему комментарии не нужны? Они тоже засоряют код?
По поводу докуметации. Специально посмотрел УТ и очень редко документируется код // Процедура - Проверка возможности внесения избытка в накладную // // Параметры: // Акт - ДокументОбъект - Текущий акт // ИмяРегистра - Строка - Имя регистра Заказ, соответствующий типу накладной используемой в акте // ОписаниеМетаданных - Структура - Описание соответствий имен полей в акте и накладной, служебные признаки // Отказ - Булево - // Процедура ПроверкаВозможностиВнесенияИзлишкаВНакладную(Акт, ИмяРегистра, ОписаниеМетаданных, Отказ) Экспорт Не во всех общих модулях документируется код. А ты документируешь? |
||||||||||||||||
147
Serginio1
11.05.20
✎
11:10
|
Мне вот интересно как пойдет развитие Вэб клиента в 1С с учетом развития WebAssembly. Судя по async awaite они пошли по пути без WebAssembly
На примере Blazor https://metanit.com/sharp/blazor/1.1.php Суть Блазора в том, При построении и запуске приложения Blazor WebAssembly файлы с кодом C# и Razor компилируются в сборки .NET. Затем Blazor WebAssembly (а если точнее скрипт blazor.webassembly.js) загружает среду выполнения .NET, сборки и их зависимости и настраивает среду выполнения .NET для выполнения сборок. Посредством взаимодействия с JavaScript фреймворк Blazor WebAssembly может обращаться к DOM и API браузера. То есть при написании кода мы не используем JavaScript (но можем). Пишем полностью на C#. На данный момент блазор интерпритирует байт код. Но к ноябрю обещают AOT компиляцию. Прелесть блазора еще и в том, что можно писать и мобильные приложения https://devblogs.microsoft.com/aspnet/mobile-blazor-bindings-experiment/ Используя единую кодовую базу, но нативные компоненты |
||||||||||||||||
148
Конструктор1С
11.05.20
✎
11:45
|
(146) а причем тут комментарии? Комментарии нужны, но только к месту. Комментарии тоже бывают "мусорными"
http://www.proglibs.appspot.com/CleanCode.html (смотри раздел C) хороший код самодокументирующийся. Когда код хорошо написан, потребность в комментировании отпадает, имена переменных и методов сами "расскажут", что и для чего они делают. Комментарии становятся вспомагательным средством |
||||||||||||||||
149
Конструктор1С
11.05.20
✎
12:21
|
На самом деле сделать аннотации для типов процедур можно и без фирмы 1с. Это вполне себе позволяет EDT. В неё зашита такая мощная штука, как XText. На технологии XText организован редактор кода встроенного языка и языка запросов 1с. Берём ту же процедуру:
//@Акт = ДокументОбъект //@ИмяРегистра = Строка //@ОписаниеМетаданных = Структура //@Отказ = Булево Процедура ПроверкаВозможностиВнесенияИзлишкаВНакладную(Акт, ИмяРегистра, ОписаниеМетаданных, Отказ) Экспорт Соответственно: @ИмяПараметра = ТипЗначенияПараметра Скормить подобное движку XText как два пальца об асфальт. А дальше уже можно заставить контекстную подсказку считать, что входные параметры имеют такой-то тип, и работать с ними как с созданными внутри процедуры значениями определенного типа. При этом можно пойти ещё дальше, и для коллекций значений указывать структуру полей //@СтруктураПараметров = Структура {Свойство1 = Строка, Свойство2 = Строка, Свойство3 = Число} //@ТаблицаДанных = ТаблицаЗначений {Колонка1, Колонка2, Колонка3 = СправочникСсылка.Номенклатура} Процедура МояПроцедура(СтруктураПараметров , ТаблицаДанных) Соответственно: {ИмяПоля1 [= ТипЗначенияПоля1], ИмяПоля2 [= ТипЗначенияПоля2]} если так сделать, то вообще песня получится |
||||||||||||||||
150
Конструктор1С
11.05.20
✎
12:33
|
Впринципе, информацию можно было бы брать и из существующих комментариев, они тоже нормально структурированы
// ИмяПараметра - ТипЗначенияПараметра - текстовое описание даже в обычном конфигураторе сделали подсказку при вводе вызова процедуры. Непонятно что разработчиков остановило, чтобы пойти дальше и научить работать контекстную подсказку с входящими параметрами методов как со значениями определенных типов, если тип значения указан в комментарии |
||||||||||||||||
151
Serginio1
11.05.20
✎
13:22
|
(150) Ну вот я показывал как в TS документируют
https://github.com/microsoft/tsdoc /** * Returns the average of two numbers. * * @remarks * This method is part of the {@link core-library#Statistics | Statistics subsystem}. * * @param x - The first input number * @param y - The second input number * @returns The arithmetic mean of `x` and `y` * * @beta */ public static getAverage(x: number, y: number): number { return (x + y) / 2.0; } Это решило бы проблему не только подсказок для интеллисенсе, но и типизации для 1С /// Возвращает среднее двух чисел. // // @remarks // This method is part of the {@link core-library#Statistics | Statistics subsystem}. // // @параметр x:Число - Первое число // @параметр y:Число - Второе число // @возврат:Число Среднее арифметическое `x` и `y` /// Функция ПолучитьСреднее(x, y) возврат (x + y) / 2; КонецФункции Их много чего останавливает. Ввести тип в параметрах тоже не проблема. Что думаешь по 147? |
||||||||||||||||
152
Конструктор1С
11.05.20
✎
14:33
|
(151) думаю, если и дойдут до такого, то ооочень нескоро. Фирма 1с как-то инертна на развитие средств разработки. Множество возможностей лежат на поверхности, а они тратят кучу сил и денег нп всякую ерунду. Написали эти СЛАУ, которые в 99,9% задач нафиг не нужны, а ряд простых, но удобных вещей всё никак не могут добавить. Тот же визуальный конструктор таблицы значений/ дерева значений так и не добавили, хотя им много раз предлагали, при этом его даже средствами самой 1с сделать как два пальца об асфальт
|
||||||||||||||||
153
Serginio1
11.05.20
✎
15:10
|
(152) Полностью согласен!
Ну они бы могли в ВК позволить возвращать не только простые типы, но и объект ВК http://catalog.mista.ru/public/548701/ Это бы позволило создавать нативные ВК аналогично комовским. Почему не хотят, не знаю. Наверное, тогда не нужны были бы СЛАУ и прочие доморощенные компоненты. Кстати они уже сколько лет пилят EDT? Майкрософт уже давно кроссплатформенный Visual Code используют. Тот же C#, TS, Kotlin и прочие языки, да и тот же JS бурно развиваются. 1С к сожалению застряло. А есть куча вещей упрощающие разработку. Ну надеюсь? что Async Awaite сдвинет язык в лучшую сторону. |
||||||||||||||||
154
Конструктор1С
11.05.20
✎
16:45
|
(153) а я ещё жду, когда в платформе появится удобная многопоточность, а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий
|
||||||||||||||||
155
ДенисЧ
11.05.20
✎
16:50
|
(152) "Тот же визуальный конструктор таблицы значений"
Вообще-то он есть давно. Или я не понимаю, что ты имеешь в виду |
||||||||||||||||
156
ДенисЧ
11.05.20
✎
16:50
|
(154) ЗАчем в бухгалтерии многопоточность?
И что для тебя - нормальная удобная? |
||||||||||||||||
157
Serginio1
11.05.20
✎
17:15
|
(156) Ну например сделать одновременно несколько долгоиграющих запроса в базу данных
|
||||||||||||||||
158
ДенисЧ
11.05.20
✎
17:18
|
(157) А что, сейчас ты не можешь? Я могу в своей древней ка1 сейчас делать...
Или дотнет разжижает мозги? |
||||||||||||||||
159
Serginio1
11.05.20
✎
17:27
|
(157) Ты спросил, "ЗАчем в бухгалтерии многопоточность? "
Я ответил. Конструктор отметил "а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий" Ты лучше читай внимательнее. |
||||||||||||||||
160
MyNick
11.05.20
✎
17:34
|
(44) "до меня так и не дошло - что такое указатели и нафига вообще они нужны )))"
Я тоже помню когда начинал после бейсика с С++ играться, не понимал, нафиг это усложнение. Указатель какой-то, типа чем переменные не нравятся. И только когда начал осваивать 1С и увидел ЗНАЧ, понял, что в 1С все переменные (без ЗНАЧ) - это указатели и сразу понял их смысл в С++. |
||||||||||||||||
161
Serginio1
11.05.20
✎
17:37
|
(160) Не нужно путать ссылки и указатели https://teccxx.neocities.org/mx1/pointers.html
|
||||||||||||||||
162
ДенисЧ
11.05.20
✎
17:39
|
(159) Конструктор может хоть вприсядку - и напляшется, и нае......
А запустить 10 фоновых заданий - запросто. А что, в других языках не надо отслеживать состояние запущенных процессов? |
||||||||||||||||
163
strange2007
11.05.20
✎
17:47
|
(113) Это зачем?
Если ложь тогда тз= новый ТаблицаЗначений; КонецЕсли Нафига такое писать то? Это что бы запутались другие? Может не надо? Вообще пофиг на типизацию. Что на ассемблере, что на 1С всегда одни и те же проблемы - делаешь красиво, а кто-то возьмёт и скажет, что гадость)))) Что такое типизация? |
||||||||||||||||
164
Serginio1
11.05.20
✎
17:50
|
(162) Еще для особо одаренных. Вопрос был " ЗАчем в бухгалтерии многопоточность? "
Фоновые задания это и есть многопоточность! >>А что, в других языках не надо отслеживать состояние запущенных процессов? В других языках процесс это процесс https://docs.microsoft.com/ru-ru/dotnet/api/system.diagnostics.process?view=netcore-3.1 А используются Task задачи или Thread потоки. Можно запустить поток или задачу и не дожидаться его выполнения. Можно через awaite, WhenAll, WhenAny, ContinueWith и куча шаблонов https://docs.microsoft.com/ru-ru/dotnet/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern посмотри Операции с чередованием и AsyncProducerConsumerCollection |
||||||||||||||||
165
ДенисЧ
11.05.20
✎
17:54
|
(164) "Фоновые задания это и есть многопоточность"
Вот и спрашиваю - зачем? |
||||||||||||||||
166
ДенисЧ
11.05.20
✎
17:55
|
(164) "Можно запустить поток или задачу и не дожидаться его выполнения."
А тебя кто-то заставляет в 1с дожидаться завершения фонового задания? Или запрещает его дождаться? Для вас, баранов (с) уже асинк приделали, а вы недовольны... |
||||||||||||||||
167
ДенисЧ
11.05.20
✎
17:55
|
(164) "Можно запустить поток или задачу и не дожидаться его выполнения.
Можно через awaite, WhenAll, WhenAny, ContinueWith и куча шаблонов" Ремни уже можно пристёгивать? Ну, чтобы со всей ******й взлететь попытаться? |
||||||||||||||||
168
Serginio1
11.05.20
✎
18:05
|
(165) То есть ты не читатель? Конструктору в этом же посте и написал для
>>> а я ещё жду, когда в платформе появится удобная многопоточность, а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий Тогда и задавай вопрос правильно! Что касается фоновых заданий, то они все выполняются на сервере, иногда нужно просто послать несколько запросов на какой ни будь вэб сервис или еще куда без участия сервера. Сервер тоже может быть загружен. Ну и тд (166) Научиcь правильно задавать вопросы!!! >>> А что, в других языках не надо отслеживать состояние запущенных процессов? (167) В других языках это все есть и с удовольствием пользуются. Ну рожденный ползать ... |
||||||||||||||||
169
ДенисЧ
11.05.20
✎
18:13
|
(168) Послать кого-то с тонкого клиента? Или с веб-клиента? Ннуну...
|
||||||||||||||||
170
ДенисЧ
11.05.20
✎
18:13
|
(168) "Ну рожденный ползать" - продолжай, а я пока полетел.
|
||||||||||||||||
171
Serginio1
11.05.20
✎
18:20
|
(169) Угу при этом сервер находится за тридевять земель. Послать асинхронный вэб или HTTP запрос необязательно через сервер. Это как то сильно накладно.
Кстати про Async Awaite https://wonderland.v8.1c.ru/blog/uluchsheniya-v-sintaksise-yazyka-1s-dlya-raboty-s-asinkhronnymi-funktsiyami/ Они как раз собираются делать для Вэб клиента "Спустя некоторое время после появления в платформе 1С:Предприятие веб-клиента возникла необходимость в поддержке асинхронной модели работы, которая в то время появилась в браузерах. Эта поддержка была реализована с использованием типа ОписаниеОповещения (NotifyDescription) и новых на то время асинхронных процедур. В версии 8.3.18 внесены изменения для того, чтобы упростить работу с асинхронностью. В основе лежит идея, что разработчику проще и понятнее видеть код, состоящий из набора последовательно выполняемых операций и содержащий минимальное количество деталей, не связанных напрямую с решаемой им задачей. И сделанные изменения направлены на то, чтобы сделать код, имеющий дело с асинхронностью максимально подобным обычному последовательному коду. " И собираются они кстати вводить и WhenAll, WhenAny, ContinueWith (170) Приятного полета! |
||||||||||||||||
172
ptiz
11.05.20
✎
18:21
|
Знаю только 1С и плохо понимаю про что речь :)
В целом, я за то, чтобы у одной и той же переменной типы не менялись "по ходу пьесы" - будет меньше путаницы. Но вопросы сходу: 1) Делаем процедуру в расчете, что в переменная - составная из двух типов документов. А потом добавляется третий, который вполне нормально "съедается" этой процедурой без её изменения. Тогда в случае статической типизации - нам переписывать эту процедуру? 2) Работа с внешними компонентами и COM-объектами: не получим ли кучу новых проблем при получении ответов от них или передачи им параметров? Что такое типизация? |
||||||||||||||||
173
Serginio1
11.05.20
✎
18:26
|
(172)
1. смотри 113. Тип может быть составным Процедура метод(тз:ТаблицаЗначений|ДругойТип) 2. Нужны интерфейсы для описания утиной типизации https://metanit.com/web/typescript/3.3.php Ну всегда можно переменную и без типа . Будешь как и раньше работать Процедура метод(тз) |
||||||||||||||||
174
strange2007
12.05.20
✎
04:10
|
(172) >> В целом, я за то, чтобы у одной и той же переменной типы не менялись "по ходу пьесы" - будет меньше путаницы.
В 1С-е не меняются типы по ходу пьесы. Переменную продумываешь от и до и она прям статичная из статичных. Очень удобно, между прочим. Хотя нет, часто начинающие программисты, перешедшие с других языков, пытаются умышленно всех запутать, создавая фигпойми какие переменные, типа однобуквенные или из непечатных символов. Но они то быстро переучиваются |
||||||||||||||||
175
Конструктор1С
12.05.20
✎
04:44
|
(156) в бухгальерии может и не за чем. А вот в корпоративном сегменте, куда фирма 1с активно стремится, многопоточность необходима
|
||||||||||||||||
176
Sserj
12.05.20
✎
04:45
|
Хмык. Да о чем вообще спор. Каждый сам натыкался и матерился на грабли из за отсутствия жесткой типизации в конфах от самой 1С. Элементарно 1С переименовала реквизиты объектов и побежали рыть свои поделки в поисках где же оно использовалось. А был бы жестко прописанный интерфейс проверка синтаксиса уже сама бы все показала.
(172) "..Тогда в случае статической типизации - нам переписывать эту процедуру?.." Тогда нужно требовать на входе не определенный класс а интерфейс. К примеру процедура принимает нечто с интерфейсом ТоварныеДокументы, который требует чтобы объект содержал к примеру табличную часть в которой обязана быть Номенклатура (не товар, не ТМЦ а именно Номенклатура) и Количество. |
||||||||||||||||
177
Конструктор1С
12.05.20
✎
04:50
|
(162) в других языках, где многопоточность идет "из коробки", нет такого замудрёного онанирования, как в 1с с распараллеливающимися фоновыми заданиями
|
||||||||||||||||
178
strange2007
12.05.20
✎
04:54
|
(177) Да фиг знает, фиг знает. Сама концепция многопоточности... сложноватая, что ли. Эти межпотоковые флаги-семафоры секас ещё тот. Там пока продумаешь логику, уже забываешь, что вообще хотел сделать. А в 1С всё просто, понятно и не затратно по времени. На пурике часто попадался на рассинхронизацию доступа к памяти. Оно поправимо, но, блин, долго же. В итоге не на 1С стараюсь делать однопоточные поделки, что бы было меньше шансов с глюками
|
||||||||||||||||
179
Конструктор1С
12.05.20
✎
07:34
|
(178) так в 1с секаса больше. Если в фоновое задание ещё можно послать данные, то из фонового данные получаются через одно место. Когда каждое фоновое задание возвращает порцию данных, а главный поток собирает эти порции воедино, то уровень изврата резко повышается. В той же Java есть возможность довольно удобной синхронизации потоков, плюс есть синхронизируемые коллекции, в которые разные потоки могут одновременно складывать данные
|
||||||||||||||||
180
Конструктор1С
12.05.20
✎
07:38
|
Yаверно немного неправильно выразился. В Java есть не просто синхронизируемые коллекции, а параллельные коллекции. Например:
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html |
||||||||||||||||
181
strange2007
15.05.20
✎
08:55
|
(179) Спорить можно сколько угодно, но мы говорим немного с разных колоколен. Например, на яве практически невозможно использовать видеопамять как хранилище данных на спектруме (который ZX), но это не значит, что ассемблер спека круче явы. Просто работая на яве мы придерживаемся тамошних рекомендаций. Работая на 1С мы придерживаемся так же разных правил, не ища проблем в стороне. А то мы так можем дойти до того, что молоток, это капец какая фиговая штука, потому что у него нет увеличительного стекла.
А теперь конкретный плюс 1С перед "взрослыми" языками: Любой механизм, более-менее заточенный под сервер и автономную работу, просто подсовываешь любому менеджеру ФЗ и оно работает. Криво-косо, но работает. Годами. На других же языках сразу вспоминаешь про разделяемые ресурсы и переписываешь часть логики, а потом ещё долго отлаживаешь работу. |
||||||||||||||||
182
Bro
15.05.20
✎
09:26
|
(181) Не знаю что вы там вспоминаете про разделяемые ресурсы, но в той же Java многопоточность достаточно простая. И в принципе обычных synchronized, read/write lock'ов и ConcurrentHashMap хватает обычно за глаза.
Хотя с многопоточностью все немного забывают про две проблемы: б) вы не можете хранить на сервере приложений данные из-за кластеризации серверов приложений (прозрачных механизмов в Java SE нет, только в надстройках аля Spring и EE) б) соединения к SQL серверам не многопоточны по определению (то есть если вы начали транзакцию придется работать с ней в одном потоке). Правда справедливости ради обе эти проблемы обходятся, но это все же существенно сужает область использования многопоточности. А вообще забавно, когда в одной ветке на полном серьезе обсуждают async-await (и вообще асинхронность / многопоточность на клиенте) как очень важную и полезную функцию для разработчика (хотя это уже очень низкий уровень), а в другом что многопоточность на сервере не нужна. Как это у людей в голове уживается - загадка. |
||||||||||||||||
183
strange2007
15.05.20
✎
09:54
|
(182) Идея в другом: На 1С я могу в фоне запустить практически любой автономный код, без переделок, тогда как на "крутых" языках решаешь те или иные задачи по синхронизации данных, прежде чем проделать тоже самое. Нет, если ява доросла до 1С, тогда конечно круто, но это же не реально. Ведь ява то ориентирована не на автоматизацию бизнеса, а для трупрограммеров и мечтательных заработков.
|
||||||||||||||||
184
Evg-lylyk
15.05.20
✎
10:12
|
Конечно 2, 1. Один фиг нужно писать описание функции где все расписывать
Чем больше работаешь с кодом тем больше страдаешь что типизации нет Статическая типизация |
||||||||||||||||
185
Вафель
15.05.20
✎
11:12
|
(182) просто в 1с два разных потока вообще не могут общаться (только через бд) вот и все
и это накладывает куда больше ограничений |
||||||||||||||||
186
Sserj
15.05.20
✎
11:19
|
(181)(183) Если честно и не смотря на всяческое уважение ты вот прям несешь какую то ахинею :)
Если ты на яве, на нете или хоть где то еще запускаешь потоки аля 1С, в которых по определению нет никаких разделяемых данных. А ведь в 1С их нет. То в любом языке тебе абсолютно все равно на какие то синхронизации. |
||||||||||||||||
187
strange2007
16.05.20
✎
13:01
|
(186) В этом и дело! В этом весь и цимус!!!!! На 1С-е ты не думаешь о связях между ФЗ, а на явах всяких только об этом и думаешь. Это как ООП - добавь в 1С крутейшие фичи ООП и бизнес взвоет от того, что вообще ничего не работает. Поэтому пока его нет в том виде, в котором требуют трупрограммеры, бизнесы радуются и поют серенады.
Попробуй рассуждать не как программер, а как человек, который понимает, что от циферок программы он получает баблище и поймёшь, что секс сишников и явистов тут ну совсем неуместен. Именно поэтому я и твержу, что с точки зрения денежных людей в 1С распараллеливание в мильёнтысячу раз круче, чем на яве. Хотя моё мнение в том, что фоновые задания, это вселенское зло. Вот прям нафиг бы они не сдались. Лучше бы их не было. Да-да, именно не было. Расписания и рег задания норм, а ФЗ фигня. Но я ими пользуюсь, потому что так велят создатели стандартных конф(((((( |
||||||||||||||||
188
Garykom
гуру
16.05.20
✎
13:44
|
(187) Чтобы заработало регламентное нужны как раз фоновые, которые оно порождает. Хотя бы одна штука на регламентное.
|
||||||||||||||||
189
strange2007
16.05.20
✎
19:02
|
(188) Это концепция 1С и она верная. Но я имел в виду немного другое. Мне было бы достаточно того, что какая-то фигня могла бы что-то запускать без человека. Если важно, то это можно называть рег. и фон. заданиями, но от текущей 1С-вской отличались бы тем, что ФЗ нельзя было бы пихать совсем везде и при отладке проходишь незабываемые квесты.
В общем надо забрать у 1С-ников возможность запускать расчёт ЗП в фоновом задании. И оборотку тоже забрать. И... А может мне просто не хватает нормальной отладки фоновых заданий? Надо бы подумать. Скорее всего причина негатива только в отладке |
||||||||||||||||
190
Garykom
гуру
16.05.20
✎
19:13
|
(189) "надо забрать у 1С-ников возможность запускать расчёт ЗП в фоновом задании. И оборотку тоже забрать. И..."
вернуться на 1С 7.7 |
||||||||||||||||
191
Aleksey
16.05.20
✎
19:14
|
(187) ФЗ, для эмитации скорости работы программы.
Раньше как было. Нажмешь формировать ОСВ и "ааа программа висит." А теперь по времени дольше, но нет белого экрана и эффекта что "программа зависла и ничего не работает". Так образом ФЗ это пыль в глаза, которая позволяет говорить, что наша программа настолько крутая что вы можете параллельно запускать 10 ОСВ и ждать вечность... |
||||||||||||||||
192
acht
16.05.20
✎
19:29
|
(191) > эмитации
Эмиттерами в коллектор, ага > Так образом ФЗ Ничем не отличается от запуска второй копии клиента и формирования ОСВ там. |
||||||||||||||||
193
strange2007
17.05.20
✎
09:43
|
(190) >> вернуться на 1С 7.7
Не-не-не, плюшек у восьмёрки больше и они вкуснее. На восьмёрке всё быстрее и гибче получается. Тут я со стороны разраба рассуждал (каюсь) А вообще, может быть всё просто и банально. 1С-ка же ни у кого ничего не забирает. Мы прям ждём альтернативу. Иногда просматриваем продукты. Ну хоть кто-то может сделать хоть что-то похожее хотя бы на 1С6? Я прям мечтаю о тех временах, когда, например, ява дорастёт до древней 1С. Это будет революция же |
||||||||||||||||
194
ДенисЧ
17.05.20
✎
09:45
|
(193) На фузину смотри. Там же всё отлично
|
||||||||||||||||
195
strange2007
17.05.20
✎
10:31
|
(194) Смотрели. Вот прям внимательно. Они нас послали с фырканьем, мол, за мелочёвку не хотим браться. Там сразу в лоб - давайте кучу мильонов рублей и мы подумаем несколько месяцев над вашим учётом, авось, что и выгорит.
В общем не катит фузина. |
||||||||||||||||
196
Serginio1
17.05.20
✎
11:06
|
(193) Написать Базу на EF небольшая проблема
http://catalog.mista.ru/public/402433/ Создать иерархию классов, использовать Linq. В С#90 обещают Дизъюнктное объединение void logInput(int|long|float input) Для кроссплатформенного UI есть Blazor https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/build-your-first-blazor-app?view=aspnetcore-3.1 https://devblogs.microsoft.com/aspnet/mobile-blazor-bindings-feb-2020-update/ И Xamarin.Forms. Проблема. Как на этом зарабатывать? У MS есть Microsoft Dinamics Axapta им конкурент не нужен. Другие берут более простуе инструменты типа linq2db https://github.com/linq2db/linq2db Ну и бодаться с 1С очень сложно. |
||||||||||||||||
197
Сияющий в темноте
17.05.20
✎
11:54
|
Во первых,писать как на ООП можно даже на ассемблере - просто имя обьекта в префикс функции и первый параметр-указатель на обьект.
Во-вторых,фоновые задания есть практически в любой системе,а вот взаимодействие с ними мало где нормально реализовано. В третьих,реально,написать можно что угодно и на чем угодно,если использовать мета язык-когда ты описываешь абстрактные функции,а уже транслятор переводит это в конечный язык,но дьяаол в делалях-реализации интерфейса,где это все вылазит боком. При желании,весь код конфигурации на 1с можно перевести на Си аатоматом и работать только через Web-клиент в браузере,чтобы не писать интерфейс,но при каждой правке кода 1с придется делать пересборку. |
||||||||||||||||
198
Serginio1
17.05.20
✎
13:44
|
(197) Угу VMT (virtual override), интерфейсы, замыкания, дженерики, итераторы (yield), async awaite, Linq
Да да все это все ООП . И сильно упрощает написание кода. Да можно для базовых классов использовать конструкторы. Но нужны еще куча вспомогательных, а то и иерархии вспомогательных. Хорошо когда в одном классе можно разделять серверный и клиентский код (методы). Но еще лучше использовать серверные замыкания (где берутся локальные переменные ) сереализуется замыкание и отправляется на сервер. Все это можно сделать. Но ... |
||||||||||||||||
199
strange2007
17.05.20
✎
13:45
|
(196) >> Ну и бодаться с 1С очень сложно.
Очень и очень просто, но только на поле 1С. Ведь все как действуют? Делают систему для программистов. А 1С с чего начинала? Сделала систему для бизнеса. Вот и вся разница. Тонкая грань? Оказалось пропасть! Друзья, ну вспомните как Парус правительство продвигало и чем закончилось. Пыжились-тужились, в итоге больницы так или иначе смотрят в сторону 1С. |
||||||||||||||||
200
Serginio1
17.05.20
✎
14:32
|
(199) Я помню в 96 году 1С выпустила 7.0. Это был прорыв. До этого был фокпро и прочие локальные базы.
Потом они сделали франчайзи. И был у них жирок накопленный на бухгалтерии 5,6. |
||||||||||||||||
201
Провинциальный 1сник
17.05.20
✎
14:37
|
(189) У фоновых заданий ещё нехорошая черта есть, это получение результата через опрос. Что сразу резко снижает реактивность интерфейса и вносит фиксированную задержку в виде кванта опроса. Если бы фоновые задания отдавали результат через коллбэк-функцию, без опроса - было бы намного круче..
|
||||||||||||||||
202
ДенисЧ
17.05.20
✎
14:54
|
(195) А самим нарисовать?
|
||||||||||||||||
203
ДенисЧ
17.05.20
✎
14:56
|
(198) "замыкания, дженерики, итераторы (yield), async awaite"
К ООП это отношение имеет такое же, как носки моей бабушки |
||||||||||||||||
204
Serginio1
17.05.20
✎
15:47
|
(203) Внутренне это все классы, а твои носки бесклассовый элемент.
(201) Вот поэтому и хотят ввести async awaite |
||||||||||||||||
205
ДенисЧ
17.05.20
✎
15:49
|
(204) Если генерики и асинки - это класс - то мои носки - это тот ещё класс! Пролетарии!
|
||||||||||||||||
206
Serginio1
17.05.20
✎
15:57
|
(205) Конечно. ООП перево объектно ориентированное прораммирование.
генерики и асинки порождают классы из которых создаются объекты. И ими программируют. Твои носки может и являются объектом, только бесклассовым и если ты конечно умеешь использовать из в программировании то это будет уже ОНП (объектно носковое программирование) |
||||||||||||||||
207
Bro
17.05.20
✎
16:10
|
Генерики имеют прямое отношение к классам (строго говоря в C++ их косвенный аналог шаблоны именно классы и генерирует).
Все остальное да не имеет (замыкания можно конечно если сильно захотеть подогнать под логику классов и наследования, но это будет натягиванием совы на глобус). Хотя вопрос что подразумевать под классами. Вообще говоря это типы с наследованием / полиморфизмом. Но ООП ещё инкапсуляцию прицепом добавляет. Но даже с инкапсуляцией это перпендикулярно замыканиям, итераторам и async await. |
||||||||||||||||
208
ДенисЧ
17.05.20
✎
16:42
|
(206) "генерики и асинки порождают классы"
Уходи из шарпа, иди в смолтолк. Там всё - классы. Всё, как тебе мило. Там даже методов класса нет, все обмениваются сообщениями. Всё по канону. |
||||||||||||||||
209
ДенисЧ
17.05.20
✎
16:43
|
(206) "Твои носки может и являются объектом, только бесклассовым"
Это ты деклассированный. А мои носки являются экземляром нескольких классов сразу! Тебе такое и не снилось, в шарп множественное наследование завезли уже? |
||||||||||||||||
210
ДенисЧ
17.05.20
✎
16:44
|
(207) "строго говоря в C++ их косвенный аналог шаблоны именно классы и генерирует"
template func<T>(T a) { return a; } где тут класс? |
||||||||||||||||
211
Serginio1
17.05.20
✎
17:11
|
(210) шаблоны это не генерик. Суть шаблона это кодогенерация и в большинстве основана на перегрузке операторов.
В шарпе это отдельный класс. Общий для ссылочных типов и отдельных для вэлью типов. Что касается статических дженерик методов методов, то как бы там ни было они принадлежат классы. https://stackoverflow.com/questions/232535/how-do-i-use-reflection-to-call-a-generic-method в рефлекшине это выглядит так MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod)); MethodInfo generic = method.MakeGenericMethod(myType); generic.Invoke(this, null); |
||||||||||||||||
212
ДенисЧ
17.05.20
✎
17:15
|
(211) Когда вы говорите - такое ощущение, что вы бредите...
|
||||||||||||||||
213
Serginio1
17.05.20
✎
17:32
|
(212) Ну извини.А чего это вдруг на ВЫ? Я конечно не молод, но молод душою. Мой бред многие понимают. Да и суть не в этом.
Нужно ли это все в 1С? Я ушел из 1С по той причине, что программировать на нем стало не интересно. Не развивается язык. Но так как посвятил этому языку десятки лет, интересно как он развивается. Хотят ввести async awaite. Многие 1С ники не хотят. Хотя особо то и деваться некуда ибо в браузере они все асинхронные методы нужно вызывать через awaite. Посмотрим, что дальше будет. |
||||||||||||||||
214
ДенисЧ
17.05.20
✎
17:34
|
(213) "А чего это вдруг на ВЫ?"
Не заставляТЕ меня картинку присылать. А так - на РСДН читаю сообщения. И таки да, ощущение не проходит. |
||||||||||||||||
215
Serginio1
17.05.20
✎
17:47
|
(214) А Чё за картинка. Ну если, ты меня не понимаешь, это не значит, что что я говорю это бред. В том числе и на RSDN. И даже оценки ставят
http://rsdn.org/forum/dotnet/7719189.1 |
||||||||||||||||
216
ДенисЧ
17.05.20
✎
17:50
|
|||||||||||||||||
217
ДедМорроз
17.05.20
✎
18:43
|
Что мешает в 1с написать
Функция ИмяКласса_Конструктор() ТекущийОбъект=Предок1_Конструктор(); ОбъектДобавка=Предок2_Конструктор(); Объект_Скомбинировать(ТекущийОбъект,ОбъектДобавка); Возврат ТекущийОбъект; КонецФункции |
||||||||||||||||
218
Antonsis
17.05.20
✎
19:44
|
Динамическое в моем случае подходит намного больше, попробуйте оба варианта, а там сделаете выбор)
|
||||||||||||||||
219
strange2007
18.05.20
✎
08:25
|
(217) А что такое "Предок1_Конструктор()" и "Предок2_Конструктор()"?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |