|
Зазеркалье: Async - Await | ☑ | ||
---|---|---|---|---|
0
pechkin
20.04.20
✎
16:07
|
Скоро случится чудо и в 1с завезут Async - Await
https://wonderland.v8.1c.ru/blog/uluchsheniya-v-sintaksise-yazyka-1s-dlya-raboty-s-asinkhronnymi-funktsiyami/ |
|||
1
v77
20.04.20
✎
16:15
|
Скоро уже проще будет на C# каком нибудь писать, чем на 1С :)
|
|||
2
NorthWind
20.04.20
✎
16:15
|
(0) неплохо
|
|||
3
Serginio1
20.04.20
✎
16:16
|
Ну Async - Await хороши в том числе и для немодальных вызовов.
И когда замыкания заведут? |
|||
4
pechkin
20.04.20
✎
16:18
|
зачем замыкания когда first class functions нету
|
|||
5
H A D G E H O G s
20.04.20
✎
16:29
|
Много красивых слов.
Которые можно заменить одной статьей http://rusproject.narod.ru/winapi/w/waitforsingleobject.html Годно, че. Астрологи объявили год асинхронности. Порог вхождения студентиков и количество кусков г-да в типовых возрастет. |
|||
6
pechkin
20.04.20
✎
16:30
|
зачем винапи, когда они с жс срисовывали
|
|||
7
H A D G E H O G s
20.04.20
✎
16:31
|
Я ваших жс-ов в глаза не видел и, надеюсь, не увижу.
А winapi - вечно и было еще до ваших яв. |
|||
8
Garykom
гуру
20.04.20
✎
16:34
|
(3) Угу только замыканий и не хватает... И компилятора из ЯП 1С в JS
|
|||
9
Djelf
20.04.20
✎
16:36
|
Не понял статью.
Вызов асинхронный, но "ждать" не асинхронный, а как тогда два асинхронных вызова сделать? А как получить % выполнения? Может же понадобиться, и скорее всего понадобится. А если асинхронный вызов "повис", "ждать" до бесконечности? |
|||
10
Конструктор1С
20.04.20
✎
16:39
|
Лучше бы фоновые задания развивали. А то чтобы из фоновых заданий изобразить многопоточность, приходится исполнять финты ушами
|
|||
11
v77
20.04.20
✎
16:39
|
(9) ну, видимо пока один повис, второй будет выполнятся. А если оба повиснут, то оба повиснут.
|
|||
12
ptiz
20.04.20
✎
16:43
|
Жуть какая.
|
|||
13
Garykom
гуру
20.04.20
✎
16:47
|
Терь при передачах по значению и при зависании ждать если асинхронная функция все никак ответ не возвращает а контекст 1С сохраняет будет мдя.
Особенно если разраб скосячил и можно несколько раз запустить код с Ждать - оперативочка того. |
|||
14
Serginio1
20.04.20
✎
16:47
|
(7) В .Net ассинхронность лет 7. В TypeScript 5 d JS 4. Ну вот до 1С только и дошло. Но проблема скорее всего в том, что все функции работы с файлами, Http и прочее станут асинхронными вот и включили. С другой стороны промисы хороши тем, что можно вручную устанавливать значение в resolve. Очень хорошо для немодальных функций.
https://learn.javascript.ru/async-await |
|||
15
Serginio1
20.04.20
✎
17:26
|
Промисы удобны для всякого рода немодальных вызовов, что бы продолжить работу после выполнения метода
Что касается асинхронных методов то они работают через два метода: static GetPromise(Target: NetObjectinterface, name: any, args: any[]) { let key = window.CallNetMethod(0, "GetUniqueString"); let promise = new Promise((resolve, reject) => { NetObject.PromiseDictioanary.set(key, { resolve: resolve, reject: reject }); window.CallAsyncNetObjectFunction(Target.Id, name, key, args); }); return promise; } И при получении асинхронного результата: static SetPromiseResult(Successfully: boolean, TaskId: string, result: any) { let item = NetObject.PromiseDictioanary.get(TaskId); try { NetObject.PromiseDictioanary.delete(TaskId); // Вот здесь не могу установить результат Proxy с Target function // result = NetObject.WrapResult(result, true); // возникает исключение "Не найден then" if (Successfully) item.resolve(result); else item.reject(result); } catch (e) { item.reject("ошибка установки асинхронного результата " + e); alert("ошибка установки асинхронного результата " + e); } } где: static PromiseDictioanary = new Map(); То есть запомнить resolve, reject в конструкторе и вызвать когда действие закончится. Но в 1С нет замыканий!!! |
|||
16
Serginio1
20.04.20
✎
17:40
|
Вернее не в конструкторе а в параметрах метода вызываемого Promise при старте. Но даже обычных типов функций нет.
|
|||
17
vde69
20.04.20
✎
17:54
|
1с это все-же десктопная система, зачем в ней вообще нужны асинхронные вызовы окон???
да я понимаю тяжелые вещи запускать через фоновое задание, но зачем задать вопрос и не ждать пока на него пользователь ответит??? зачем такие вопросы вообще нужны??? кто может хоть 1 пример привести когда это полезно? |
|||
18
Djelf
20.04.20
✎
18:00
|
А... кажется допёрло ;)
Но не факт что доперло правильно... Из-за того что броузеры стали асинхронно обрабатывать сохранение файла потребовалось сделать костыль №1, но он требует отдельной процедуры, которая сработает при ОписаниеОповещения. Это увеличивает количество кода, поэтому сделали синхронный костыль "Ждать" и асинхронный костыль "Асинх", чтобы превратить асинхронную функцию в синхронную. Не уверен... кажется это не костыль, а грабли! |
|||
19
Serginio1
20.04.20
✎
18:04
|
Угу при этом вызов
&НаКлиенте Процедура ЗаполнитьТовары(Команда) Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыВопросЗавершение”, ЭтотОбъект); ТекстВопроса = “Табличная часть будет очищена. Продолжить?”; ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда //алгоритм заполнения КонецЕсли; КонецПроцедуры можно написать &НаКлиенте Процедура ЗаполнитьТовары(Команда) Результат= await ПоказатьВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет); Если Результат = КодВозвратаДиалога.Да Тогда //алгоритм заполнения КонецЕсли; КонецПроцедуры Я понимаю, что ты выберешь первый, но я второй! По сути все запросы на сервер они асинхронные. Что бы не блокировать гуй. Да и в браузере методы могут быть асинхронными. Вспомни почему они перешли на немодальные окна? |
|||
20
vde69
20.04.20
✎
18:08
|
вот я сейчас перевожу в вордпрессе часть обработок в фоновый режим, да гемороя мног, но хоть понятно зачем это...
а в случае 1с с отказом от модальных окон я вообще не понимаю зачем это нужно, то-ли это дань моде, толи блаж чья-то... но реально я не вижу зачем это когда практически ввели режим окна "блокировать владельца" и "блокировать весь интерфейс", все равно все модальные окна переводят на блокирующие, с точки зрения пользователя - ничего не поменялось, с точки зрения программиста - стало больше кода. Кто в выигрыше? |
|||
21
mikecool
20.04.20
✎
18:09
|
(0) нихрена не понял, в чем же плюсы относительно текущей асинхронности?
|
|||
22
H A D G E H O G s
20.04.20
✎
18:18
|
(21) Не надо писать 2 процедуру
|
|||
23
Serginio1
20.04.20
✎
18:21
|
(21) В том что вместо
Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыВопросЗавершение”, ЭтотОбъект); ТекстВопроса = “Табличная часть будет очищена. Продолжить?”; ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт Можно написать просто Результат= await ПоказатьВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет); |
|||
24
sitex
naïve
20.04.20
✎
18:34
|
Мы конечно можем долго рассуждать и доказывать что это не нужно , но все таки пусть лучше будет ,чем не будет. Хоть какие то зачатки. А то блин мои руки больше в js тянуться чем в 1С.
\ |
|||
25
pavig
20.04.20
✎
19:07
|
(0)
Цель благая, но сделали убого |
|||
26
PR
20.04.20
✎
19:10
|
(20) 1С как для людей написала https://wonderland.v8.1c.ru/blog/asinkhronnye-vyzovy-rasshireniy-brauzerov-i-vneshnikh-komponentov/
Но это же надо прочитать, да, а нахрена? Гораздо проще брякнуть что-нибудь типа "Да нахрена все это новое понапридумывали, трахайся теперь" Помнится, фузинята примерно так же рассудали про клиент-серверную архитектуру |
|||
27
PR
20.04.20
✎
19:10
|
(25) Сделай лучше, че
|
|||
28
quest
20.04.20
✎
19:16
|
(27) В закрытой ВМ, без спецификации ? Совсем что ли директорская извилина кровоток пережала?
|
|||
29
Sysanin_1ц
20.04.20
✎
20:30
|
(0) Ну осталось только напрямую дать возможность работать с HTML/CSS/JS и 1с реально пойдет в рост
|
|||
30
Sysanin_1ц
20.04.20
✎
20:31
|
(29) --> Ну еще ООП внедрить
|
|||
31
Ненавижу 1С
гуру
20.04.20
✎
20:33
|
ключевые слова "Ждать" и "Асинх" доставляют
|
|||
32
pechkin
20.04.20
✎
20:34
|
"дословный" перевод
|
|||
33
ДенисЧ
20.04.20
✎
20:43
|
(31) Предложи свой вариант
|
|||
34
orefkov
20.04.20
✎
21:49
|
(33)
Ассасинх |
|||
36
Ненавижу 1С
гуру
20.04.20
✎
22:01
|
(35) в виде расширений
|
|||
37
Ненавижу 1С
гуру
20.04.20
✎
22:05
|
Так это чего? теперь отчеты можно формировать без создания фоновых заданий?
|
|||
39
vde69
20.04.20
✎
22:18
|
(26) да верю, я что для браузера это нужно, а много-ли ты знаешь контор которые в браузере работают?
90% 1с это тонкий или толстый клиент, а 1с ради этих 10% гемороя доставляют всем.... так-же как и многое другое... вся эта муть с отказом от асинхронности нафиг никому не нужна, так-же как всякие алкого, пушнина и прочее в бухгалтерии |
|||
40
Serginio1
20.04.20
✎
22:29
|
(37) Ну это будет зависеть от того сделают они выполнение promise в пуле потоков потоке.
А также методы WhenAll, WhenAny. Но сдается, что дадут небольшой набор асинхронных методов https://learn.javascript.ru/async-await https://docs.microsoft.com/ru-ru/dotnet/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern |
|||
41
Сияющий в темноте
20.04.20
✎
22:31
|
Сначала мы делали асинхронные процедуры честно,а потом решили программистам сделать механизм,который из аминхронных делает подобие синхронных.
нет бы WaitForMultiplyObject или CompletionPort. да и HttpЗапрос только у 1с остался не асинхронным. опять же,где нормальная многопоточность,их асинхронность в том,что они не смогли свои функции в стандартный механизм браузера просунуть. |
|||
42
Serginio1
20.04.20
✎
22:33
|
https://habr.com/ru/company/ruvds/blog/353658/
Во втором примере нам приходится иметь дело с неизвестным количеством промисов. Однако решить эту проблему очень просто. А именно, надо создать массив и поместить в него промисы. Затем, используя Promise.all(), можно организовать ожидание разрешения всех этих промисов. async function orderItems() { const items = await getCartItems() // асинхронный вызов const noOfItems = items.length const promises = [] for(var i = 0; i < noOfItems; i++) { const orderPromise = sendRequest(items[i]) // асинхронный вызов promises.push(orderPromise) // синхронный вызов } await Promise.all(promises) // асинхронный вызов } |
|||
43
pechkin
20.04.20
✎
22:36
|
Просим.алл подвезут только в 19 релизе
|
|||
44
Serginio1
20.04.20
✎
22:39
|
(43) А о замыканиях то хоть задумываются?
|
|||
45
Сияющий в темноте
20.04.20
✎
22:39
|
(42) а 1с вообще обещает,что ожидание ввполняется а отдельном потоке.
кстати,например,можно число потоков поставить в 1,и все сайты,которые пытались использовать асинхронность висят до сообщения суенарий завис. просто,файловая операция для асинхронности не требует отдельного потока,так как выполняется команда ее интциализации,а завершение будет через прнрывание,но в потоке пользователя нужно асе равно сделать Sleep,чтобы код завершения отработал. Поэтому,они к этому механизму и пришли. |
|||
46
Сияющий в темноте
20.04.20
✎
22:41
|
(44) замыкания-это область видимости,а у 1с ее просто нет,а передача контекста прекрасно реализуется через структуру.
потом,для 1с сиертельны связи между обьектами в виде графа-сборщик мусора не справляется,и куда тут замыкания подвозить? |
|||
47
Сияющий в темноте
20.04.20
✎
22:44
|
на самом деле,вместо замыканий очень полезна директива CaptureContext(VarList) и потом CloneCallWithContext.
|
|||
48
Serginio1
20.04.20
✎
22:50
|
(46) Суть замыканий в том, что переменные метода попадают в замыкание.
Мало того сам async awaite это конечный автомат с запоминанием контекстаю ибо данные1=1; данные2=2; Результат= await ПоказатьВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет); // вот здесь мы покидаем контекст и запоминается точка и переменные с которой нужно продолжить и после выполнения ПоказатьВопросАсинх запускается поток (берется из пула) и запускается код после присваивания и дальше данные=Данные1+Результат+данные2 Так или иначе им нужно разбивать метод на несколько методов с запоминанием контекста |
|||
49
Serginio1
20.04.20
✎
22:52
|
https://habr.com/ru/post/260217/
Кстати в TypeScript когда еще не было промисов использовал async awaite c генерацией автомата |
|||
50
Serginio1
20.04.20
✎
22:56
|
Вот здесь попонятние написано https://habr.com/ru/company/otus/blog/488082/
|
|||
51
pechkin
20.04.20
✎
22:59
|
В данном случае замыкания таки есть
|
|||
52
Сияющий в темноте
20.04.20
✎
23:37
|
и еще
разница между модальным диалогом и БлокироватьОкноВладельца в том,что во втором случае можно смело сделать вызов экспортного метода у окна-владельца,так как внутри окна нет ни какого состочния ни авполяемого кода,а когда модальный вызов,то код как бы стоит на паузе,и выполнять в окне другие действия посто невозможно(в том числе и обработчики астнхронных вызовов). |
|||
53
Сияющий в темноте
20.04.20
✎
23:40
|
(51) суть замыкания-передача области видимости из одной функции в другую.
просто сохранение контекста(тупо блокп переменных)это не совсем замвкание. неплохо бы просто иметь обьект Context,чтобы с ним можно было выполнять какие-то манипуляции. |
|||
54
amiga 600
21.04.20
✎
00:10
|
(14)
"Очень хорошо для немодальных функций." Миста не меняется |
|||
55
Serginio1
21.04.20
✎
00:24
|
(53) Ты 50 читал? Это и есть замыкание ввиде класса с единственным методом MoveNext со всеми переменными метода.
Именно для этого и нужно ключевое слово async что бы понимать что это не обычная функция и нужно строить автомат а MoveNext вызывается после каждого awaite. Замыкания можно реализовывать разными способами. Например в C# это с помощью анонимных классов в котором хранятся внутренние и внешние переменные https://ru.stackoverflow.com/questions/233227/Реализация-замыканий-в-c |
|||
56
NorthWind
21.04.20
✎
06:28
|
(7) прогресс неостановим. WaitFor...Object(s) и прочие CreateThread были сделаны для языков, которые не поддерживали асинхронность встроенными средствами. Сейчас это становится по сути на том же уровне, что поддержка if или for, и мне кажется, это хорошо. Почему нет?
|
|||
57
Провинциальный 1сник
21.04.20
✎
06:38
|
"Асинх Функция КопироватьФайлыАсинх(ИсхКаталог, ЦелКаталог)"
Как это жутко коряво выглядит. Что мешало Асинх сделать модификатором, а не префиксом? "Функция КопироватьФайлыАсинх(ИсхКаталог, ЦелКаталог) Асинх" - было бы намного лучше. И кстати, НаСервере и тому подобное лучше бы так же оформлять... |
|||
58
Комрад1
21.04.20
✎
06:40
|
А может кто-нибудь объяснить что это даёт на практике. В стиле "Раньше мы не могли сделать "Нечто" а теперь это "Нечто" легко сможем"
|
|||
59
Провинциальный 1сник
21.04.20
✎
06:41
|
Эти бешеные джависты доведут 1с до цугундера..
|
|||
60
Провинциальный 1сник
21.04.20
✎
06:45
|
(58) Ну типа, объем кода сократится. Но как же это всё коряво выглядит...
|
|||
61
NorthWind
21.04.20
✎
06:48
|
(58) запустить несколько потоков выполнения. То что делали с помощью фонового задания. Только фоновое задание реализовывались старыми средствами языка, а сейчас они впилили операторы для этого. Т.е. обновили сам язык.
|
|||
62
Комрад1
21.04.20
✎
06:50
|
(60) (61) Ну, то есть ничего нового сделать не сможем, а просто старое будет работать лучше (сарказм) ?
|
|||
63
NorthWind
21.04.20
✎
06:54
|
(62) по сути да. На самом деле все идеально четко сформулировано в (5), к этому ещё можно добавить что оно использовалось в древнем Си 25 лет назад. И вполне себе давало асинхронность. Но сейчас это впиливают в средства языков, такой тренд.
|
|||
64
Провинциальный 1сник
21.04.20
✎
06:56
|
(62) Ну, сложно ждать чего-то нового от корпорации, согласившейся плестись в хвосте прогресса и модных течений. Из законодателя мод отрасли учетных систем 1с превратилась в подражателя. Это добром не кончится.
|
|||
65
ДенисЧ
21.04.20
✎
07:06
|
(64) Ты уже перешёл на жабу полностью? Или до сей поры плетёшься в хвосте прогресса?
|
|||
66
Комрад1
21.04.20
✎
07:12
|
(64) Похоже, что они что-то начали понимать. Пока есть небольшой шанс, что ещё не поздно.
|
|||
67
Провинциальный 1сник
21.04.20
✎
07:47
|
(65) При чем тут я? Я ремесленник, работаю молотком, который разрабатывает 1с. Вот только последнее время они выпускают молотки с кривой несбалансированной ручкой, потому что где-то за океаном это стало модным..
|
|||
68
Hmster
21.04.20
✎
08:27
|
я так понимаю зарплаты программистов 1С будут расти?
|
|||
69
NorthWind
21.04.20
✎
08:37
|
(68) за что ж их поднимать, если вам инструменты делают все проще и проще? :) Вот я понимаю на си многопоточку писать - муторно, непонятно, куча всяких мьютексов, семафоров, тредов, хрен проссышь одним словом. А тут раз - и асинк процедура, все готово :)))
|
|||
70
Ненавижу 1С
гуру
21.04.20
✎
08:47
|
а как это будет в транзакции? транзакция когд будет закрываться, если вызвана неявно из записи и/или проведения?
|
|||
71
dmt
21.04.20
✎
09:28
|
(70) наверное, все эти ждать и асинх должны работать только на клиенте, а там разве есть неявные транзакции?
|
|||
72
Ненавижу 1С
гуру
21.04.20
✎
09:39
|
(71) если только на клиенте и если это не будет работать в обычном приложении
|
|||
73
d4rkmesa
21.04.20
✎
10:09
|
(0) "Нрааавица"
|
|||
74
1CnikPetya
22.04.20
✎
00:32
|
(17) Ну, 1CFresh уже много лет. Рынок SaaS решений - растет очень быстро и если не захватить его, то кто-нибудь уведет малые и средние компании. Поэтому приходится подстраиваться под Web.
(21) Сейчас, если надо использовать 2-3 ассинхронных вызова - это ад. А если еще что-нибудь в цикле, то это просто дикость начинается. Новая реализация позволит решать задачи намного более удобны образом. |
|||
75
ptiz
22.04.20
✎
11:52
|
Такими темпами мы доживем до заметок из зазеркалья, где обсуждаются методы трассировки лучей.
|
|||
76
Serginio1
22.04.20
✎
12:25
|
(75) Дожить бы до замыканий
|
|||
77
fisher
22.04.20
✎
12:31
|
(0) Ну, наконец-то. Я уж и не чаял. А вот замыканий я бы не ждал. Уверен, что их не будет.
|
|||
78
fisher
22.04.20
✎
12:32
|
По той же причине, что и классов.
|
|||
79
Вафель
22.04.20
✎
12:38
|
Не совсем понятны стенания про замыкания когда нет параметров функций.
В формально в механизме асинк авайт замыкания есть |
|||
80
Вафель
22.04.20
✎
12:39
|
Ведь что такое авайт.
Это разбиение процедуры на 2 (внутреннее) и коллбэк |
|||
81
minsk1s
23.04.20
✎
14:04
|
(57) - там резерв для слова Экспорт))
(72) только для клиента функционал. для сервера нет и не может быть кому интересно вот бета код: 1cnik.by/asinhronnye_funkcii.php |
|||
82
Garykom
гуру
23.04.20
✎
14:08
|
(80) Хочешь чтобы были замыкания/коллбэки в 1с в виде:
Процедура Верхняя() Ждать Процедура Нижняя() //.. тут левый код КонецПроцедуры КонецПроцедуры |
|||
83
Serginio1
23.04.20
✎
16:28
|
(80) Там автомат строится
https://habr.com/ru/company/otus/blog/488082/ и вызывается в начале и после каждого awaite |
|||
84
jbond
23.04.20
✎
16:36
|
||||
85
Ненавижу 1С
гуру
23.04.20
✎
17:13
|
(84) заканчивайте отмечать 1-е апреля
|
|||
86
Вафель
23.04.20
✎
17:47
|
Я про жс говорил.
Там как раз авайт через промис и колбэк с замыканием 1с вроде тем же путем пошла |
|||
87
Serginio1
23.04.20
✎
20:08
|
(86) Что жс,что .Net суть таже. В свое время когда на жс не было async awaite TS сам генерил автомат
awaite это автомат, а проимис в resolve запускет MoveNext этого автомата. Да внутри это по сути замыкание с автоматом. Но 1С почему то игнорирует замыкания. |
|||
88
Вафель
23.04.20
✎
20:11
|
(87) в смысле игнорирует?
Какие могут быть замыкания если нет функции параметров? Что куда замыкать? |
|||
89
Serginio1
23.04.20
✎
20:24
|
https://ru.stackoverflow.com/questions/233227/Реализация-замыканий-в-c
По сути получается переменный метода в отдельный класс, переменные замыкания и метод в другой класс. С точки зрения жс это и есть класс с состоянием |
|||
90
Serginio1
23.04.20
✎
20:37
|
||||
91
Вафель
23.04.20
✎
20:43
|
Не понятно что что ты хочешь от 1с когда говоришь про замыкания.
Покажи пример кода как оно могло бы быть |
|||
92
Serginio1
23.04.20
✎
21:00
|
(91) Ну я тебе в 89 ссылочку дал.
Замыкания можно использовать при передаче в другую функцию, а также внутри функции или как переменную которую можно изменять. |
|||
93
Serginio1
23.04.20
✎
21:05
|
Ну например
Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт Массив = новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции Приходится использовать Вычислить. А мог бы так Функция НайтиПоУсловию(Тз,Условие) Экспорт Массив = новый массив; Для каждого Стр из Тз Цикл Если Условие(стр) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции |
|||
94
ДенисЧ
23.04.20
✎
21:11
|
(93) Это не замыкание, это, условно говоря, делегат
|
|||
95
Asmody
23.04.20
✎
21:31
|
(92) ты путаешь лямбды и замыкания
|
|||
96
Serginio1
23.04.20
✎
21:43
|
(94) Ничего я не путаю. В качестве Условие может выступать как статическая функция так и метод объекта.
С точки зрения .Net замыкание это метод класса. Просто класс генерится автоматически и захватывает переменные метода, которые могут изменятся и из других замыканий. Я уже давал ссылку на реализацию замыкания в .Net https://ru.stackoverflow.com/questions/233227/Реализация-замыканий-в-c |
|||
97
Serginio1
23.04.20
✎
21:44
|
Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
|
|||
98
Serginio1
23.04.20
✎
21:46
|
Лямбда-выражение в программировании — специальный синтаксис для определения функциональных объектов, заимствованный из λ-исчисления. Применяется как правило для объявления анонимных функций по месту их использования, и обычно допускает замыкание на лексический контекст, в котором это выражение использовано. Используя лямбда-выражения, можно объявлять функции в любом месте кода.
|
|||
99
Serginio1
23.04.20
✎
21:52
|
Сам делегат Условие может замыкать на себя данные метода из которого вызывается функция НайтиПоУсловию(Тз,Условие)
Например это могут использоваться данные из запроса и также другие замыкания. На яркий пример Linq который построен на лямдах выражениях в которых захватывается контекст метода |
|||
100
Asmody
23.04.20
✎
22:18
|
В примере (93) у тебя и не лямбда, и не замыкание. А функция высшего порядка
|
|||
101
Вафель
23.04.20
✎
22:23
|
Ну собственно про что я и говорил
О каких замыканиях идёт речь пока нет функций параметров |
|||
102
Serginio1
23.04.20
✎
22:30
|
(100) Меня Вафель спаривал зачем мне замыкания. Я ему привел пример. В качестве делегата может выступать замыкание и как правило оно и будет выступать.
В примере как раз не лямда, а функция (делегат). Лямбда выражение это немного другое, это локальная функция которая может захватывать контекст https://ru.wikipedia.org/wiki/Лямбда-выражение x => x * 5 |
|||
103
Вафель
23.04.20
✎
22:40
|
Ты видно совсем не понимаешь о чем я говорю
|
|||
104
Serginio1
23.04.20
✎
22:40
|
(101) Вот пример использования без параметров
Можно внутри функции создавать и использовать замыкание Процетура ТестЗамыканий(); delegates = новый Массив; outside = 0; // #1 Создает экземпляр переменной только однажды Пока (i<2) { inside = 0; // #2 Создает экземпляр переменной многократно массив.Добавить(() => delegate // #3 Захват переменной анонимным методом { Сообщить(""+ outside+"," inside); outside=outside+1; inside=inside+1; }; } first=массив[0]; second=массив[0]; first(); first(); first(); second(); second(); first(); second(); КонецПроцедуры Сначала нужны переменные типа замыкания |
|||
105
Вафель
23.04.20
✎
22:41
|
Я не спрашивал тзачем нужны замыкания
Я спрашивал (101) |
|||
106
Serginio1
23.04.20
✎
22:42
|
Или переменные функции. Суть переменных функций без замыканий мало. Так или иначе замыкания нужны и уже давно.
|
|||
107
Serginio1
23.04.20
✎
22:45
|
(105) Так назовем нужен тип Функция. Так тебя устроит?
То что нет типа функция поэтому нет и параметров функция и замыканий. Или так нужен тип параметра функция! Так тебя устроит? |
|||
108
Вафель
23.04.20
✎
22:50
|
Ну вот другое дело
|
|||
109
Serginio1
23.04.20
✎
23:05
|
Так какой смысл замыкания без типа функция? Понятно, что должен быть и тип это помему и … понятно?
|
|||
110
Cthulhu
23.04.20
✎
23:08
|
еще замыкание - и можно переименовывать в 1с# ?.......
|
|||
111
Serginio1
23.04.20
✎
23:21
|
(110) Так они ввеели async awaite из JS так что 1С_JS
|
|||
112
Serginio1
23.04.20
✎
23:23
|
Кстати метод "Выполнить" захватывает локальный контекст.
|
|||
113
DTX 4th
24.04.20
✎
00:43
|
Я ржу
Асинки без замыканий и стрелочных функций, огонь Пздц, бафните язык уже, а то кодить большой. |
|||
114
DTX 4th
24.04.20
✎
00:45
|
больно*
|
|||
115
Asmody
24.04.20
✎
01:17
|
(113) я ржу с Обещание.
Такое впечатление, что архитекторам языка иногда заносят интересные книжки. |
|||
116
Cthulhu
24.04.20
✎
01:54
|
на самом деле вот про 1с... так, на всякий случай - взгляните на рукописное начертание буквы "алеф"...
|
|||
117
APXi
24.04.20
✎
08:27
|
(19) А разве у процедуры ЗаполнитьТовары(Команда) не должно быть впереди Асинк?
|
|||
118
Сияющий в темноте
24.04.20
✎
17:05
|
(100) скорее даже,указатель на функцию,который,кстати в 1с реализовали через обработкаоповещения.
(113) у них в общих модулях только локальные переменные,так что до замыканий им очень далеко. хотя,через ту же обработку оповещения это все реализуется. а собственно,как и сама обработка через структуру. хочешь указатель на функцию-все просто: новый Структура("Имя,Модуль,Параметры,КонтекстЗамыкания") и в путь ^_^ |
|||
119
Serginio1
24.04.20
✎
17:16
|
(118) Замыкание кстати может изменять контекст. Придется вручную восстанавливать контекст
|
|||
120
ptiz
24.04.20
✎
17:21
|
Навеяло вашими диалогами.
Может когда-нибудь в 1С 8 сделают и такую вещь как "Контекст"? В 7.7 ведь было! |
|||
121
Serginio1
24.04.20
✎
17:28
|
(120) Здесь под контекстом понимаются переменные функции и родительских замыканий. Замыкание может быть вложено в замыкание
|
|||
122
Сергиус
24.04.20
✎
17:29
|
(120)В чем суть 7-ного контекста?
|
|||
123
Eiffil123
24.04.20
✎
17:34
|
Особо обрадуются разработчики, которые использовали переменные с именами новых ключевых слов.
|
|||
124
Serginio1
24.04.20
✎
17:53
|
(123) Ну наверное нужно сделать рефакторинг.
|
|||
125
Djelf
24.04.20
✎
18:19
|
(115) Да, "Обещание" как то не очень.
Оно может что-то вернуть, или не вернуть, и вообще обмануть... Нужно было бы использовать слово "Клятва", чтобы гарантировать возврат. |
|||
126
Сияющий в темноте
24.04.20
✎
18:32
|
(125)обещание результата.
вполне нормально. (119) ну,если контекст это структура,то вполне нормально-ссылок много,а структура одна. просто,переопределить работу со структурой,и все будет работать. (123) они это уже проходиди,у них в БСП были функции,которые потом стали встроенными,но с другим набором параметров,так что им по граблям не привыкать ходить,и другим предлагают. |
|||
127
Сияющий в темноте
24.04.20
✎
18:35
|
потом,в 1с просто нет статических переменных,а время жизни переменной-вопрос открытый,боюсь,что компилятор их выкидывает из памяти еще до выхода из функции.
|
|||
128
Сияющий в темноте
24.04.20
✎
18:47
|
В 7.7 контекст работал очень похоже на значение контекста,а в 8 его заменили обьектом,где также экспортные функции доступны.
|
|||
129
Serginio1
24.04.20
✎
18:56
|
(126) Прелесть лямбда выражений, что они создаются по месту. В .Net в начале не было замыканий, можно было использовать только методы.
Было очень неудобно. Затем появились анонимные делегаты, а затем и лябда выражения и те и другие замыкали контекст, но с лямбда выражениями запись была более лаконичной. Но хотя бы можно было передать метод класса. В 1С и этого нет. Ну как я уже писал Функция НайтиПоУсловию(Тз,Условие) Экспорт Массив = новый массив; Для каждого Стр из Тз Цикл Если Условие(стр) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции нужно передать не только контекс, но и метод отбора. Пока это вызывается так Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт Массив = новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции // Примеры использования //тз=НайтиПоУсловию(тз,"Стр.Колонка1<20 и Стр.Колонка2>500"); // или //Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров"); //Рез=НайтиПоУсловию(тз,"Список.Найти(стр.ФизЛицо)<>Неопределено"); //Или //Рез=НайтиПоУсловию(тз,"Найти(Врег(стр.Значение),Врег(""акф""))>0"); //Рез=НайтиПоУсловию(тз,"Модуль.ФункцияСравнения(Стр,Список)",МассивСтруктур,ЭтотОбъект); //То есть в модуле обработки должна быть функция // Функция ФункцияСравнения(стр,МассивСтруктур) Экспорт |
|||
130
Serginio1
24.04.20
✎
18:57
|
При этом Вычислить как раз и замыкает контекст.
http://catalog.mista.ru/public/371762/ |
|||
131
Злопчинский
24.04.20
✎
19:14
|
(128) "а в 8 его заменили объектом," - а что тут есть "объект"..?
|
|||
132
Злопчинский
24.04.20
✎
19:16
|
(122) в точто тебе через "контест" - доступны переменные, процедуры и функции этого контекста.
например из открытой формы обработки можно вызвать другую обработку - и передать в нее "контекст" родительской обработки. Дочерняя обработка может обновить например форму родительской обработки, стукнуться и выполнить ее процедуры... |
|||
133
Djelf
24.04.20
✎
19:23
|
(126) А кто тебе обязан отдать "обещание"? Это флирт, и по факту флирта, никто, никому, ничему, ничего не обязан.
|
|||
134
Garykom
гуру
24.04.20
✎
19:27
|
(133) Он ждал, ждал - а она не дала... результат функция
|
|||
135
Djelf
24.04.20
✎
19:30
|
(134) А если вообще не дала и упала в колодец? Или зависла на 100 дней над наблюданием прохождения Юпитера над Сатурном?
|
|||
136
Djelf
24.04.20
✎
19:33
|
Я не говорю что это не правильно, нужно посмотреть это на реальных примерах.
|
|||
137
Serginio1
24.04.20
✎
19:40
|
(136) Для этого есть
awaite Task.WhenAny(ВыполняемаяЗадача, Task.Delay(сколько нужно миллисекунд) Правда нужно предусмотреть и прекратить задачу |
|||
138
Djelf
24.04.20
✎
20:16
|
(137) Отсутствие этого в 1С, меня и ввело в ступор непонимания, как оно должно и будет работать.
Волноваться и внедрять пока незачем, посмотрим как оно будет в бсп внедрено и какие костыли к этому решению они там придумают. |
|||
139
mikecool
24.04.20
✎
21:22
|
читаю холивар про замыкания и не пойму их прикладного примера )
|
|||
140
Serginio1
24.04.20
✎
21:54
|
(139)
НайтиПоУсловию(тз,Стр=>Стр.Колонка1<20 и Стр.Колонка2>500); |
|||
141
Serginio1
24.04.20
✎
21:58
|
Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров");
Рез=НайтиПоУсловию(тз,стр=>Список.Найти(стр.ФизЛицо)<>Неопределено); Рез=НайтиПоУсловию(тз,стр=>Найти(Врег(стр.Значение),Врег("акф"))>0"); Рез=НайтиПоУсловию(тз,Модуль.ФункцияСравнения); где Фун Модуль.ФункцияСравнения(Стр) функция модуля |
|||
142
DTX 4th
24.04.20
✎
21:59
|
(115) Я сначала тоже.. Но потом вспомнил, что мы на русском кодим, и как-то отлегло)
(118) От указателя на функцию без возможности динамического создания функций (локальных функций, ну или как это называется) толку особо нет (139) Удобно доработки группировать. Если скинуть все таблицы обработки клиент банка к себе модуль, модуль превратиться в помойку. На клиенте могут помочь формы, а вот на сервере туго (140) +++ Давно о такой штуке мечтаю. Думал даже общий модуль запилить, но потом понял, что нельзя нормально вернуть объект с процедурами... |
|||
143
Serginio1
24.04.20
✎
22:02
|
(142) Я Вычислить часто использую, когда нужно унивесальную функцию запилить см (129)
|
|||
144
Serginio1
24.04.20
✎
22:06
|
Функция НайтиПоУсловию(Тз,Условие,Список="",Модуль="") Экспорт
Массив = новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции Например ФункцияСравнения определена в этом же модуле (ЭтотОбъект) МассивСтруктур определен в функции Рез=НайтиПоУсловию(тз,"Модуль.ФункцияСравнения(Стр,Список)",МассивСтруктур,ЭтотОбъект); тогда Список и Модуль будут подставляться из параметров |
|||
145
DTX 4th
24.04.20
✎
22:14
|
(143) Интересная идея, запомню)
У меня из таких хаков самая часто используемая -
И можно во время пазу процедуры выполнять :) Сейчас не вспомню, но что-то типа Выполнить2("Контекст.Сортировать(""Колонка1""), Таблица) :) |
|||
146
DTX 4th
24.04.20
✎
22:14
|
*во время паузы в отладчике
|
|||
147
_KaA
24.04.20
✎
22:23
|
(39)
Вы очень сильно "округлили". А как же пользователей сервисов 1cFresh? А как же мобильные клиенты? И даже если сейчас пользователи ВЕБа и Мобилки это, навскидку, от 10 до 20%, то в будущем этот процент будет только увеличится... И незабываем, что очень много процессов между собой связаны, поэтому вполне можно допустить что это новшество является частью другого проекта на развитие... |
|||
148
Serginio1
24.04.20
✎
22:30
|
(145) Вот поэтому и хочется нормальных замыканий как во всех языках.
Хотя и Выполнить очень удобная функция, особенно когда внутри вызываются ёмкие функции |
|||
149
Сияющий в темноте
24.04.20
✎
22:33
|
На самом деле,все растет от интерпретатора.
в начале программы писали в бинарных кодах и был придуман ассемблер там можно было код рассматртвать как данные,но потом из-за сложности отдадки это посчитали плохим тоном и было принято,что код в процессе исполнения не меняется. и это,на самом деле,до сих пор так-иначе никакой антивирус не сможет определить,что делает программа,если ее код будет меняться. но,потом появились интерпретаторы,когда код программы для самого интерпретатора является данными. и в интерпретаторах почти всегда есть возможность выполнить динамически созданный код,так как это ге требует какой то большой сложности. но,не все интерпретаторы позволяют через выполнение создавать новые функции. а новые функции-это отложенные вычисления,как бы там их не называли лямбда и т.п.это всего лишь способ отложить ввполнение каких-то аычислентй на потом. да,в 1с есть вычислить и выполнить,но через эти операторы функцию определить нельзя,можно определить только тело функции. просто,в некоторых языках есть возможность использования указателя на функцию,ну,на самом деле,указатель на функцию есть везде,только в компилируемвх языках это адрес в памяти,и текстовое соответствие теряется в процессе компиляции,а в интерпретируемвх,наоборот,есть строка,а адрес часто недоступен. но,если мы хотим использовать передачу динамически созданной функции,то нам нужен адрес и по нескольким причинам: во-первых,если замыкание,то мы каждый раз определяем новую функцию,и нам нужно как-то их различать,чтобы ввхвать по месту то,что нужно во-вторых,в заиыкание попадают переменные со значениями,и они должнв жить,пока они нужны,а если ыункция определяется по имени,то ее нужно удалять вручную,что тоже отдельная и сложная история. и самоый главный момент-динамически сохдавать функцию имеет смысл только если мы собираем ее тело динамтчески,а емли оно всегда одинаеово,то проще контекст делать параметром в 1с оператор выполнить позаоляет получить динамический код без создания функции. если хочется,то уеазателем на уже существующую функцию можно считать строку с ее именем. опять же,замыкания нужны там,где мы передаем функцию как указатель для ввзова с заранее заданнвм набором параметров,как это бывает,например,в javascript при обработке событий,куда параметр контекст забыли добавить. если рассмотреть,например,работу с собвтиями WMI,то таи для обработчиков отдельно задана переменная контекста,куда можно запихать значение,и никакие замыкания не нужны. на самом деле,замыкание-это из пушки по воробьям-для передачи одного значения мы пихаем в контекст весь стек,и он живет,пока не закончится аыполнение функции,а в случае событий-до завершения программы. ну и для этого же есть глобальные переменные и область видимости,когда статическая глобальная переменная нкжна только в тех местах,где ее явно указали,но в 1с нет и этого. зато,есть ОписаниеОповещения,где есть параметр,который можно рассматривать как контекст. асинхронное исполнение,кстати,страдает тем же дефектом-все переменные функции будут жить до ее завершения. ну и,можно было реализовать что-то типа DoEvents,как это бвло в VbScript для обработки асинхронных событий,когда мы в коде разрешаем их выполнить,а потом проверяем результаты,но нет,было решено изобретать велосипед с квадратными колесами. соответственно,ждем возможность ожидать заданный интервал времени и возможность ожидать несколько зааершений сразу с аозможностью обработки завершенного-тогда весь код формы можно будет реализовать в одном цикле. собственно говоря DoEvents делает именно это-отдать управление системе и сохранить контекст. просто,вместо выхода из функции,можно вызывать другую функцию,которая реально делает ввход с сохранением еонтекста и потом вход обратно. |
|||
150
Сияющий в темноте
24.04.20
✎
22:41
|
еще одно очень полезное применение указателя на функцию-это итераторы.
например,обход дерева-это вложенные рекурсивные вызовы,но не хочется об этом думать каждый раз-пишкм один раз алгоритм обхода,а потом передаем ему функцию,которую он ввзовет для каждого элемента,и все. |
|||
151
Вафель
24.04.20
✎
22:48
|
(150) это называется функциональное программирование
|
|||
152
Вафель
24.04.20
✎
22:51
|
(149) вообще-то этот велосипед уже давно был изобретен и не 1с а в жаваскрипте
|
|||
153
Serginio1
24.04.20
✎
23:08
|
(149) Одна из проблем 1С это то, что отсутствует сборка мусора. Жизненный цикл ссылки построен на подсчете ссылок. Но и в этом тоже не проблема.
По сути при использовании замыкания нужно заниматься кодогенерацией. Но это не проблема при компиляции в БайтКод. Все давным давно придумано |
|||
154
Serginio1
24.04.20
✎
23:16
|
Уще когда в JS не было async awaite TS генерил код плохочитаемый
https://stackoverflow.com/questions/56306701/typescript-generates-awaiter-generator-when-using-promises Вот здессь хоть с ошибками но попонятнее https://stackoverflow.com/questions/42412145/what-is-a-state-machine-in-terms-of-javascript-promises-and-c-sharp-asyc-await |
|||
155
Сияющий в темноте
25.04.20
✎
14:11
|
в 1с уже есть сборщик мусора не только на подсчете ссылок.
но граф с клиента на сервер или обратно она так передавать и не научилась. и по вложенности тоже двоит обьекты. а обещание,это еще и шаг в многопоточность потом могут сделать ВыполнитьВНовомПотоке и в ответе тоже обещание,тем более,что новые браузеры фоновое исполнение уже умеют. |
|||
156
Сияющий в темноте
25.04.20
✎
14:17
|
и важна сборка мусора на клиенте,так как на сервере можно после завершения исполнения кода все,чтотон себе выделил,просто осаободить и нн бояться.
|
|||
157
ДенисЧ
25.04.20
✎
14:38
|
(156) @сервере можно после завершения исполнения кода все,чтотон себе выделил@
Память не ресурс (с) У меня тут где-то метла завалялась... Пойду, испоганю... |
|||
158
Serginio1
25.04.20
✎
16:24
|
(156) На сервер передаются сериализованные данные (можно конечно держать серверную ссылку на клиенте, но это не для 1С). Никто не держит ссылки на сервере или клиенте. Там своя кухня.
Хотя это и возможно https://habr.com/ru/post/323096/ При финализации объекта. Единственно, что можно присвоить результат сервера клиенту. А вот про сборщик мусора в 1С поподробнее пожалуйста? В .Net головная боль сочетать COM с подсчетом ссылок и сборка мусора |
|||
159
Garykom
гуру
25.04.20
✎
16:35
|
(149) Интересно когда в 1С можно будет новые расширения писать и добавлять программно ))
|
|||
160
Сияющий в темноте
25.04.20
✎
20:05
|
(159)
расширения и сейчас можно программно добавить,но само расширение,это перехват вызова функции. |
|||
161
Garykom
гуру
25.04.20
✎
20:43
|
(160) Подразумевал когда конфа (точнее расширение) саму себя "дописывает" ))
Новые расширения делает и подключает. |
|||
162
Вафель
25.04.20
✎
22:01
|
(161) уже сейчас можно
|
|||
163
Сияющий в темноте
26.04.20
✎
11:53
|
расширение можно загрузить из xml в отдельный конфигуратор
потов выгрузить в cfe и программно подключить в конфу |
|||
164
Сияющий в темноте
26.04.20
✎
11:54
|
на самом деле,программно и конфигурацию редактировать уже можно без особых проблем
просто исполнителя запустить на другой временно созданной конфигурации |
|||
165
Bro
26.04.20
✎
13:03
|
(158) Кстати тоже интересно про сборку мусора. Потому как та же Java только к 11-й версии выкатила что-то более удобоваримое в виде G1. Потому как тот же CMS приводил к фрагментации и периодически (особенно при нагрузке) уходил в STW сборку мусора (причем в однопоточную (!) так как Oracle решил похоронить CMS уже очень давно). Причем даже G1 достаточно сложный неочевидный сборщик мусора (и там по дефолту в Java очень странная есть настройка, которая уже на среднем highload'е может приводить к жестким STW паузам).
ЗЫ: Самое главное в сборщике мусора это работа с цикличными ссылками если что (без цикличных ссылок, обычный подсчет ссылок работает на ура). |
|||
166
Fragster
гуру
27.04.20
✎
21:24
|
У кого есть доступ, поддержите тупых 1сников, которые считают, что асинхронность в текущем виде должна быть невидимой со стороны прикладного кода https://partners.v8.1c.ru/forum/topic/1906773
|
|||
167
DTX 4th
28.04.20
✎
20:08
|
(142) Вспомнил, чего мне не хватает
Хочу иметь возможность чейнить такие методы. Типа ТЗ.Выбрать(Строка => Строка.Колонка3).Сортировать().ВыбратьПервые(10) |
|||
168
DTX 4th
28.04.20
✎
20:09
|
Мб кто что подскажет
|
|||
169
Cyberhawk
28.04.20
✎
20:27
|
(166) Как предлагается поддержать? Удали ту ссылку и дай нормальную с номером сообщения, которое надо плюсануть, и не позорься
|
|||
170
trdm
28.04.20
✎
20:43
|
||||
171
Serginio1
28.04.20
✎
20:50
|
(167) Это Linq называется. Опять же нужны замыкания https://metanit.com/sharp/tutorial/15.1.php
Но на том же C# есть методы расширения https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/extension-methods для расширения Linq |
|||
172
Ненавижу 1С
гуру
29.04.20
✎
07:58
|
(171) для вот данного примера в (167) они не нужны
|
|||
173
Serginio1
29.04.20
✎
10:01
|
(172) ТЗ.Выбрать(Строка => Строка.Колонка3). а это что?
|
|||
174
Fragster
гуру
29.04.20
✎
11:14
|
(173) вероятно оставить от таблицы только колонку 3
|
|||
175
Serginio1
29.04.20
✎
11:28
|
(174) Это понятно, разговор про то, что в данном примере замыкания (лямбда выражения) не нужны Строка => Строка.Колонка3
|
|||
176
Fragster
гуру
29.04.20
✎
11:34
|
(175) ну, то, что возврат копии объекта (или самого объекта) из методов не требует лямбд - правда. а вот для сортировки, фильтрации, сворачивания и преобразования - очень даже нужны, упрощают код для написания и понимания в разы.
|
|||
177
Serginio1
29.04.20
✎
12:02
|
(176) Пойми я этим линком пользуюсь каждый день и прекрасно понимаю, что и зачем. Мало того, что линк используется для коллекций, но еще и для БД с формированием запросов.
Тут даже на С++ прикручивают. А 1С плетется в хвосте. Надеюсь async awaite это первая ласточка |
|||
178
DTX 4th
29.04.20
✎
13:56
|
(171) Да, да, у меня шарп входит в тройку основных языков помимо js и 1С)
Только вчера приложение под мак на netCore собрал, которое дергает скрипт питона, чтобы получить активное окно :D |
|||
179
jbond
29.04.20
✎
15:41
|
После короны в России останутся живые Java и Salesforce программисты?
|
|||
180
sitex
naïve
29.04.20
✎
15:48
|
(179) Если только будут удаленно работать на запад.
|
|||
181
Fragster
гуру
29.04.20
✎
15:50
|
все в 1с уйдут
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |