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

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

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

Ваше мнение по данному вопросу?
1 Dmitry1c
 
08.05.20
14:10
Не интересно...

Мне все равно
2 vde69
 
08.05.20
14:19
я за венгерскую нотацию
3 H A D G E H O G s
 
08.05.20
14:22
Все что нужно знать о статической типизации:
CurrentKeyByte := byte(PTR(THandle(Key) + j)^);

В С++ все еще жесче.

Динамическая типизация
4 H A D G E H O G s
 
08.05.20
14:27
Раздел описаний переменных может выглядеть и так:

var
  ТипВариантыГенерацииЗаданийНаСканирование: OleVariant;
  LocalDispatch: OleVariant;
  ЭтоГенерацияПоСтрокам: Boolean;
  ЭтоГенерацияПоОтветственнымИНоменклатуре: Boolean;
  ЭтоГенерацияПоОтветственным: Boolean;
  ЭтоГенерацияПоТипамМарок: Boolean;
  ВыборкаПервыйУровень, ВыборкаВторойУровень, ВыборкаТретийУровень: OleVariant;
  ОбходРезультатаЗапросаПоГруппировкам: OleVariant;
  НовоеЗадание, ВыборкаТовары, СтрокаЗадания: OleVariant;
  РезультатПроведения, АСФОбщегоНазначения, АСФОбщегоНазначенияКлиентСервер
    : OleVariant;
  ДокументМенеджер: OleVariant;
  ПредставлениеДокумента: String;
  ИменаКолонокСвертки: string;
  ТаблицаРезультата, ТаблицаСвертки, СтрокаСвертки, СтруктураПоиска,
    МассивСтрок, ТекущаяТаблицаРезультата: OleVariant;
  i, Count: integer;
  СоответствиеЗаданийПоРежимамСканированияDataMatrix: OleVariant;
  РежимСканирования: integer;
  ЭтоПерезаполнение: Boolean;
  ЗаданиеСсылка: OleVariant;
  ЗапрещенПодборАналоговСерии, СканироватьEANПриОтборе,
    ЕстьНемаркируемаяПродукция: Boolean;
  АСФПодсистемаТСДПереопределяемый, КолонкаТаблицыРезультата,
    СтрокаТаблицыРезультата, ВидыАПНеМаркируемые: OleVariant;
  МассивНоменклатур, МассивВидовЭлементовТМЦ, СоответствиеВидовАП,
    ТипалкВидыЭлементовТМЦ, СоответствиеВидовНоменклатуры: OleVariant;
  ЭтоКонфигурацияАСФ, ЭтоКонфигурацияСемействаКТ2000,
    ЭтоКонфигурацияСУчетомЕГАИС1С: Boolean;
  АСФОбщегоНазначенияПовторноеИспользование, СтрокаТаблицы, ВидПродукцииАП
    : OleVariant;
  РезультатПоиска, ВидНоменклатуры, ВидЭлементаТМЦ: OleVariant;
5 Garykom
 
08.05.20
14:31
(4) Это на какой дельфи написано что кириллица в именах переменных?
6 H A D G E H O G s
 
08.05.20
14:33
(5) На любой с поддержкой unicode, где то с середины 2000-[
7 Garykom
 
08.05.20
14:34
В целом статическая типизация лучше по многим причинам.
Ну банально часть переменных сразу можно память выделять а не извращаться с указателями.

Ошибок нубских меньше когда переменная не того типа, явное приведение, хз что не нравится в (3)

Статическая типизация
8 H A D G E H O G s
 
08.05.20
14:34
(5) Имена переменных, функций. Юниты не пробовал, но наверное тоже работает
9 Garykom
 
08.05.20
14:36
(6) (8) В таком стиле на кириллице я на Java и C# писал да, а вот на Delphi почему то нет.
Вероятно потому что Delphi 7 юзал обычно до Lazarus.
10 vde69
 
08.05.20
14:37
(7) меня всегда забавляло когда (a!=b) не равно (a!==b)
11 Garykom
 
08.05.20
14:38
(10) Таки да все логично в одном случае сравниваются значения а в другом указатели
12 H A D G E H O G s
 
08.05.20
14:38
(7) Особенно весело, когда меняется тип в среде.
Ну, например, размерность адреса с 4 байт до 8 и ты должен все свои Cardinal на THandle при работе с памятью поменять.

Или ты берешь какой нибудь модуль, написанный в бородатых 2000-х и ищешь под него среду старой версии, так как на новой он не компилится.
13 Garykom
 
08.05.20
14:39
(12) Бывает. Особенно последнее что ну никто же код 1С77 не пытаются на 8-ке да?
14 Бешеный заяц
 
08.05.20
14:39
благодаря статической типизации можно скорость работы 1С увеличить, также скорость разработки ide на этапе разработки подсказывать будет методы и поля типа контролировать правильное применение типа итд.

Статическая типизация
15 H A D G E H O G s
 
08.05.20
14:40
(13) Не пытается. Но 8ка стабильна уже 17 лет, монолитна, охеренна и обратно совместима.
Ты попробуй какой-нибудь код 2005 года запустить на любой современной среде разработки.
16 fisher
 
08.05.20
14:41
Вообще или в 1С? И именно статическая или просто строгая?
В 1С строгая нафиг не нужна. А вообще статическая для меня более ламповая. Строгость, ближе к бинарному коду - вот это все. Но это чисто эстетически, так сказать.
Если быстро что-то залампичить на "клеевом" уровне - проклянешь. Окупается только на больших и серьезных проектах или проектах с особыми требованиями.
А на скриптовых языках ака 1С строгость при необходимости можно добавлять по вкусу. Как с тем же js было. Статическими они от этого ессно не станут.

Статическая типизация
17 dezss
 
08.05.20
14:43
За нее.

Статическая типизация
18 lodger
 
08.05.20
14:44
либо ты умеешь готовить плов, либо не умеешь. а какая там типизация - дело второе.

Мне все равно
19 Бешеный заяц
 
08.05.20
14:45
кстати странно 1С революционного больше ничего не предлагает раньше 6.0 потом поколение 7.х далее 8.х которое затянулось...
слухов нет что ни будь новое готовят?
20 vde69
 
08.05.20
14:45
(11) не совсем, я имел в виду JS

(a!=b) - сравнение с приведением типов (например 1!="1" выдаст ложь, то есть он число считает идентичным строке)
(a!==b) - строгое сравнение с учетом типов (например 1!="1" выдаст истина, то есть он число не равным строке)
21 H A D G E H O G s
 
08.05.20
14:45
(19) 1С совершенна.
22 Волшебник
 
модератор
08.05.20
14:47
(19) Говорят, будет орфографический плагин, который исправляет "что ни будь" на "что-нибудь"
23 fisher
 
08.05.20
14:48
(18) Учиться готовить плов хорошо бы начинать со статической типизации. Оно ближе к земле (железу), попутно успеваешь многое осознать. А динамическая типизация - это уже следующий слой луковицы.
24 Garykom
 
08.05.20
14:49
(15) TBlockSerial из тех годов на днях вполне успешно в ВК скомпилился
25 lodger
 
08.05.20
14:49
(22) ещё бы он исправлял опечатки в коде и помогал именовать переменные вида ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокументИмениНуралиеваБорисаГеоргиевича, то цены б ему не было.
26 Бешеный заяц
 
08.05.20
14:50
(21) :-) только что посмотрел в 2002 году вышла первая бета версия восьмерки через пару лет будем 20 летие справлять:-), конечно платформа развилась сильно с тех пор, но подход остался прежним. С развитием современных конфигураций да и технологий уже чувствуется тормоза да и неудобство разработки.
27 Garykom
 
08.05.20
14:51
(26) Поставь EDT если хочешь по настоящему потр...ться
28 Garykom
 
08.05.20
14:52
(27)+ Особенно весело когда конфа типа ERP обратно изменения из конфигуратора грузишь в EDT
29 Бешеный заяц
 
08.05.20
14:53
(27) уже ковырял правда давно, это извращение...
30 Бешеный заяц
 
08.05.20
14:55
(28) так в том то и дело , пора что то совершенно новое делать, правда не уверен что 1с это надо им и так хорошо.Конкуренты особо не форсировано не лезут ибо рынок не тот.
31 Бешеный заяц
 
08.05.20
14:59
(30) думаю нужно снимать слой абстракции в виде встроенного языка (хотя не знаю как и во что он сейчас преобразуется), думаю как вариант Java или Python + феймворк 1с чтобы проще с бизнес логикой и базами данных работать
32 vde69
 
08.05.20
15:04
чего мне не хватает в 1с так подсветки имен при выделении, как это сделано в нотепад++ двойной клик сделал по переменной и сразу видно в ближайшем окружении где она используется, без всяких поисков...
33 Garykom
 
08.05.20
15:09
(32) Дык EDT же
34 antgrom
 
08.05.20
15:11
Я проголосую, но подозреваю что от этого голосования ничего не изменится

Статическая типизация
35 H A D G E H O G s
 
08.05.20
15:15
(32) Ты не поверишь, но это настраивается в обычном конфигураторе.
36 Lama12
 
08.05.20
15:16
Проголосую пожалуй так. Хотя соглашусь что в динамической есть свои минусы, как в общем от и в статической.
Самый яркий глюк с динамической типизацией поймал на вижл бэйсике в третьей студии.
Сделал переменную типа вариант. Присвоил ей единицу. Далее нужно было к ней прибавлять по 1. Программа падала из-за переполнения на 255 и 65535. Приходилось извращаться.

Мне все равно
37 Lama12
 
08.05.20
15:21
(35) Можно, пожалуйста, тыкнуть носом? Мне тоже интересна эта фишка.
Вроде тако только при приске видел.
38 antgrom
 
08.05.20
15:28
(32) в Конфигураторе : Сервис - Параметры - Модули - Редактирование "Текущий идентификатор" и "Выбранный идентификатор"
39 lubitelxml
 
08.05.20
15:28
40 Lama12
 
08.05.20
15:39
(38) (39) Ай спасибо!
41 vde69
 
08.05.20
15:40
(38) (39) спасибо!
42 Новиков
 
08.05.20
15:43
(41) Дима, как ты жил без этого все эти годы? :) Если мне не изменяет память, то Андрей Габец на каком-то совсем новичковом курсе в самом первом занятии показывает этот трюк, иначе кодить тяжко - не видно ж ничего.
43 vde69
 
08.05.20
15:46
(42) я не хожу на новичковские курсы :)

а вообще я очень нетребователен к инструментам, я учился программированию на системах где даже трассировки не было...
44 mikecool
 
08.05.20
15:58
до меня так и не дошло - что такое указатели и нафига вообще они нужны )))
45 Вафель
 
08.05.20
15:58
в статической типизации самое страшное это дженерики
46 v77
 
08.05.20
16:40
(3) и чо эта галиматья делает?
47 v77
 
08.05.20
16:40
+(46) или это от балды
48 Вафель
 
08.05.20
16:54
(46) привидение типов
49 ДенисЧ
 
08.05.20
16:55
(48) Привидение? Шматрочиком?
50 dezss
 
08.05.20
16:58
ОФФ:
Каких-то типов убили и из них получились отличные привидения)))
51 v77
 
08.05.20
17:13
(48) Какое то странное приведение получилось. Как будто писалось методом тыка в 5 утра после бессонной ночи :)
52 Вафель
 
08.05.20
17:25
хотя еж описал строгую типизацию. а статическая не всегда строгая
53 fisher
 
08.05.20
17:36
(35) Вот я, кстати, ума не приложу, почему это не настроено в стандартной палитре изначально. Только злой умысел в голову приходит :)
54 v77
 
08.05.20
17:54
(52) да. байт приводить к байту это очень строго :)
55 H A D G E H O G s
 
08.05.20
18:02
(54) У вас плохо с Дельфи.

В (3) - получения байта данных из указателя со смещением.
Можно загнать все в TMemoryStream, конечно, но у тебя может и не быть Classes
56 Serginio1
 
08.05.20
18:02
(45) А чем дженерики то не угодили. Для ссылочных типов компилится один класс на все классы. Для валуе типов будет для каждого типа свой.
По поводу типизации например в TypeScript это аннотации. https://ru.hexlet.io/blog/posts/kak-ispolzovat-annotatsii-tipov-v-faylah-javascript
Типизация прежде всего удобна для интеллисенсе (когда методы длинные и не ошибиться), ну и контроль типов.
В том же C# есть dynamic. Я за смешанную и с утиной типизацией типа аннотаций

Смешанная типизация
57 v77
 
08.05.20
18:10
(55) что еще за указатели со смещением? нововведение какое то для Android?
А так работать не будет что ли?

CurrentKeyByte := PByte(Key + j)^;
58 NorthWind
 
08.05.20
18:10
.

Статическая типизация
59 H A D G E H O G s
 
08.05.20
18:11
(57) Естественно, будет. В (3) - просто пример того, как можно написать и это будет корректно.
60 v77
 
08.05.20
18:14
(59) Ну галиматью писать можно и с типами и без типов
61 H A D G E H O G s
 
08.05.20
18:17
(60) С типами ее пишут на порядки больше.
Достаточно взять **почти** любую dll на C++
Мудацких приведений, сахара и "изяществ, смотри как я могу" - жопой жуй, а потом ты такой сидишь и разбираешься в этом.
62 v77
 
08.05.20
18:31
(61) Да прям. Это от языка зависит. Вот паскаль и си оба с типами, но в паскале так не извращаются как в си. Go тоже с типами, но там извращений нету почти. В JavaScript типизации строгой нету, но запутать могут похлеще чем сишники. Вот в 1С язык дубовый. Там всё просто и понятно.
63 Гипервизор
 
08.05.20
18:34

Динамическая типизация
64 spock
 
08.05.20
18:44
(59) в (3) пример тех самых "Мудацких приведений"
65 H A D G E H O G s
 
08.05.20
18:57
(64) Да, именно.
66 ДедМорроз
 
08.05.20
19:37
Проблема не в типах,а в выделении под них памяти.
Статическая типизация от выделения памяти не совсем спасает,так как статический объект,это структура.

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

Опять же,наследование и динамическое приведение типов при статической типизации не будут работать.

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

Опять же,в Си++ приведение типов работает куда лучше,чем в 1с - можно приводить строку в булево и будет работать,ах простите,строка в Си - это указатель на массив байтов или слов.

Замечательные традиции 1с вообще типы через структуру передают и какая бы типизация не применялась,в структуру можно чего угодно запихнуть.
67 Конструктор1С
 
08.05.20
19:38
(0) статическая типизация это зло, которое приводит к костылям, навроде дженериков в джаве

Смешанная типизация
68 ДедМорроз
 
08.05.20
19:40
В java типизация спасает?
А базовый тип object все очень любят использовать,чтобы запихать все,что угодно.

К сожалению,есть алгоритмы,где число и типы параметров определяются в процессе работы.
69 ДедМорроз
 
08.05.20
19:41
Кстати в 1с у реквизитов вполне себе статическая типизация и даже Определяемый тип придуман,чтобы было проще работать.
70 Bro
 
08.05.20
19:45
(68) интересно кто это любит в java использовать object? За такое вообще говоря руки отрывают.
71 Garikk
 
08.05.20
19:46
Несмотря на то что я ща на питоне пишу, однозначно статическая

уже в третьем проекте всё сводится к тому что городят самодельный контроль типов

Статическая типизация
72 Smit1C
 
08.05.20
19:57
пофиг

Мне все равно
73 v77
 
08.05.20
20:04
Динамическая типизация ничего кроме тормозов и бардака не дает. Она появилась только от ленивости писать много буков. Если нужна скорость выполнения и порядок то статическая типизация, а если тяп ляп и готово, то питон.

Мне все равно
74 Маленький Вопросик
 
08.05.20
20:04
(15) 8-ка и осталась на уровне 2005 г )))))
75 Сияющий в темноте
 
