|
Тест на понимание Асинх | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
Почему 1С
16.06.21
✎
20:59
|
Ниже дан код, не выполняя его в 1С выберите правильный вариант. Что выведится в сообщения по порядку.
&НаКлиенте Асинх Процедура Команда1(Команда) Сообщить("1"); а = Тест(); Сообщить("2"); b = ждать а; Сообщить("3"); КонецПроцедуры &НаКлиенте Асинх Функция Тест() Возврат 5; КонецФункции |
||||||||||
1
ДНН
16.06.21
✎
21:49
|
Должно быть 1,2,3
Но 1С выведет 3,1,2. Причем визуально это будет выглядеть как будто сначала вывелось правильно, а потом 3 переместилась наверх |
||||||||||
2
acht
16.06.21
✎
22:02
|
Смотрю и понимаю, что геня даже свой подход "гуру-тестов" и тот не сам выдумал...
|
||||||||||
3
vde69
16.06.21
✎
22:48
|
а где в сабже асинхронность?
|
||||||||||
4
Сергиус
17.06.21
✎
00:24
|
Асинх это новая директива в 1с или что?
|
||||||||||
5
PR
17.06.21
✎
00:27
|
|||||||||||
6
ДенисЧ
17.06.21
✎
06:19
|
(4) Эх... Бросить всё и уехать в "Москва, Россия" (с) почти анекдот.
|
||||||||||
7
Почему 1С
17.06.21
✎
06:26
|
(3) Ну так что выведется? И как это называется?
|
||||||||||
8
dmt
17.06.21
✎
08:57
|
странное поведение
|
||||||||||
9
dmt
17.06.21
✎
09:00
|
причем если в отладчике постоять секунду на строке Сообщить(3) и только затем ее выполнить, то порядок сообщений будет нормальным )
|
||||||||||
10
Smit1C
17.06.21
✎
09:04
|
Как-то так
3, 1, 2 |
||||||||||
11
Вафель
17.06.21
✎
09:14
|
По идее должно быть 1,2,3
Как сделала 1с - хз |
||||||||||
12
Smit1C
17.06.21
✎
09:17
|
ИМХО: Там просто Сообщить("3") в миллесекундах обгоняет асинхронный вызов Сообщить("1") и Сообщить("2"), если поставить паузу перед Сообщить("3"), то выведется 1,2,3.
Поправьте если я не прав... |
||||||||||
13
Почему 1С
17.06.21
✎
09:17
|
(10) Сможешь объяснить почему так работает?
|
||||||||||
14
ДенисЧ
17.06.21
✎
09:19
|
(12) А с чего Сообщить("1") стал асинхронным, а Сообщить("3") - нет?
|
||||||||||
15
Почему 1С
17.06.21
✎
09:19
|
(12) Можно в функции тест запулить цикл на 100000 итераций, результат не изменится
|
||||||||||
16
ДНН
17.06.21
✎
09:19
|
(13) Потому что это ошибка 1С. Видимо связанная с Сообщить. Если вместо Сообщить использовать ЗаписьТекста и писать в файл, то будет записано 1,2,3
|
||||||||||
17
dmt
17.06.21
✎
09:23
|
(12) похоже на конкретный баг в Сообщить. Пауза перед Сообщить(3) в 600 мс дает примерно половину сообщений в правильном порядке.
|
||||||||||
18
Smit1C
17.06.21
✎
09:27
|
(15)
Асинх Процедура КомандаА(Команда) Сообщить("1"); а = Тест(); Сообщить("2"); b = ждать а; ТекДата = ТекущаяДата(); Пока ТекДата+5>=ТекущаяДата() Цикл КонецЦикла; Сообщить("3"); КонецПроцедуры выведет 1,2,3 |
||||||||||
19
TormozIT
гуру
17.06.21
✎
09:29
|
Используй обычное приложение. Там вывод сообщений синхронный. Поэтому визуальный порядок сообщений будет соответствовать порядку из вывода.
|
||||||||||
20
ДенисЧ
17.06.21
✎
09:37
|
(19) а в 77 вообще никакой асинхронности нет.. Давайте хором на 77 перейдём )))
|
||||||||||
21
Почему 1С
17.06.21
✎
09:47
|
(18) При чем прилично нужно подождать, чтобы порядок заработал. на цикле в 100к элементов порядок не правильный, а уже на 1кк становится правильным. Никак не в миллисекундах дело выходит
|
||||||||||
22
Garykom
гуру
17.06.21
✎
09:59
|
Объясните нахера в платформу 1С добавили другой вид асинхронности?
Когда уже есть одна с оповещениями при отказе от модальности? |
||||||||||
23
Garykom
гуру
17.06.21
✎
10:01
|
(22)+ Синтаксический сахар?
А предыдущий депрекатировать будут или так и будут раздувать платформу вместо того чтобы ее сократить-оптимизировать и сосредоточиться на вылизывании и обезбаживании? |
||||||||||
24
Garykom
гуру
17.06.21
✎
10:03
|
Сцуко вы еще лямбда-функции добавьте анонимные в виде замыканий
|
||||||||||
25
sikuda
17.06.21
✎
10:04
|
(23) Так что же нам предложили в 2009 году как прикладным программистам? Получается нам предложили callback, завернутый в ОписаниеОповешения(). И даже функции работы с обещаниями в 8.3.18 не меняют этой сути, а просто перепаковывают примерно как программисты javascript свои callback-и в promise. Но в отличие от Web вся остальная схема работы 1С осталась синхронной. Взаимодействие с сервером в 1С само синхронно — последовательно вызываются функции клиента и сервера, ответ у HTTPЗапрос — получаем последовательно. А ОписаниеОповещения повесили на клиента и функции взаимодействия с пользователем.
Нет не все функции в 1С будут прикрывать столь срамную реализацию. Есть и правильная тенденция в ПолучитьФайлССервера с несколькими Оповещениями(callback) и в них мы как раз начинаем получать правильное использование технологии. В общем https://blog.sikuda.ru/wp-content/uploads/2020/01/TransferFile.png |
||||||||||
26
Garykom
гуру
17.06.21
✎
10:06
|
(25) Так и я про что?
Раннее фуйню спороли а сейчас вместо того чтобы ее исправить придумали еще одну |
||||||||||
27
fisher
17.06.21
✎
10:07
|
(1) +1
На файловой 8.3.18.1363 выводится именно так. Это какой-то прикол буфера сообщений. Уже была где-то длинная ветка с паззлерсом, где сообщения чуть ли не затраивались или что-то в этом духе. Не помню подробностей, к сожалению. Если одновременно с Сообщить() заполнять массив, то массив будет заполнен ожидаемо. |
||||||||||
28
Garykom
гуру
17.06.21
✎
10:07
|
Имхо давно пора делать чтобы клиент 1С мог работать (вызывать) несколько любых/разных серверов 1С ))
Асинхронно |
||||||||||
29
Chai Nic
17.06.21
✎
10:09
|
Асинхронность без многопоточности - зло.
|
||||||||||
30
oslokot
17.06.21
✎
10:10
|
Я один не понимаю что это за асинх и зачем она нужна в 1С ?
|
||||||||||
31
fisher
17.06.21
✎
10:10
|
(22) В смысле - нахера? Попробуй цепочку асинхронных вызовов написать в старом стиле и посмотри какая лапша получается. Сделали почти как у взрослых - так гораздо удобнее.
(33) Да, сахар. Сладкий. Старый задиприкейтят, куда деваться. |
||||||||||
32
1Сергей
17.06.21
✎
10:13
|
(0) Ничего не выведет. вывалится в ошибку на строке "b = ждать а;"
|
||||||||||
33
Chai Nic
17.06.21
✎
10:16
|
(30) Для совместимости с мозгами джавистов и их творчеством для смартфонов
|
||||||||||
34
sikuda
17.06.21
✎
10:17
|
(31) Анекдот в тему:
"Павел, а можно задать вопрос асинхронно? А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? Спасибо" |
||||||||||
35
fisher
17.06.21
✎
10:17
|
(1)(27) + Причем действительно визуально видно, как сначала выводятся 1, 2 а потом первым втыкается 3. То есть очевидно при выводе сообщений еще как-то хитро порядок может восстанавливаться и просто в этом случае он восстанавливается неправильно. То ли баг, то ли фича.
|
||||||||||
36
Вафель
17.06.21
✎
10:18
|
Асинхронность нужна чтобы в браузере работало
|
||||||||||
37
oslokot
17.06.21
✎
10:19
|
(33) (36) ну дык оно и щас работает через описаниеоповещения и т.д.
|
||||||||||
38
fisher
17.06.21
✎
10:21
|
Вас, плять, не понять. То плачут что язык не развивается. А когда развивается - плачут что остаются старые варианты синтаксиса. А если бы вырезали - плакали бы что обратную совместимость сломали.
Хлебом не корми - дай поплакать. |
||||||||||
39
oslokot
17.06.21
✎
10:22
|
Работает - не трожь (с)
|
||||||||||
40
Почему 1С
17.06.21
✎
10:22
|
(32) а на Асинх первее не заругается?
|
||||||||||
41
1Сергей
17.06.21
✎
10:23
|
(40) кстати, да
|
||||||||||
42
fisher
17.06.21
✎
10:23
|
(41) С 18 релиза только.
|
||||||||||
43
Chai Nic
17.06.21
✎
10:27
|
(39) Оно и дальше бы работало без асинхронности. Собственно, отрасли учетных систем это нафиг не сдалось. Но пришлось влезать в облака, веб и смартфоны. А там сихронный код некомильфо.
|
||||||||||
44
Garykom
гуру
17.06.21
✎
10:28
|
(34)
>Анекдот в тему: >"Павел, а можно задать вопрос асинхронно? >А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? >Спасибо" а ты хорош! действительно просто верните синхронность на место, точнее скройте под капотом всю эту асинхронную муйню и просто разрешите писать банально ПоместитьФайл() а что там будет и как выкручиваться и синхронно или нет плевать |
||||||||||
45
1Сергей
17.06.21
✎
10:28
|
(42) Почитал. Да, всё-таки ругнётся на ждать
|
||||||||||
46
fisher
17.06.21
✎
10:47
|
(44) > скройте под капотом всю эту асинхронную муйню
Не все там так просто. Неспроста требуют функции с использованием асинхронности тоже как асинхронные в объявлении описывать. Они сразу должны особым образом компилиться/исполняться, как возвращающие промисы вместо обычных значений возврата. Для них отдельная механика и их надо сразу различать. Да и слишком много под капот - тоже плохо. Синтаксис с промисами как раз мне вполне нравится. Он и удобный/компактный и при этом не дает забыть, что происходит на самом деле. У таких же функций еще ряд особенностей есть. Передача параметров по значению, например. И это тоже нужно помнить. |
||||||||||
47
fisher
17.06.21
✎
10:50
|
Да и вообще это не 1С изобретение. Слизали с того же js.
|
||||||||||
48
Garykom
гуру
17.06.21
✎
11:01
|
(46) Все функции "как асинхронные в объявлении описывать" и все
Во многих ЯП не требуется отдельно, все зависит от вызова/контекста |
||||||||||
49
Garykom
гуру
17.06.21
✎
11:03
|
И да &НаСервере и &НаКлиенте это изврат вот с него все началось!
Надо было оставить это в разных модулях чисто серверных и чисто клиентских и чисто "без контекста" если уж так хочется |
||||||||||
50
Garykom
гуру
17.06.21
✎
11:04
|
И самый изврат это в чисто дябильном ограничении (в мозгах разработчиков) что сервер не может клиента вызывать
Ибо Сообщить() вызванное на &НаСервере каким то магическим образом сообщает на клиенте! :) |
||||||||||
51
fisher
17.06.21
✎
11:05
|
(48) > Во многих ЯП не требуется отдельно
Перечисли несколько из многих. |
||||||||||
52
fisher
17.06.21
✎
11:07
|
(49) Ты бы первый брызгать начал мол "дебилы, прыгай теперь все время между модулями, контекст держать трудно, нет чтобы через аннотации сделать!"
|
||||||||||
53
Chai Nic
17.06.21
✎
11:09
|
И кстати аннотации лучше было делать суффиксом, по типа ключевого слово "Экспорт" в определении. А без этого нелепого амперсанда.
|
||||||||||
54
Chai Nic
17.06.21
✎
11:10
|
+(53) И в этом плане Асинх как префикс - уродство дикое
|
||||||||||
55
Garykom
гуру
17.06.21
✎
11:12
|
(52) Так один хрен между модулями прыгать сейчас приходится
|
||||||||||
56
fisher
17.06.21
✎
11:12
|
(53)(54) А мне норм.
(55) Ну а был бы вообще калейдоскоп. |
||||||||||
57
Garykom
гуру
17.06.21
✎
11:13
|
Аннотации кстати это говно
Еще со времен Java раздражают где вся JPS на них |
||||||||||
58
Garykom
гуру
17.06.21
✎
11:13
|
(57) *вся JPA
|
||||||||||
59
fisher
17.06.21
✎
11:14
|
(57) Ага. Сказали в golang а потом начали комменты парсить при кодогенерации.
|
||||||||||
60
Garykom
гуру
17.06.21
✎
11:14
|
(56) модуль менеджера и модуль объекта не калейдоскоп?
|
||||||||||
61
Garykom
гуру
17.06.21
✎
11:14
|
(59) угу тоже начали местами в какую то не ту хрень идти
|
||||||||||
62
Garykom
гуру
17.06.21
✎
11:15
|
(60)+ сцуко почему не сделали "аннотации" &ЭтоМенеджер и &ЭтоОбъект ???
|
||||||||||
63
fisher
17.06.21
✎
11:15
|
(60) Нет. А вот при программировании формы без разделения экрана на две части вообще не представляю, как бы работал.
|
||||||||||
64
Garykom
гуру
17.06.21
✎
11:18
|
(63) Ты не поверишь
В свое время прекрасно "программировал форму" только кодом Да и сча когда надо 3D нарисовать беру https://ru.wikipedia.org/wiki/OpenSCAD где кодом/скриптами |
||||||||||
65
Garykom
гуру
17.06.21
✎
11:20
|
(64)+ У меня прекрасное объектно-визуальное мышление, могу за конфигуратор сам в воображении форму по коду рисовать
|
||||||||||
66
Chai Nic
17.06.21
✎
11:20
|
(60) Модуль менеджера так то штука логичная. За исключением модулей менеджера обработок и отчетов. Их использование ничем нельзя оправдать.
|
||||||||||
67
fisher
17.06.21
✎
11:20
|
(64) Я про то, что если бы код формы явно делился на два модуля, клиентский и серверный как ты предлагаешь, то человечески работать можно было бы только одновременно имея оба модуля перед глазами.
|
||||||||||
68
fisher
17.06.21
✎
11:22
|
Потому что клиент-серверный код формы плотно увязан между собой и надо постоянно держать общий контекст.
|
||||||||||
69
Garykom
гуру
17.06.21
✎
11:23
|
(67) расскажи это бэкендерам с фронтэндерами и фуллстеками веб
|
||||||||||
70
Garykom
гуру
17.06.21
✎
11:25
|
(69)+ Сцуко сколько я себя приучивал на лету читать &НаСервере и &НаКлиенте
Вместо логичного другого модуля к которым уже вполне привык до этого |
||||||||||
71
fisher
17.06.21
✎
11:25
|
(69) Это только фуллстекам рассказать можно. Остальные не поймут. А им рассказывать нельзя. Иначе они будут плакать горючими слезами и проситься в 1С.
|
||||||||||
72
Garykom
гуру
17.06.21
✎
11:26
|
(71) ты не понимаешь?
когда у тебя сервер и клиент разные то очень логично и понятно когда код в разных модулях и как раз дикая путаница если в одном с аннотациями |
||||||||||
73
fisher
17.06.21
✎
11:28
|
(72) Не. Не понимаю. Мне вполне комфортно. Никакой выгоды от отдельного модуля не вижу. А выговор от указательного пальца точно получу.
|
||||||||||
74
fisher
17.06.21
✎
11:31
|
Не. Выгоду вижу - не пришлось бы аннотации писать. Получается, сколько ты модулей предлагаешь, три? А когда захочешь одну и ту же функцию на клиенте и сервере - копи-паст или четвертый модуль?
|
||||||||||
75
DrZombi
гуру
17.06.21
✎
11:32
|
(0) Тест липовый, нужно нормально так...
С использованием всех правил 1С Языка программирования и возможности Серверной версии 1С :) |
||||||||||
76
ДенисЧ
17.06.21
✎
11:32
|
(74) Для одной функции - ln -s )))
|
||||||||||
77
Garykom
гуру
17.06.21
✎
11:37
|
(74) Я хочу сказать что контекст где выполняться должно определяться автоматически или непосредственно при запуске/вызове процедуры/функции
Т.е. модуль один и там никаких аннотаций, просто Процедура МояПроцедура() А вот в коде НаСервере МояПроцедура() или НаКлиенте МояПроцедура() если принудительно указываешь и просто МояПроцедура() если на автомат платформы полагаемся |
||||||||||
78
Garykom
гуру
17.06.21
✎
11:39
|
(77) Ву компрене?
|
||||||||||
79
Вафель
17.06.21
✎
11:40
|
(77) в 1с не увидели смысла писать такой автомат
|
||||||||||
80
Garykom
гуру
17.06.21
✎
11:40
|
(79) Точнее "не шмогла"
|
||||||||||
81
Вафель
17.06.21
✎
11:42
|
(80) просто посчитали не нужным выделять столько денег на разработку данной фичи
|
||||||||||
82
fisher
17.06.21
✎
11:49
|
(77) Уже общий? Только ж разделять хотел по модулям. Мне такое не нравится. Я хочу видеть явное разделение мест исполнения иначе легко завтыкать.
Вот контекстные/неконтекстные автоматически определять можно было бы. Но на практике это бы замедлило компиляцию модулей. Т.е. либо время старта, либо первое обращение к объекту. Это неприемлемая цена за такой сахар. Тогда только на полную предкомпиляцию переходить, а тут свои минусы. |
||||||||||
83
Serginio1
17.06.21
✎
11:53
|
(23) Тем, что в JS появился async await и уже давно. А отказ от модульности на событиях причем еще и метод в текстовом виде ....
|
||||||||||
84
Garykom
гуру
17.06.21
✎
11:57
|
(82) Или разные модуля или по контексту при вызове
А вот эти аннотации полная глупость и вынуждают иногда дублировать код, если одна функция и на клиенте и на сервере может выполняться и не надо делать долгий вызов сервера |
||||||||||
85
fisher
17.06.21
✎
12:04
|
(84) Баба Яга против. Вполне нормальный инженерный компромисс получился. А ты как-то из крайности в крайность кидаешься. То тебя хлебом не корми дай красивое разделение на клиент/сервер по модулям, то вообще не нужно никакого разделения и пускай разработчик с платформой по очереди репу чешут.
|
||||||||||
86
Garykom
гуру
17.06.21
✎
12:06
|
(85) Не надо таких компромиссов
И несколько версий платформы параллельно не надо! Нужна одна но без глюков |
||||||||||
87
fisher
17.06.21
✎
12:09
|
Я не против.
Согласен быть богатым. Согласен быть счастливым. |
||||||||||
88
fisher
17.06.21
✎
12:15
|
Что там кстати насчет (51)?
|
||||||||||
89
BIP1
17.06.21
✎
12:21
|
(0) Сначала выводится "3", потом "1,2", а потом "3,1,2".
|
||||||||||
90
Chai Nic
17.06.21
✎
15:11
|
(72) &НаСервере и &НаКлиенте это полное соответствие парадигмы пхп/джаваскрипт, когда в одном коде вперемешку и серверные и клиентские процедуры..
|
||||||||||
91
Garykom
гуру
17.06.21
✎
15:20
|
(90) эээ давным давно принято js отдавать отдельными файликами а не засовывать в динамически формируемую html кодом на php
|
||||||||||
92
minsk1s
17.06.21
✎
15:24
|
(30) Если Вы не понимаете зачем это в 1С, скорее всего Вы не понимаете, что это такое в принципе...
Чтобы не читать талмуды ИТС, небольшой FAQ по Асинх: https://1cnik.by/asinhronnye_funkcii.php |
||||||||||
93
minsk1s
17.06.21
✎
15:27
|
как-то так
3, 1, 2 |
||||||||||
94
Garikk
17.06.21
✎
15:31
|
(90) так давно никто не делает (битрикс не считается)
запросы к беку только через аякс, html шаблонной статикой, отрисовка фиксированными js-ами |
||||||||||
95
Garykom
гуру
17.06.21
✎
15:37
|
(88) http://golang-book.ru/chapter-10-concurrency.html
По сути тоже самое но у функции никакого признака Асинх в описании/объявлении нет, только при вызове И да там где надо получить ответ некий аналог Ждать |
||||||||||
96
fisher
17.06.21
✎
15:44
|
(95) Многопоточность и асинхронность - не совсем одно и то же.
|
||||||||||
97
Garykom
гуру
17.06.21
✎
15:46
|
(96) Это одно и тоже когда количество разрешенных потоков = 1
В примере на Golang многопоточность + асинхронность |
||||||||||
98
Garykom
гуру
17.06.21
✎
15:47
|
(97)+ например нода она однопоточная асинхронная изначально
|
||||||||||
99
Cthulhu
17.06.21
✎
15:53
|
(25): Матвей, там у тебя на сайте ошибка: ссылка на "2. Online консоль запросов" ведет в никуда: Not Found / The requested URL /хттп://ццц.итс22.ру/zaprosi-1s-8 was not found on this server. / Apache/2.4.6 Server at blog.sikuda.ru Port 80)
|
||||||||||
100
fisher
17.06.21
✎
15:55
|
(95)(97) Согласен. Горутины, конечно, киллер-фича.
|
||||||||||
101
oslokot
17.06.21
✎
15:58
|
(92) Асинхронность в 1с и так уже есть через оповещения, благодаря которым отслеживаются моменты завершения вызовов процедур, плюс отказ от модальности и прочие плюшки. И все это уже давно работает и в браузерах и в мобильных приложениях. Может быть и коряво все выглядит но работает. Ожидание ответа от диалоговых вызовов, обработка выбора, ожидание помещения файлов в хранилище и обратно и так далее.
То есть я о том, что уже и так все работает в браузерах как надо |
||||||||||
102
Garykom
гуру
17.06.21
✎
15:58
|
(100) блин так и я про что!
что в объявлении процедуры/функции "Асинх" нафик не надо чтобы любую можно было вызвать асинхронно и она обещание вернула в виде своего имени, которое можно использовать потом для возврата результата или статуса завершения |
||||||||||
103
ДенисЧ
17.06.21
✎
16:00
|
(101) Вот чтобы было менее коряво - приделали асинки.
|
||||||||||
104
Garykom
гуру
17.06.21
✎
16:02
|
(102)+ и отдельные не синхронные вызовы для встроенных методов платформы тоже нахрен не нужны!
те же самые юзать а поведение зависит от настроек конфы где стоит синхронно/асинхронно |
||||||||||
105
Вафель
17.06.21
✎
16:04
|
(104) в жс нужно писать, а чтобы не заморачиваться решили переложить на прогов
|
||||||||||
106
Cthulhu
17.06.21
✎
16:05
|
(101): есть - да не такое. ожидания ответа от диалоговых вызовов без потери контекста (один из вариантов - вариант в лоб в виде приостановки выполнения "как раньше в модальном режиме") - не было. теперь - есть.
|
||||||||||
107
Garykom
гуру
17.06.21
✎
16:07
|
(106) ыыы теперь мы научились асинхронно эмулировать иснхронные/модальные вызовы
|
||||||||||
108
fisher
17.06.21
✎
16:08
|
(102) Это если сразу так задизайнить. А тут чтобы не перепиливать приколотили сбоку плюшку.
|
||||||||||
109
sikuda
17.06.21
✎
16:08
|
(99) Так чего там про sikuda.ru ;0 port 80???
|
||||||||||
110
fisher
17.06.21
✎
16:09
|
В общем, дареному коню в зубы не смотрят :)
|
||||||||||
111
fisher
17.06.21
✎
16:10
|
В js вроде точно также было. Сначала на коллбэках а потом приколотили асинки точно таким же макаром.
|
||||||||||
112
sikuda
17.06.21
✎
16:25
|
(111) Так все таки что такое ВопросАсих? - https://code1c.sikuda.ru/wp-content/plugins/codemirror1c/run/question/
|
||||||||||
113
ДедМорроз
17.06.21
✎
16:36
|
Если бы результат можно было получать без ожидания,то этому бы цены не было,а когда только ждать - это костыление.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |