Вход | Регистрация
    1  2  3   

Динамическая или статическая типизация?

Динамическая или статическая типизация?
Я
   Ненавижу 1С
 
08.05.20 - 14:09
1. Статическая типизация43% (10)
4. Мне все равно22% (5)
3. Динамическая типизация17% (4)
2. Смешанная типизация9% (2)
5. Что такое типизация?9% (2)
Всего мнений: 23

Навеяло статьей
https://habr.com/ru/post/500926/

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

Ваше мнение по данному вопросу?
   Вафель
 
101 - 09.05.20 - 11:20
Если есть составные типы то не спасет
Тип = ТипА или типВ
Например функция(докпартия, докреализация)
Ну или придётся описывать все возможные варианты
   Конструктор1С
 
102 - 09.05.20 - 12:33
(100) это так:

Есть метод foo(ClassA param), а у тебя ClassB, и он никак не связан с ClassA, но заведомо подходит по структуре для передачи в метод foo(). Чтобы выкрутиться, придется либо создавать костыль, преобразующий ClassB в ClassA, либо перегружать метод foo(), чтобы он мог принимать ClassB
   ДенисЧ
 
103 - 09.05.20 - 12:36
(99) "в сложном чужом проекте класса УПП"
"в комментах к процедуре есть описание всех ее параметров"

ЁжЭг... Ты не видел нормально-сложных проектов "класса УПП", вероятно...
   H A D G E H O G s
 
104 - 09.05.20 - 13:05
(103) Я видел некоторое дерьмо. В котором код нужно было трассировать на реальных данных, чтобы понять, что хотел сказать автор.
Но я говорю про УПП.
   ДенисЧ
 
105 - 09.05.20 - 13:10
(104) А как же комментарии?
   Garykom
 
106 - 09.05.20 - 13:27
(104) А еще бывает некоторое дерьмо где даже трассировка кода не помогает на реальных данных.
Ибо в режиме трассировки оно не так работает когда несколько фоновых одновременно в одни данные вцепляются.
   Вафель
 
107 - 09.05.20 - 14:32
отладка гонки на многопотоке это вообще боль. только чистая интуиция
   Сияющий в темноте
 
108 - 09.05.20 - 18:14
(102) это когда поля класса достаются по имени и исполнитель ничего не знает о стуктуре класса,кроме как доступ к методам и свойствам по имени-тогда что-то подменить можно.
а когда у вас доступ по номеру,то сделать другой обьект очень сложно.
   Сияющий в темноте
 
109 - 09.05.20 - 18:21
(107) вполне можно и многопоток отлаживать,специально создавая условия и состояния.
   rphosts
 
110 - 09.05.20 - 18:21
(92) т.е. ты утверждаешь, что жёсткое определение типов значений переменных и возвращаемого вызовами это не статическая типизация?
   Вафель
 
111 - 09.05.20 - 19:08
(110) я утверждаю что в статике вполне может быть приведение типов
   Вафель
 
112 - 09.05.20 - 19:09
неявное  причем
   Serginio1
 
113 - 09.05.20 - 19:12
(99) Смотри на TypeScript и аннотацию типа https://metanit.com/web/typescript/2.4.php
Ты можешь указать несколько поддерживаемых типов
let id : number | string;
id = "1345dgg5";
console.log(id);// 1345dgg5

id = 234;
console.log(id);  // 234


Ну и ты всегда можешь привести к any любой тип
https://metanit.com/web/typescript/2.5.php

Смысл типизации это прежде всего интеллисенс контроль используемых типов. В 1С часто используют конструкции

Процедура метод(тз)
Если ложь тогда
 тз= новый ТаблицаЗначений;
КонецЕсли

 и используют ТЗ как ТаблицуЗначений
Но проще использовать

Процедура метод(тз:ТаблицаЗначений)

если может принимать несколько типов

Процедура метод(тз:ТаблицаЗначений|ДругойТип)

Ну и приведение типв 

тз2=тз как ТаблицаЗначений
Если тз2<>неопределено Тогда

Но зато при вызове метод(тз:ТаблицаЗначений|ДругойТип) ты кроме ТаблицаЗначений или ДругойТип уже не подсунешь
либо приводи к нужному типу
 Ну и в разных языках есть сравнение по образцу
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/switch-expression

Что удобно работать с множеством тивов и значений
   rphosts
 
114 - 09.05.20 - 19:16
(111) возможно, но сам язык уже не способствует этому
   ILM
 
115 - 10.05.20 - 08:17
1С наше всё, остальные могут идти в другие языки. Тут никто никого за типа не держит.

3. Динамическая типизация
   ДенисЧ
 
116 - 10.05.20 - 08:32
(113) "
Если ложь тогда
 тз= новый ТаблицаЗначений;
КонецЕсли"

За такое - стрелять надо.
   ДенисЧ
 
117 - 10.05.20 - 08:33
(113) "Процедура метод(тз:ТаблицаЗначений)"
Переходи на 77, там такое есть.
   Надо работать
 
118 - 10.05.20 - 10:15
(116) сильное заявление.

?
   Конструктор1С
 
119 - 10.05.20 - 10:20
(115) предопределенные методы принимают только значения определенных типов, поля прикладных объектов имеют строго определенные типы. Так что в 1с скорее смешанная типизация
   Serginio1
 
120 - 10.05.20 - 10:38
(117) Я и на ней тоже. Вернее это 1С++ и OpenConf

https://www.script-coding.com/Intellisense.html
Перем ТЗ,//:ТаблицаЗначений

СЗ;//:СписокЗначений

Перем Сам;// : Контекст

//тип будет определён из контекста, например, для классов 1С++
//(для получения списка методов и свойств класса после точки)

//"Контекст" можно использовать и для типов функций (см. примеры чуть ниже)
//***********************************************

Процедура ТестПроц (СЗ2, Контр, МД, Таб)
    // СЗ2 //:СписокЗначений

    // Контр //:Справочник.Контрагенты

    // МД //:Метаданные

    // Таб //:Таблица

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


Опять же 1С может пойти по пути TypeScript. Там анотация типа она нужна только во время написания кода. Только для интеллисенсе и предупреждений.
Хочешь пользуйся, хочешь нет. Но многие используют TypeScript вместо JavaScript
   Serginio1
 
121 - 10.05.20 - 10:40
(116) И что такого плохого сделал, что ты хочешь меня расстрелять? Как хочу так и пишу. Если 1С не дает инструментов, нужно придумать их самому.
   H A D G E H O G s
 
122 - 10.05.20 - 11:07
(116) я делаю, иногда тоже самое но через препроцессор, за что тут стрелять?
   Конструктор1С
 
123 - 10.05.20 - 12:33
(121)(122) ну может не стрелять, но за мусорный, отвлекающий код а-та-та по рукам
   ILM
 
124 - 10.05.20 - 13:34
(119) Если рассматривать предопределенные методы, то все они привязаны к типовым объектам метаданных и скорее являются функциями этих типов/классов, которые определяют его поведение.
   Serginio1
 
125 - 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) За препроцессор - не надо.
Но нагружать интерпретатор лишним инструкциями...
   Serginio1
 
128 - 10.05.20 - 17:13
   Конструктор1С
 
129 - 10.05.20 - 17:15
(125) воспользовался контекстной подсказкой и грохни этот мусорный код. Не заставляй читающих твой код тратить время и интеллектуальные ресурсы на чтение подобных "произведений"
   Serginio1
 
130 - 10.05.20 - 17:15
(127) Ну интерприратор обрабатывает байт код. А в нормальных компиляторах недостижимый код и не попадает. Просто редко пишу на 1С.
Замени "Tckb" на препроцессор
 
 Рекламное место пустует
   ДенисЧ
 
131 - 10.05.20 - 17:18
(129) Хорошо, уговорил. Теперь я больше не буду читать твои посты.
   Serginio1
 
132 - 10.05.20 - 17:18
Сейчас речь о том, что бы эту хрень вообще не писать! Я сейчас редко пишу на 1С и ооочень рад этому.
Но часто приходится его читать и вот если бы был такой "Мусорный код" я бы был только рад". Проще с кодом разбираться.
Особенно в 1С.
На вкус и цвет ...
   Serginio1
 