08.05.20
20:34
на самом деле,динамическая типизация и ее отсутствие это разные вещи.
в javascript даже толком проверить,что за обьект мы получили,сложно.
опять же,традиция java проверять на null,хотя тип обьекта задан и компиллятор не пропустит передать что-то другое.

был дерьмовый язык visual basic,где можно было явно указать тип,а можно было не указывать,но тип операнда функции проверялся при ее вызове.
опять же,указатели на функции позволяют и в статической типизации квадратных колес велосипеду добавить.
76 ам794123
 
08.05.20
20:39
(14) 1с это JIT-компилятор следовательно статическая типизация не влияет на производительность, поэтому и не нужна одинэсникам

Динамическая типизация
77 icipher
 
08.05.20
20:40
я за

Статическая типизация
78 Bro
 
08.05.20
21:06
(76) статическая типизация никогда основной целью и не ставила производительность. Это больше про раннюю диагностику ошибок, автодополнение, структуру класса и т.п. то есть удобство разработки и расширяемость.
79 H A D G E H O G s
 
08.05.20
21:09
(74) Это вы вон, фузиновцам рассказывайте.
80 ам794123
 
08.05.20
21:16
(78) удобно как раз динамически, мало букв. или как в (4) предлагаете
81 Bro
 
08.05.20
22:30
(80) удобно если речь идет о скриптах (например сборки) и фронтенде (например сайтах). В сложных проектах когда отсутствует типизация время доработок увеличивается в разы. А что еще хуже во столько же раз падает их надежность. Собственно поэтому серверная часть (бизнес-логика) на сложных проектах это практически всегда статическая типизация (Java / C# / C++). Хотя да, есть исключения, которые, правда, как правило подтверждают общее правило.
82 Сияющий в темноте
 
08.05.20
22:44
ну,засада не в самой динамической типтзации,а в приведении типов
например
сумма=количество+сумма
прекрасное выражение,и если нечаянно в количество попадает не число,а строка,то никакой ошибки не будет,только во результат на выходе будет странный.

вот чтобы этого не было и нужно явное определение типов и явное отличие операций конкатенации и суммирования
в том же php конкатенация строк это точка,и сюрпризов уже меньше,хотя там,как раз,приведение типов работает на полную,так как 22="22"
83 Сияющий в темноте
 
08.05.20
22:47
(76) на самом деле и в случае jit интерпретации тоже есть разница,так как для типизированной переменной будет заранее ввделена память (особенно это касается строк ограниченной длины) и при обработке операции,например,сложения проверка типа будет идти еще до операции,то есть в момент генерации байт-кода.
84 Конструктор1С
 
09.05.20
05:39
(81) "В сложных проектах когда отсутствует типизация время доработок увеличивается в разы. А что еще хуже во столько же раз падает их надежность"

А конкретный пример привести можешь? По-моему всё с точностью до наоборот, из-за жесткой типизации в трубу улетает туева хуча времени
85 ДенисЧ
 
09.05.20
05:56
(84) Узка твоя точка зрения. И страшно далека она от народа.
86 Конструктор1С
 
09.05.20
06:36
(85) примеры? Хочу увидеть конкретную ситуацию, когда жесткая типизация ускоряет скорость разработки
87 ДенисЧ
 
09.05.20
06:39
(86) Не. У меня бисер кончился. И апельсины тоже.
88 Конструктор1С
 
09.05.20
06:40
В той же джаве всё усыпано дженериками. Которые по своей сути являются попыткой убежать от жесткой типизации
89 Конструктор1С
 
09.05.20
06:40
(87) всё с тобой ясно
90 rphosts
 
09.05.20
07:23
(3) а да ты пасквильщик!
91 rphosts
 
09.05.20
07:29
(86) операция а+в... сначала определи тип обоих аргументов, потом если требуется приведи к 1 тип и только потом.... то-ли сложение то-ли конкатенация то-ли ...
с жёсткой типизацией 2 первых этапа идут лесом!
Надёжнее и быстрее со статикой... но тяп-ляп уже не особо канает, т.е. многие одинэснеги не потянут. С клюшек некоторые так и не перепрыгнули.

Статическая типизация
92 Вафель
 
09.05.20
07:48
(91) еще один кто путает статичность и строгость
Приведение типов не зависит от статичности
93 Конструктор1С
 
09.05.20
08:59
Глянем мультфильм
94 Конструктор1С
 
09.05.20
09:01
https://www.youtube.com/watch?v=CHkEX73P2Pk
он не про статическую типизацию, и даже не про ИТ. Но наглядно демонстрирует контраст, уживающийся рядом друг с другом. Что-то подобное со статической типизацией в Java. С одной стороны типы как бы статичные, с другой стороны легко можно послать лесом всю эту статичность, используя суперклас Object или дженерики
95 Bro
 
09.05.20
09:50
(86) Не понял вопрос. Как минимум скорость разработки увеличивается потому что не надо гадать что за параметр можно передавать чтобы не получить "Поле X не определено" (ну или по ошибке передать не тот параметр, но это уже к надежности, хотя если посмотреть с точки зрения того что ошибку надо исправлять возвращаемся к скорости).

Но это все касается сложных проектов, в маленьком пет-проекте когда знаешь все абстракции наизусть, указание типов да может быть оверхедом.
96 Конструктор1С
 
09.05.20
10:39
(95) "скорость разработки увеличивается потому что не надо гадать что за параметр можно передавать"

Угу. А также приводит к лишнему дрочерству, угробляющему время, чтобы подогнать под нужный тип
97 Гобсек
 
09.05.20
10:41
Статическая типизация усложняет жизнь.
Особенно, в маленьких проектах.
98 Гобсек
 
09.05.20
10:45
(97) + я помню, когда-то давно писал программы на языке "С". Как нужно было изгаляться с этими указателями.
99 H A D G E H O G s
 
09.05.20
10:51
Я вот не помню, чтобы в сложном чужом проекте класса УПП я испытывал проблемы, что в процедуру не знал, какой тип передавать, ибо в комментах к процедуре есть описание всех ее параметров. Кроме того, иногда сознательно необходимо было передавать другой тип, например вместо ВыборкиИзРезультатаЗапроса Структуру.

При статики без кореженья типового модуля такой фигни не получилось бы.
100 Bro
 
09.05.20
10:54
(96) "подогнать нужный тип" это как? Типа "тупой, но очень сильный". Если вы передадите не тот тип вы с очень большой вероятностью получите ошибку поле не найдено. И скорее всего если у вас не подходит тип у вас какая та ерунда в архитектуре и вы рано или поздно но получите проблемы.
101 Вафель
 
09.05.20
11:20
Если есть составные типы то не спасет
Тип = ТипА или типВ
Например функция(докпартия, докреализация)
Ну или придётся описывать все возможные варианты
102 Конструктор1С
 
09.05.20
12:33
(100) это так:

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

ЁжЭг... Ты не видел нормально-сложных проектов "класса УПП", вероятно...
104 H A D G E H O G s
 
09.05.20
13:05
(103) Я видел некоторое дерьмо. В котором код нужно было трассировать на реальных данных, чтобы понять, что хотел сказать автор.
Но я говорю про УПП.
105 ДенисЧ
 
09.05.20
13:10
(104) А как же комментарии?
106 Garykom
 
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) вполне можно и многопоток отлаживать,специально создавая условия и состояния.
110 rphosts
 
09.05.20
18:21
(92) т.е. ты утверждаешь, что жёсткое определение типов значений переменных и возвращаемого вызовами это не статическая типизация?
111 Вафель
 
09.05.20
19:08
(110) я утверждаю что в статике вполне может быть приведение типов
112 Вафель
 
09.05.20
19:09
неявное  причем
113 Serginio1
 
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

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

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

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

?
119 Конструктор1С
 
10.05.20
10:20
(115) предопределенные методы принимают только значения определенных типов, поля прикладных объектов имеют строго определенные типы. Так что в 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
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
(139) Циклотимически.

https://ru.wikipedia.org/wiki/Циклотимия
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_Конструктор()"?
AdBlock убивает бесплатный контент. 1Сергей