133 - 10.05.20 - 17:19
132->129
   Конструктор1С
 
134 - 10.05.20 - 17:24
(132) проще с кодом разбираться когда у переменных и методов хорошие, лаконичные имена, четко описывающие их предназначения, а не когда там лишний мусорный код
   Serginio1
 
135 - 10.05.20 - 18:48
(134) Еще раз для когo мусор, а для другого это клад. Еще и комментариев побольше с описанием параметров методов и возвращаемых значений.
Проблема опять же не в этом. А в том, что в 1С нет аннотации типов. А при аннотации не только имена переменных, но и тип переменных самодокументируются.
Например в том же TypeScript для публичных методов комментируется сам метод, параметры и возвращаемое значение. В коде 1С этому следуют не всегда.
   Serginio1
 
136 - 10.05.20 - 20:59
   Конструктор1С
 
137 - 11.05.20 - 07:52
(135) не обманывайся. Во-первых у тебя на ровном месте лишняя точка принятия решения (конструкция Если), а чем больше точек принятия решения, тем сложнее для восприятия код. Во-вторых такая конструкция заведомо вынуждает несколько раз побегать глазами ввех-вниз, прежде чем станет понятно, зачем оно было надо и влияет ли оно на логику процедуры. Эдакий интеллектуальный мартышкин труд. Очевидно, ты никогда не занимался командной разработкой, поэтому и не знаешь ценности хорошего кода и уродливости таких вот сорных вставок
   Вафель
 
138 - 11.05.20 - 10:02
конечно одно если аардинально портит производительность
   Вафель
 
139 - 11.05.20 - 10:03
и цикломатическая сложность прям зашкаливает
   ДенисЧ
 
140 - 11.05.20 - 10:06
   dezss
 
141 - 11.05.20 - 10:14
(126) Как это не обязательное объявление?
Объявление обязательное, в вот строгой типизации нет.
   ДенисЧ
 
142 - 11.05.20 - 10:19
(141) Где это в 1с обязательное объявление переменных?

Напиши
Процедура а()
  пока аа < 10 цикл
    сообщить(аа);
  конецЦикла;
КонецПРоцедуры

И 1с тебе вообще ни слова ни скажет. Пока не запустишь...
   dezss
 
143 - 11.05.20 - 10:25
(142) Написал
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5869,8)}: Переменная не определена (аа)
  пока <<?>>аа < 10 цикл (Проверка: Сервер)
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5870,14)}: Переменная не определена (аа)
    сообщить(<<?>>аа); (Проверка: Сервер)
   dezss
 
144 - 11.05.20 - 10:27
(143) + на клиенте то же самое
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5869,8)}: Переменная не определена (аа)
  пока <<?>>аа < 10 цикл (Проверка: Тонкий клиент)
{ВнешняяОбработка.ВнешняяОбработка1_.Форма.Форма.Форма(5870,14)}: Переменная не определена (аа)
    сообщить(<<?>>аа); (Проверка: Тонкий клиент)
   dezss
 
145 - 11.05.20 - 10:27
Может у тебя аа объявлена в качестве переменной модуля или реквизита формы?
   Serginio1
 
146 - 11.05.20 - 10:59
(137) Ты не читаешь, что я пишу. По твоему комментарии не нужны? Они тоже засоряют код?
По поводу докуметации. Специально посмотрел УТ и очень редко документируется код
// Процедура - Проверка возможности внесения избытка в накладную

//
// Параметры:

//  Акт                     - ДокументОбъект     - Текущий акт
//  ИмяРегистра             - Строка             - Имя регистра Заказ, соответствующий типу накладной используемой в акте

//  ОписаниеМетаданных     - Структура         - Описание соответствий имен полей в акте и накладной, служебные признаки
//  Отказ                 - Булево             - 

//
Процедура ПроверкаВозможностиВнесенияИзлишкаВНакладную(Акт, ИмяРегистра, ОписаниеМетаданных, Отказ) Экспорт

Не во всех общих модулях документируется код. А ты документируешь?
   Serginio1
 
147 - 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/
Используя единую кодовую базу, но нативные компоненты
   Конструктор1С
 
148 - 11.05.20 - 11:45
(146) а причем тут комментарии? Комментарии нужны, но только к месту. Комментарии тоже бывают "мусорными"

http://www.proglibs.appspot.com/CleanCode.html
(смотри раздел C)

хороший код самодокументирующийся. Когда код хорошо написан, потребность в комментировании отпадает, имена переменных и методов сами "расскажут", что и для чего они делают. Комментарии становятся вспомагательным средством
   Конструктор1С
 
149 - 11.05.20 - 12:21
На самом деле сделать аннотации для типов процедур можно и без фирмы 1с. Это вполне себе позволяет EDT. В неё зашита такая мощная штука, как XText. На технологии XText организован редактор кода встроенного языка и языка запросов 1с. Берём ту же процедуру:

//@Акт = ДокументОбъект    

//@ИмяРегистра = Строка
//@ОписаниеМетаданных = Структура

//@Отказ = Булево
Процедура ПроверкаВозможностиВнесенияИзлишкаВНакладную(Акт, ИмяРегистра, ОписаниеМетаданных, Отказ) Экспорт

Соответственно:
@ИмяПараметра = ТипЗначенияПараметра

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

//@СтруктураПараметров = Структура {Свойство1 = Строка, Свойство2 = Строка, Свойство3 = Число}

//@ТаблицаДанных = ТаблицаЗначений {Колонка1, Колонка2, Колонка3 = СправочникСсылка.Номенклатура}
Процедура МояПроцедура(СтруктураПараметров , ТаблицаДанных)

Соответственно:
{ИмяПоля1 [= ТипЗначенияПоля1], ИмяПоля2 [= ТипЗначенияПоля2]}
если так сделать, то вообще песня получится
   Конструктор1С
 
150 - 11.05.20 - 12:33
Впринципе, информацию можно было бы брать и из существующих комментариев, они тоже нормально структурированы
// ИмяПараметра - ТипЗначенияПараметра - текстовое описание


даже в обычном конфигураторе сделали подсказку при вводе вызова процедуры. Непонятно что разработчиков остановило, чтобы пойти дальше и научить работать контекстную подсказку с входящими параметрами методов как со значениями определенных типов, если тип значения указан в комментарии
   Serginio1
 
151 - 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?
   Конструктор1С
 
152 - 11.05.20 - 14:33
(151) думаю, если и дойдут до такого, то ооочень нескоро. Фирма 1с как-то инертна на развитие средств разработки. Множество возможностей лежат на поверхности, а они тратят кучу сил и денег нп всякую ерунду. Написали эти СЛАУ, которые в 99,9% задач нафиг не нужны, а ряд простых, но удобных вещей всё никак не могут добавить. Тот же визуальный конструктор таблицы значений/ дерева значений так и не добавили, хотя им много раз предлагали, при этом его даже средствами самой 1с сделать как два пальца об асфальт
   Serginio1
 
153 - 11.05.20 - 15:10
(152) Полностью согласен!
Ну они бы могли в ВК позволить возвращать не только простые типы, но и объект ВК
http://catalog.mista.ru/public/548701/

Это бы позволило создавать нативные ВК аналогично комовским. Почему не хотят, не знаю. Наверное, тогда не нужны были бы СЛАУ и прочие доморощенные компоненты.
Кстати они уже сколько лет пилят EDT? Майкрософт уже давно кроссплатформенный Visual Code используют.

Тот же C#, TS, Kotlin и прочие языки, да и тот же JS бурно развиваются. 1С к сожалению застряло. А есть куча вещей упрощающие разработку.
Ну надеюсь? что Async Awaite сдвинет язык в лучшую сторону.
   Конструктор1С
 
154 - 11.05.20 - 16:45
(153) а я ещё жду, когда в платформе появится удобная многопоточность, а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий
   ДенисЧ
 
155 - 11.05.20 - 16:50
(152) "Тот же визуальный конструктор таблицы значений"
Вообще-то он есть давно. Или я не понимаю, что ты имеешь в виду
   ДенисЧ
 
156 - 11.05.20 - 16:50
(154) ЗАчем в бухгалтерии многопоточность?
И что для тебя - нормальная удобная?
   Serginio1
 
157 - 11.05.20 - 17:15
(156) Ну например сделать одновременно несколько долгоиграющих запроса в базу данных
   ДенисЧ
 
158 - 11.05.20 - 17:18
(157) А что, сейчас ты не можешь? Я могу в своей древней ка1 сейчас делать...
Или дотнет разжижает мозги?
   Serginio1
 
159 - 11.05.20 - 17:27
(157) Ты спросил, "ЗАчем в бухгалтерии многопоточность? "
 Я ответил. 

Конструктор отметил
"а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий"

Ты лучше читай внимательнее.
   MyNick
 
160 - 11.05.20 - 17:34
(44) "до меня так и не дошло - что такое указатели и нафига вообще они нужны )))"

Я тоже помню когда начинал после бейсика с С++ играться, не понимал, нафиг это усложнение. Указатель какой-то, типа чем переменные не нравятся.
И только когда начал осваивать 1С и увидел ЗНАЧ, понял, что в 1С все переменные (без ЗНАЧ) - это указатели и сразу понял их смысл в С++.
 
 Рекламное место пустует
   Serginio1
 
161 - 11.05.20 - 17:37
(160) Не нужно путать ссылки и указатели https://teccxx.neocities.org/mx1/pointers.html
   ДенисЧ
 
162 - 11.05.20 - 17:39
(159) Конструктор может хоть вприсядку - и напляшется, и нае......
А запустить 10 фоновых заданий - запросто.
А что, в других языках не надо отслеживать состояние запущенных процессов?
   strange2007
 
163 - 11.05.20 - 17:47
(113) Это зачем?
Если ложь тогда
 тз= новый ТаблицаЗначений;
КонецЕсли

Нафига такое писать то? Это что бы запутались другие? Может не надо?

Вообще пофиг на типизацию. Что на ассемблере, что на 1С всегда одни и те же проблемы - делаешь красиво, а кто-то возьмёт и скажет, что гадость))))

5. Что такое типизация?
   Serginio1
 
164 - 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 и куча шаблонов"

Ремни уже можно пристёгивать? Ну, чтобы со всей ******й взлететь попытаться?
   Serginio1
 
168 - 11.05.20 - 18:05
(165)  То есть ты не читатель? Конструктору в этом же посте и написал для
>>> а я ещё жду, когда в платформе появится удобная многопоточность, а не это вот онанирование через запуск и ручное отслеживание множества фоновых заданий
 Тогда и задавай вопрос правильно!

Что касается фоновых заданий, то они все выполняются на сервере, иногда нужно просто послать несколько запросов на какой ни будь вэб сервис или еще куда без участия сервера.
Сервер тоже может быть загружен.
Ну и тд
(166) Научиcь правильно задавать вопросы!!!
>>> А что, в других языках не надо отслеживать состояние запущенных процессов?

(167) В других языках это все есть и с удовольствием пользуются. Ну рожденный ползать ...
   ДенисЧ
 
169 - 11.05.20 - 18:13
(168) Послать кого-то с тонкого клиента? Или с веб-клиента? Ннуну...
   ДенисЧ
 
170 - 11.05.20 - 18:13
(168) "Ну рожденный ползать" - продолжай, а я пока полетел.
   Serginio1
 
171 - 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) Приятного полета!
   ptiz
 
172 - 11.05.20 - 18:21
Знаю только 1С и плохо понимаю про что речь :)
В целом, я за то, чтобы у одной и той же переменной типы не менялись "по ходу пьесы" - будет меньше путаницы.

Но вопросы сходу:
1) Делаем процедуру в расчете, что в переменная - составная из двух типов документов. А потом добавляется третий, который вполне нормально "съедается" этой процедурой без её изменения. Тогда в случае статической типизации - нам переписывать эту процедуру?
2) Работа с внешними компонентами и COM-объектами: не получим ли кучу новых проблем при получении ответов от них или передачи им параметров?

5. Что такое типизация?
   Serginio1
 
173 - 11.05.20 - 18:26
(172)
1. смотри 113. Тип может быть составным
Процедура метод(тз:ТаблицаЗначений|ДругойТип)
2. Нужны интерфейсы для описания утиной типизации https://metanit.com/web/typescript/3.3.php

Ну всегда можно переменную и без типа . Будешь как и раньше работать
Процедура метод(тз)
   strange2007
 
174 - 12.05.20 - 04:10
(172) >> В целом, я за то, чтобы у одной и той же переменной типы не менялись "по ходу пьесы" - будет меньше путаницы.
В 1С-е не меняются типы по ходу пьесы. Переменную продумываешь от и до и она прям статичная из статичных. Очень удобно, между прочим. Хотя нет, часто начинающие программисты, перешедшие с других языков, пытаются умышленно всех запутать, создавая фигпойми какие переменные, типа однобуквенные или из непечатных символов. Но они то быстро переучиваются
   Конструктор1С
 
175 - 12.05.20 - 04:44
(156) в бухгальерии может и не за чем. А вот в корпоративном сегменте, куда фирма 1с активно стремится, многопоточность необходима
   Sserj
 
176 - 12.05.20 - 04:45
Хмык. Да о чем вообще спор. Каждый сам натыкался и матерился на грабли из за отсутствия жесткой типизации в конфах от самой 1С. Элементарно 1С переименовала реквизиты объектов и побежали рыть свои поделки в поисках где же оно использовалось. А был бы жестко прописанный интерфейс проверка синтаксиса уже сама бы все показала.
(172) "..Тогда в случае статической типизации - нам переписывать эту процедуру?.."
Тогда нужно требовать на входе не определенный класс а интерфейс. К примеру процедура принимает нечто с интерфейсом ТоварныеДокументы, который требует чтобы объект содержал к примеру табличную часть в которой обязана быть Номенклатура (не товар, не ТМЦ а именно Номенклатура) и Количество.
   Конструктор1С
 
177 - 12.05.20 - 04:50
(162) в других языках, где многопоточность идет "из коробки", нет такого замудрёного онанирования, как в 1с с распараллеливающимися фоновыми заданиями
   strange2007
 
178 - 12.05.20 - 04:54
(177) Да фиг знает, фиг знает. Сама концепция многопоточности... сложноватая, что ли. Эти межпотоковые флаги-семафоры секас ещё тот. Там пока продумаешь логику, уже забываешь, что вообще хотел сделать. А в 1С всё просто, понятно и не затратно по времени. На пурике часто попадался на рассинхронизацию доступа к памяти. Оно поправимо, но, блин, долго же. В итоге не на 1С стараюсь делать однопоточные поделки, что бы было меньше шансов с глюками
   Конструктор1С
 
179 - 12.05.20 - 07:34
(178) так в 1с секаса больше. Если в фоновое задание ещё можно послать данные, то из фонового данные получаются через одно место. Когда каждое фоновое задание возвращает порцию данных, а главный поток собирает эти порции воедино, то уровень изврата резко повышается. В той же Java есть возможность довольно удобной синхронизации потоков, плюс есть синхронизируемые коллекции, в которые разные потоки могут одновременно складывать данные
   Конструктор1С
 
180 - 12.05.20 - 07:38
Yаверно немного неправильно выразился. В Java есть не просто синхронизируемые коллекции, а параллельные коллекции. Например:
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
   strange2007
 
181 - 15.05.20 - 08:55
(179) Спорить можно сколько угодно, но мы говорим немного с разных колоколен. Например, на яве практически невозможно использовать видеопамять как хранилище данных на спектруме (который ZX), но это не значит, что ассемблер спека круче явы. Просто работая на яве мы придерживаемся тамошних рекомендаций. Работая на 1С мы придерживаемся так же разных правил, не ища проблем в стороне. А то мы так можем дойти до того, что молоток, это капец какая фиговая штука, потому что у него нет увеличительного стекла.
А теперь конкретный плюс 1С перед "взрослыми" языками: Любой механизм, более-менее заточенный под сервер и автономную работу, просто подсовываешь любому менеджеру ФЗ и оно работает. Криво-косо, но работает. Годами. На других же языках сразу вспоминаешь про разделяемые ресурсы и переписываешь часть логики, а потом ещё долго отлаживаешь работу.
   Bro
 
182 - 15.05.20 - 09:26
(181) Не знаю что вы там вспоминаете про разделяемые ресурсы, но в той же Java многопоточность достаточно простая. И в принципе обычных synchronized, read/write lock'ов и ConcurrentHashMap хватает обычно за глаза.

Хотя с многопоточностью все немного забывают про две проблемы: б) вы не можете хранить на сервере приложений данные из-за кластеризации серверов приложений (прозрачных механизмов в Java SE нет, только в надстройках аля Spring и EE) б) соединения к SQL серверам не многопоточны по определению (то есть если вы начали транзакцию придется работать с ней в одном потоке). Правда справедливости ради обе эти проблемы обходятся, но это все же существенно сужает область использования многопоточности.

А вообще забавно, когда в одной ветке на полном серьезе обсуждают async-await (и вообще асинхронность / многопоточность на клиенте) как очень важную и полезную функцию для разработчика (хотя это уже очень низкий уровень), а в другом что многопоточность на сервере не нужна. Как это у людей в голове уживается - загадка.
   strange2007
 
183 - 15.05.20 - 09:54
(182) Идея в другом: На 1С я могу в фоне запустить практически любой автономный код, без переделок, тогда как на "крутых" языках решаешь те или иные задачи по синхронизации данных, прежде чем проделать тоже самое. Нет, если ява доросла до 1С, тогда конечно круто, но это же не реально. Ведь ява то ориентирована не на автоматизацию бизнеса, а для трупрограммеров и мечтательных заработков.
   Evg-lylyk
 
184 - 15.05.20 - 10:12
Конечно 2, 1. Один фиг нужно писать описание функции где все расписывать
Чем больше работаешь с кодом тем больше страдаешь что типизации нет

1. Статическая типизация
   Вафель
 
185 - 15.05.20 - 11:12
(182) просто в 1с два разных потока вообще не могут общаться (только через бд) вот и все
и это накладывает куда больше ограничений
   Sserj
 
186 - 15.05.20 - 11:19
(181)(183) Если честно и не смотря на всяческое уважение ты вот прям несешь какую то ахинею :)
Если ты на яве, на нете или хоть где то еще запускаешь потоки аля 1С, в которых по определению нет никаких разделяемых данных.
А ведь в 1С их нет. То в любом языке тебе абсолютно все равно на какие то синхронизации.
   strange2007
 
187 - 16.05.20 - 13:01
(186) В этом и дело! В этом весь и цимус!!!!! На 1С-е ты не думаешь о связях между ФЗ, а на явах всяких только об этом и думаешь. Это как ООП - добавь в 1С крутейшие фичи ООП и бизнес взвоет от того, что вообще ничего не работает. Поэтому пока его нет в том виде, в котором требуют трупрограммеры, бизнесы радуются и поют серенады.
Попробуй рассуждать не как программер, а как человек, который понимает, что от циферок программы он получает баблище и поймёшь, что секс сишников и явистов тут ну совсем неуместен. Именно поэтому я и твержу, что с точки зрения денежных людей в 1С распараллеливание в мильёнтысячу раз круче, чем на яве.
Хотя моё мнение в том, что фоновые задания, это вселенское зло. Вот прям нафиг бы они не сдались. Лучше бы их не было. Да-да, именно не было. Расписания и рег задания норм, а ФЗ фигня. Но я ими пользуюсь, потому что так велят создатели стандартных конф((((((
   Garykom
 
188 - 16.05.20 - 13:44
(187) Чтобы заработало регламентное нужны как раз фоновые, которые оно порождает. Хотя бы одна штука на регламентное.
   strange2007
 
189 - 16.05.20 - 19:02
(188) Это концепция 1С и она верная. Но я имел в виду немного другое. Мне было бы достаточно того, что какая-то фигня могла бы что-то запускать без человека. Если важно, то это можно называть рег. и фон. заданиями, но от текущей 1С-вской отличались бы тем, что ФЗ нельзя было бы пихать совсем везде и при отладке проходишь незабываемые квесты.
В общем надо забрать у 1С-ников возможность запускать расчёт ЗП в фоновом задании. И оборотку тоже забрать. И... А может мне просто не хватает нормальной отладки фоновых заданий? Надо бы подумать. Скорее всего причина негатива только в отладке
   Garykom
 
190 - 16.05.20 - 19:13
(189) "надо забрать у 1С-ников возможность запускать расчёт ЗП в фоновом задании. И оборотку тоже забрать. И..."
вернуться на 1С 7.7
   Aleksey
 
191 - 16.05.20 - 19:14
(187) ФЗ, для эмитации скорости работы программы.
Раньше как было. Нажмешь формировать ОСВ и "ааа программа висит."
А теперь по времени дольше, но нет белого экрана и эффекта что "программа зависла и ничего не работает".
Так образом ФЗ это пыль в глаза, которая позволяет говорить, что наша программа настолько крутая что вы можете параллельно запускать 10 ОСВ и ждать вечность...
   acht
 
192 - 16.05.20 - 19:29
(191) > эмитации 
Эмиттерами в коллектор, ага

> Так образом ФЗ 
Ничем не отличается от запуска второй копии клиента и формирования ОСВ там.
   strange2007
 
193 - 17.05.20 - 09:43
(190) >> вернуться на 1С 7.7
Не-не-не, плюшек у восьмёрки больше и они вкуснее. На восьмёрке всё быстрее и гибче получается. Тут я со стороны разраба рассуждал (каюсь)

А вообще, может быть всё просто и банально. 1С-ка же ни у кого ничего не забирает. Мы прям ждём альтернативу. Иногда просматриваем продукты. Ну хоть кто-то может сделать хоть что-то похожее хотя бы на 1С6? Я прям мечтаю о тех временах, когда, например, ява дорастёт до древней 1С. Это будет революция же
   ДенисЧ
 
194 - 17.05.20 - 09:45
(193) На фузину смотри. Там же всё отлично
   strange2007
 
195 - 17.05.20 - 10:31
(194) Смотрели. Вот прям внимательно. Они нас послали с фырканьем, мол, за мелочёвку не хотим браться. Там сразу в лоб - давайте кучу мильонов рублей и мы подумаем несколько месяцев над вашим учётом, авось, что и выгорит.
В общем не катит фузина.
   Serginio1
 
196 - 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с придется делать пересборку.
   Serginio1
 
198 - 17.05.20 - 13:44
(197) Угу VMT (virtual override), интерфейсы, замыкания, дженерики, итераторы (yield), async awaite, Linq
Да да все это все ООП . И сильно упрощает написание кода.
Да можно для базовых классов использовать конструкторы. Но нужны еще куча вспомогательных, а то и иерархии вспомогательных.
Хорошо когда в одном классе  можно разделять серверный и клиентский код (методы). Но еще лучше использовать серверные замыкания (где берутся локальные переменные )
сереализуется замыкание и отправляется на сервер. Все это можно сделать.
Но ...
   strange2007
 
199 - 17.05.20 - 13:45
(196) >> Ну и бодаться с 1С очень сложно.
Очень и очень просто, но только на поле 1С. Ведь все как действуют? Делают систему для программистов. А 1С с чего начинала? Сделала систему для бизнеса. Вот и вся разница. Тонкая грань? Оказалось пропасть!
Друзья, ну вспомните как Парус правительство продвигало и чем закончилось. Пыжились-тужились, в итоге больницы так или иначе смотрят в сторону 1С.
   Serginio1
 
200 - 17.05.20 - 14:32
(199) Я помню в 96 году 1С выпустила 7.0. Это был прорыв. До этого был фокпро и прочие локальные базы.
Потом они сделали франчайзи. И был у них жирок накопленный на бухгалтерии 5,6.
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.