|
v8: Когда в 1с появятся замыкания? | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
ERWINS
08.05.14
✎
15:42
|
В место такого кода
&НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьОтвет", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, "Завершить работу системы?",РежимДиалогаВопрос.ДаНет, 60); Отказ = Истина; КонецПроцедуры &НаКлиенте Процедура ОбработатьОтвет(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса <> КодВозвратаДиалога.Нет Тогда ЗавершитьРаботуСистемы(Ложь); Закрыть(); КонецЕсли; КонецПроцедуры Писать более простой &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьОтвет", ЭтотОбъект); ПоказатьВопрос((РезультатВопроса, ДополнительныеПараметры) => (Если РезультатВопроса <> КодВозвратаДиалога.Нет Тогда ЗавершитьРаботуСистемы(Ложь); Закрыть(); КонецЕсли;) , "Завершить работу системы?",РежимДиалогаВопрос.ДаНет, 60); Отказ = Истина; КонецПроцедуры |
||||||||||
176
quest
13.05.14
✎
14:13
|
(173) замыкание это не заклинание! ну разбери ты любое замыкание в let-форму и увидишь что параметры передавать надо, а раз надо, то от необходимости сериализовать данные не избавиться. Ты прикольно взял 1 и 2 в части параметров. А если мне надо на сервер передать содержимое динамической таблицы?
|
||||||||||
177
quest
13.05.14
✎
14:15
|
и втрое - замыкания сами могут быть параметром. и как тогда не запутаться бедному адынэснику?
|
||||||||||
178
Serginio1
13.05.14
✎
14:16
|
(174) Замыкание это захват парам1 парам2 РевизитФрмы
Код то будет выполняться на сервере, что аналогично &НаСервереБезКонтекста Функция П2(парам1,парам2,парам3) 176 передавай что угодно смыл замыкания это уменьшить код Для примера на C# http://www.rsdn.ru/article/csharp/Closure_in_Csharp.xml#EDG создается отдельный класс |
||||||||||
179
Serginio1
13.05.14
✎
14:19
|
(177) Я не пойму в чем проблема то, что 1С ки тупые что ли?
Не вижу проблемы замыканий в качестве переменной. Наоборот вижу одни только плюсы. Проблема больше в реализации в 1С вот у кого проблема. |
||||||||||
180
quest
13.05.14
✎
14:40
|
Хендерсон "Функциональное программирование", читаешь, много думаешь и потом (если будешь так уж уверен) пытаешься озвучить мысль что в 1С с этим проблемы не будет.
|
||||||||||
181
quest
13.05.14
✎
14:40
|
и что 1С это так жизнено необходимо
|
||||||||||
182
Serginio1
13.05.14
✎
14:57
|
(180) И как это в C# по проблем не видят?
Не путай чистую функциональщину с гибридными языками. Хотя ограниченный патерн матчинг вещь нужная. (181) Для серверных вызовов да. И это тебе подвердят многие когда на каждый чих нужно городить отдельный метод. |
||||||||||
183
Леша1с
13.05.14
✎
14:59
|
(179)>>Проблема больше в реализации в 1С вот у кого проблема.
есть такая проблема. Поэтому никогда и не будет реализована в 1С. |
||||||||||
184
Леша1с
13.05.14
✎
15:01
|
(178)>>Код то будет выполняться на сервере
у 1С свое понимание, что исполнять на сервере, что - на клиенте. В 1С все это будет глючить неимоверно, т.к. обработка таких сущностей вне компетенции разработчиков 1С. Вспомнить хотя бы полуработающую Перейти...Метка (типа Goto...) |
||||||||||
185
ДенисЧ
13.05.14
✎
15:02
|
Вот блин... У Лёши даже перейти не работает...
|
||||||||||
186
Serginio1
13.05.14
✎
15:02
|
(181) Или просто даже делегаты или лямбды v8: Отбор с условием
(183) Посмотрим. Что то ты совсем плохого мнения о разработчиках 1С. Там проблем больших то нет. Обычный рефакторинг |
||||||||||
187
Ювелир
13.05.14
✎
15:04
|
Чего-то не понял, или столько постов написано из-за размещения текста процедуры внутри вызывающей процедуры? Плюс - это использование общего контекста процедур ?
|
||||||||||
188
Serginio1
13.05.14
✎
15:05
|
(184) Ты не поверишь я еще программировал на Бухгалтерии 6.0
7.0 и на моих глазах многое в 1С менялось. Так что посмотрим. |
||||||||||
189
Serginio1
13.05.14
✎
15:06
|
(187) Да. Люди не видят пользы, либо не считаю захват контекста замыканием.
|
||||||||||
190
quest
13.05.14
✎
15:13
|
(185) ну да. не работает как минимум тут v8: Выполнить. Весь мозг поломал
(189) Открой глаза, в конце концов замыкания вполне можно реализовать через напиши ВК. |
||||||||||
191
Леша1с
13.05.14
✎
15:13
|
(184)>>Там проблем больших то нет
ну да, нет, только неработающая платформа )) А так остальное правится в конфигураторе. |
||||||||||
192
quest
13.05.14
✎
15:13
|
через напиши ВК. = через ВК, напиши .
|
||||||||||
193
Леша1с
13.05.14
✎
15:15
|
(187) ну было такое в 7.7. Раз говоришь, начинал с 6.0 - должен знать.
И где теперь этот контекст? в свете " я еще программировал на Бухгалтерии 6.0, 7.0 и на моих глазах многое в 1С менялось" |
||||||||||
194
Леша1с
13.05.14
✎
15:16
|
(193) к (189)
|
||||||||||
195
Леша1с
13.05.14
✎
15:17
|
+ 193
ах, да, приобрел форму клиента УФ )) |
||||||||||
196
Serginio1
13.05.14
✎
15:18
|
(190) То есть тебе подход в 171 не нравится. Все оставить по старому через процедуры? При чем тут ВК.
(193) Ты не видишь разницу между Бухгалтерия 6.0 и Предприятие 8.3? |
||||||||||
197
Serginio1
13.05.14
✎
15:22
|
(190) Вот лямды и замыкания нужны, для того что бы к Выполнить по меньше обращаться. Для тебя Выполнить это нормально с которыми сам разобраться не можешь, а замыкания это зло.
|
||||||||||
198
Леша1с
13.05.14
✎
15:28
|
(196) не вижу
как там не работали расчеты, так здесь - не работает сбор данных. Какая разница, что не работает, если воз и ныне там. |
||||||||||
199
Леша1с
13.05.14
✎
15:29
|
+ а с 8.3 ты, видимо, сам не работал. Там даже супротив глюкавой 8.2 полная попа.
|
||||||||||
200
vqwy
13.05.14
✎
15:30
|
200
|
||||||||||
201
quest
13.05.14
✎
15:44
|
(197) зачем нужны лямбда, замыкание - я как для себя знаю и где нужно применяю, зачем это в 1С - не понимаю, вся ветка не смогла убедить в необходимости. Вот честно - никакой выгоды не вижу.
|
||||||||||
202
Ювелир
13.05.14
✎
15:45
|
Т.е. попытка реализовать сохранение контекста процедуры выполняемой на сервере, когда может потребоваться вызвать ее еще раз? Вместо явного сохранения на клиенте? Мне кажется 1с от этого пытается уйти. Ибо все это хорошо когда такие процедуры малы и контекста не много. Программист задумывается на хрена он передает икспарам и игрекпарам, когда можно этого не делать (и из-за лени (да простят меня 1С-ники, конечно, это происходит из совершенно других, более высоких мотивов :) ) - оптимизирует передачу параметров, миграцию контекста - туда-сюда). Когда есть халявный метод позволяющий запихнуть тупо все и не разбираться - срабатывает закон лени. В результате опухает передача контекста по пути клиент - сервер - клиент.
Думаю если идти предложенным 1с путем, то такие методы нам не надо, хотя это удобно с точки зрения быстро писательства. Не нужно |
||||||||||
203
Serginio1
13.05.14
✎
15:46
|
(198) Спасибо рассмешил. Ты для интереса почитай что такое Бухгалтерия 6.0. По твоим выводам на 1С писать вообще нельзя. А ведь пишут. А вэб клиент это уже отдельная платформа с использованием HTML JS.
По твоей логике Вэб клиент это чуть переделанный тольстый клиент? (201) Ответь на 196 чем тебе не нравится подход в 171. По твоей же логике Зачем нужны вычислить? |
||||||||||
204
Serginio1
13.05.14
✎
15:51
|
(202) Не должен опухать, так как компилятор должен анализировать код и если значения не изменяются то передавать только необходимые данные. Если есть изменения только в реквизитах то отслеживать эти реквизиты и изменять их на клиенте. Если изменяются табличные части то придется передавать и их. Сейчас как раз многие ради лени используют На сервере передавая полный контекст.
|
||||||||||
205
quest
13.05.14
✎
15:58
|
в (171) у тебя собственная реализация вычислить. Например так
МоеЗамыкание = новый Структура(); МоеЗамыкание.Вставить("Замыкание","Тип"); МоеЗамыкание.Вставить("х1 + х2 + х3","Код"); МоеЗамыкание.Вставить("1","х1"); МоеЗамыкание.Вставить("2","х2"); МоеЗамыкание.Вставить("3","х3"); Результат = моеВыполнить(моеЗамыкание); функция МоеВыполнить(замыкание) если замыкание.Тип = "Замыкание" тогда строкакода = замыкание.Код; для каждого х из Замыкание строкаКод = стрЗаменить(строкаКод, х.Ключ, х.Значение); конеццикла; возврат вычислилить (строкакод); конецесли; кнецфункции Это будет прямо сейчас работать в коде, то что ты предлагаешь сделать - то же самое, но на уровне платформы, исходя из того что 1 и 2 как параметры очень легко передаются. И проигнорировал вопрос - что будет если я захочу передать не числа, например захочу обойти строки динамической таблицы. И главное - как ЭТО по твоему должно реализоватся на платформе? (204) А кто тебя обманул и сказал что 1С компилятор? и что он что-то кому-то должен оптимизировать? |
||||||||||
206
Ювелир
13.05.14
✎
16:09
|
(204) Хм, а на счет #НаСервере - может тогда и не нужно более никаких других методов?
(204) понятно, что транслятор, а не компилятор (хотя, у 1с есть система предварительной компиляции). "анализировать код и если значения не изменяются то передавать только необходимые данные" - я бы заменил "значения" на используемые и/или изменяемые переменные, так как, имено это, на мой взгляд, имеется ввиду. |
||||||||||
207
Serginio1
13.05.14
✎
16:17
|
(205) Смысл замыкании как раз в рефакторинге.
Я тебе уже приводил пример как это реализовано в Net. Замыкания нужны для упрощения кода. (206) Так скажем в зависимости от мутабельности по разному передача. Например касаемо табличной части если к контексте замыкания нет вызова внешних процедур и данные не изменяются, то передавать можно не всю табличную часть а только определенные колонки. Хотя бы отслеживали и возвращали только используемые переменные и реквизиты. |
||||||||||
208
Serginio1
13.05.14
✎
16:20
|
(205) Так же как и сейчас передаешь на сервер различия нет.
Смысл в том что вместо Процедура(парам1,парам2,...парам101) Просто использовать захват этих переменных и реквизитов. |
||||||||||
209
Serginio1
13.05.14
✎
16:29
|
(205) Транслятор вместо компилятора тебя удовлетворит?
|
||||||||||
210
Serginio1
13.05.14
✎
16:32
|
209+ wiki:Компилятор
Все равно нужно 1.Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем. 2.Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора. 3.Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки. 4.Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом. |
||||||||||
211
su_mai
13.05.14
✎
16:32
|
(0) А когда в 1С один и тот же код сможет выполняться на вэб-клиенте, тонком клиенте, мобильном приложении, сервере. При этом еще указывать на каком именно сервере кластера и тп? :)
|
||||||||||
212
Serginio1
13.05.14
✎
16:48
|
(205) Заметь насколько твой код больше обычного замыкания
x1=1; x2=2; x3=3; Лямбда=() => x1+x2+x3; результат=Лямбда(); |
||||||||||
213
Asmody
13.05.14
✎
16:53
|
(212) и сразу вопрос:
если после твоего кода написать х1=2; х2=3; х3=4; результат1 = Лямбда(); чему будет равен результат1? |
||||||||||
214
Asmody
13.05.14
✎
16:54
|
точнее, чему _должен_ быть равен результат1
|
||||||||||
215
Serginio1
13.05.14
✎
17:06
|
Я уже давал тебе ссылку как это в Net реализовано.
будет как при х1=2; х2=3; х3=4; То есть в замыкании ссылки на эти переменные. |
||||||||||
216
Serginio1
13.05.14
✎
17:09
|
215+ А что касается 171 там замыкание для передачи и возврата переменных реквизитов
|
||||||||||
217
Serginio1
13.05.14
✎
17:12
|
Поэтому есть проблемы с переменными циклов
http://habrahabr.ru/post/36601/ |
||||||||||
218
Serginio1
13.05.14
✎
17:13
|
Хотя в C#5 Это уже подправили
http://deilycode.ru/index.php/2013/08/foreach-closures/ |
||||||||||
219
Serginio1
13.05.14
✎
17:33
|
(214) Если нужна неизменяемые то можно как то так
Функция ВернутьЗамыкание(знач x1,знач x2,знач x3) Лямбда=() => x1+x2+x3; возврат Лямбда КонецФункции |
||||||||||
220
Asmody
13.05.14
✎
17:38
|
(215) а вот, например, у scala на этот счет есть иное мнение
|
||||||||||
221
Serginio1
13.05.14
✎
17:48
|
(220) Ну я на скала не пишу. Ты не забывай что в функциональном программировании все рид онли (Неизменяемые типы, иммутабельные типы) окромя монад.
На C# будет так так как он гибридный язык. А с точки зрения сервеных вызовов все изменения переменных в замыкании должно переносится и в вызывающий метод. |
||||||||||
222
Asmody
13.05.14
✎
17:54
|
(221) в scala в этом смысле проще — там мутабельность переменной определяется явно и контролируются компилятором. Но побочные эффекты возможны и в этом случае.
|
||||||||||
223
iamnub
13.05.14
✎
17:57
|
(0)
Фуфел это всё, сынки. В Informix можно было указывать - на каком месте цилиндра HDD хранить таблицу! О как! |
||||||||||
224
iamnub
13.05.14
✎
18:02
|
Таблицы партионного учета - СТРОГО близка к стержню!
Восстановление партионного учета - танец у шеста! |
||||||||||
225
Asmody
13.05.14
✎
18:04
|
(223) в случае с SSD особенно актуально, да
|
||||||||||
226
Serginio1
13.05.14
✎
18:09
|
(222) Ну вот здесь пишут что изменения видны
http://blog.lakhtin.com/post/2348212568/closure scala> var more = 1 more: Int = 1 scala> val addMore = (x: Int) => x + more addMore: (Int) => Int = <function1> scala> more = 100 more: Int = 100 scala> addMore(10) res17: Int = 110 scala> more = 200 more: Int = 200 scala> addMore(10) res18: Int = 210 |
||||||||||
227
quest
13.05.14
✎
21:41
|
(207) > Смысл замыкании как раз в рефакторинге. - в мемориз
> Я тебе уже приводил пример как это реализовано в Net. - ты бы на пример реализации в lisp или clojure глянул. дя академической простоты - в ракетке > Замыкания нужны для упрощения кода. поржал (212) еще раз - это возможная на сегодня реализация замыкания, которая не потребует переписывания платформы. Причем тут размер? или синтаксис? ну глянь ты просто на CLHS что можно сделать простым макросом. ветка же не про синтаксический сахар (221) внезапно - у лиспа на этот счет тоже другое мнение. (224) круть! Резюмируя - ветка смысла не имеет, все говорят на разных языках. |
||||||||||
228
Serginio1
14.05.14
✎
10:57
|
(227) Смысл есть в упрощении кода. Еще раз в 212 намного проще использовать чем твой код в 205 почувствуй разницу и ржи себе на здоровье.
Для серверных вызовов это вообще уменьшение кода. Пусть даже на начальном этапе можно сделать рефакторинг кода в серверную процедуру. То есть пишем код в одной процедуре, затем выделяем код который должен выполняться на сервере правой кнопочкой выбираем создать серверную процедуру задаем имя и в конфигураторе создается процедура и её вызов. Если такое введут предлагаю тебе не пользоваться. Кстати ссылочки приводи для общего развития. |
||||||||||
229
quest
14.05.14
✎
11:16
|
Код из (205) это то что сейчас уже будет работать, код из 212 - твоя мечта которая не скомпилиться ни под какой платформой. Так как 1С развивает платформу не пойми как, то надеяться что в новой версии введут тот синтаксический сахар что ты указал - глупо.
Насчет ссылок - было уже. читай не вики, а учебники. Для понимания как это внутри работает - прочти Lisp in Small Pieces (есть и на русском ссылка - http://ilammy.github.io/lisp/ ) А вот по поводу "..правой кнопочкой выбираем создать серверную процедуру задаем имя и в конфигураторе создается процедура и её вызов. Если такое введут предлагаю тебе не пользоваться." - уже полгода пользуюсь. открой для себя снегопат. |
||||||||||
230
Serginio1
14.05.14
✎
11:41
|
(229) Здесь разговор не о том, что есть, а что желательно ввести для облегчения программирования. Т поверь я сам активно использую выполнить.
Тесты не проводил, но мне кажется что выполнить более медленая операция по сравнению с инлайн кодом. v8: Отбор с условием Во вторых приходится использовать текст, что неудобно по сравнению с кодом и синтаксическим контролем. Ну вот видишь в снегопате то уже есть, значит не все так уж и сложно? |
||||||||||
231
Serginio1
14.05.14
✎
11:47
|
(229) В приведенной тобой ссылке нет того что захватываются значения, а не ссылки переменных.
|
||||||||||
232
quest
14.05.14
✎
12:18
|
(230) хм.. то есть тебе достаточно регэкспов? так может так и стоило писать - хочу регэкспы выполянемые в конфигураторе, а не замыкания.
(231) ты сделал мой день. Но если что - прочти чуть дальше чем введение. |
||||||||||
233
Serginio1
14.05.14
✎
12:43
|
(232) Вообще то это регекспы это далеко не рефакторинг.
Так как нужно анализировать изменнеия и оптимизировать передачу и возврат данных. При этом выглядеть такой код будет как замыкания. Например на шарпе генерится отдельный класс. От этого суть замыкания не меняется. Меняется её реализация. Насчет изучения поверь мне и без этого есть, что изучать поэтому и прошу дать ссылку на захват переменных по ссылке или по значению в Лиспе. |
||||||||||
234
quest
14.05.14
✎
18:55
|
Когда в руках молоток, все кажется гвоздями. Если знаешь С# - то везде видишь классы. И вольно или невольно пытаешься применить свои знания и здесь.
По поводу захвата, освобождения и прочих терминов применяемых в С# - не нашел адекватной замены, но можешь прочесть пункт про лексическую и динамическую видимость из выше приведенной ссылки. 200 постов - ни о чем. |
||||||||||
235
Serginio1
14.05.14
✎
19:08
|
(234) Посмотрим что будет в 9.0. Но рефакторинг уже в ближайших версиях могут вводить
|
||||||||||
236
iamnub
14.05.14
✎
19:14
|
(234)
Хорошо сказал! |
||||||||||
237
quest
14.05.14
✎
19:49
|
рефакторинг - это не свойство языка. его ты и сейчас можешь делать (кроме лени - ничего не мешает). Если что - его еще на 77 можно было делать.
Замыкание - свойство языка, для его реализации в 1С придется переделывать платформу. |
||||||||||
238
Serginio1
14.05.14
✎
20:16
|
(237) Ну от рефакторинга wiki:Рефакторинг#.D0.92.D1.8B.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BC.D0.B5.D1.82.D0.BE.D0.B4.D0.B0_.28Extract_Method.29
Выделение метода недалеко и от совмещения серверного кода внутри клиентского, а там уже недалеко и до лямбд и замыканий. А там уже и совсем рукой подать и до Linq и Linq to DB. Начинать надо с малого. |
||||||||||
239
Serginio1
14.05.14
✎
20:20
|
В том числе можно создавать аналог расширяемого класса
v8: v8: Использование сборок .NET в 1С 7.x и 8.x |
||||||||||
240
VladZ
14.05.14
✎
20:20
|
(0) Очередная ненужная фигня... Не удивлюсь, если эту фигню пропихнут в каком-нибудь новом релизе.
|
||||||||||
241
quest
14.05.14
✎
22:08
|
(238) с твоей точки зрения получается - теплое и кислое - практически идентичные понятия. И ничем не отличаются от твердого и желтого.
(239) Сейчас тебе что это мешает сделать? (240) Не боись. не пропихнут. Потребности в этом нет. пара гиков с С# и один с лиспом - не повод менять язык. |
||||||||||
242
Asmody
14.05.14
✎
23:40
|
(241) если в типовых начнут активно использовать фоновые асинхронные вызовы, то может что-то такое и появится. Сейчас реализация тех же фоновых отчетов больше похоже на шаманство, чем на технологию
|
||||||||||
243
Serginio1
15.05.14
✎
10:32
|
(241) Здесь не проблема гиков. Linq это уже постоянное использование в том числе и Linq to EF. Индустрия развивается и борьба за клиентов идет полным ходом. Тот кто создаст удобный с максимальными возможностями инструмент тот и будет завоевывать клиентов. Ты просто отстал от времени. Например я сейчас на 7.7 программирую и получаю больше удовольствия из-за того что на 1С++ могу использовать всю мощь T-SQL.
Да и среды разработки постоянно совершенствуются. Если сравнить Visual Studio или IntelliJ IDEA. А потребность в этом есть. Просто ты этого не видишь. |
||||||||||
244
Serginio1
15.05.14
✎
11:09
|
Опачки сейчас открыл 1С:Предприятие 8.3 (8.3.5.823)
а там рефакторинг то уже есть. Например "Выделить в ассинхронную процедуру". Так что до совмещения клиентского и серверного кода недалеко |
||||||||||
245
Serginio1
15.05.14
✎
11:14
|
Блин прорустил http://v8.1c.ru/o7/201312ref/index.htm
|
||||||||||
246
quest
15.05.14
✎
12:22
|
(242) в (207) ясно сказано "Смысл замыкании как раз в рефакторинге", так что отчеты в пролете.
(243) Да. я отстал. моя среда разработки для не 1С - емакс. и необходимости в ее модификации я не вижу. Вполне нормально работает и для С++ и для лиспа. (244) Круть. Значит до замыканий осталось полшага - основное то сделано уже. чисто косметические вещи остались - переписать платформу и переобучить армию программистов. В общем, это мое последнее сообщение в этой ветке. Смысла продолжать нет. Мы действительно говорим о разных вещах разным языком. Не нужно |
||||||||||
247
Asmody
15.05.14
✎
12:24
|
[Смысл замыкании как раз в рефакторинге] — чо?!
|
||||||||||
248
quest
15.05.14
✎
12:31
|
мопед не мой, он из 207 сообщения в этой ветке
|
||||||||||
249
KuzEv
15.05.14
✎
12:33
|
После апдейта на 8.3.4.482 код, указанный у топик-стартера, отправляет платформу в дамп по таймауту, т.е. если не отвечать на вопрос в течение минуты.
|
||||||||||
250
Serginio1
15.05.14
✎
12:35
|
(246) Ты посмотри на 245. Выделение на каждый модальный вызов отдельную процедуру еще то удовольствие.
Можно просто поместить ассинхронный код внутри например метода АссинхронныйВызов( ВыбранноеЗначение=ВыбратьИзМеню(СписокВыБора,Элементы.КомандаМеню); Ф=154; ) (248) Для выделения серверного кода или ассинхронного достаточно рефакторинга, который генерит методы при компиляции этакий аналог макроса который активно используется например в Немерле. |
||||||||||
251
Serginio1
15.05.14
✎
12:39
|
(247) На самом деле сначала анализируется захватываемый контекст и в итоге генерится новый код при компиляции.
Например если используются переменные то создается класс с этими переменными доступ которым осуществляется как из вызывающей процедуры так и замыкания. Реализации могут быть различными. |
||||||||||
252
Анцеранана
15.05.14
✎
12:40
|
Слишком сложный руский синтаксис для простого парня из маленькой северо-мадагаскарской деревушки. Точки , стрелочки, скобочки (( Придумай проще!
Не нужно |
||||||||||
253
Serginio1
15.05.14
✎
12:43
|
|||||||||||
254
Serginio1
15.05.14
✎
12:44
|
(250) Чем для тебя 250 сложен?
|
||||||||||
255
Serginio1
15.05.14
✎
15:08
|
в C# для упрощения работы с ассинронностью ввели
async и await http://habrahabr.ru/post/162353/ |
||||||||||
256
dmpl
16.05.14
✎
08:37
|
(168) Чтобы не писать портянку - любая коллекция КлючИЗначение к вашим услугам.
(179) Да нет никакой проблемы. Разработчикам платформы это просто не нужно. Ведь этого никто кроме обслуги не увидит. А вот внешние плюшки - очень даже нужны, заказчика впечатлить. |
||||||||||
257
dmpl
16.05.14
✎
08:44
|
(212) Заметь, насколько проще ошибиться в таком коде, если подумаешь, например, что x1 уже давно не используется, и используешь для своих целей.
|
||||||||||
258
dmpl
16.05.14
✎
08:51
|
(243) Клиентов заработает тот, кто создаст хороший конечный продукт. Как он сделан внутри - 99,9% клиентов не интересует вообще.
(244) Осталось все это дело отладить :) (250) АССинхронный - это от слова ASS? Т.е. по-русски - через-задницу-в-будущее? |
||||||||||
259
ERWINS
16.05.14
✎
23:36
|
Ассинхронное программирование это тренд.
А замыкания там в тему. |
||||||||||
260
dmpl
17.05.14
✎
10:09
|
(259) Вот блин, даже как название правильно пишется не знаете, а все туда же... аСинхронное оно. А ассинхронное - это через задницу получается.
|
||||||||||
261
Serginio1
17.05.14
✎
10:24
|
(260) Прошу прощение за неправильное написание. Но вот то, что тренд существует это факт. При этом async и await значительно сложнее чем
АссинхронныйВызов( ВыбранноеЗначение=ВыбратьИзМеню(СписокВыБора,Элементы.КомандаМеню); Ф=154; ) см 255 Главное, что бы упростить код, а через что это будет сделано глубоко наплевать. 250 легко делается через рефакторин во время компиляции кода в промежуточный код (AST дерево wiki:%C0%E1%F1%F2%F0%E0%EA%F2%ED%EE%E5_%F1%E8%ED%F2%E0%EA%F1%E8%F7%E5%F1%EA%EE%E5_%E4%E5%F0%E5%E2%EE) или трехадресный код wiki:%CA%EE%E4%EE%E3%E5%ED%E5%F0%E0%F6%E8%FF |
||||||||||
262
Serginio1
17.05.14
✎
10:49
|
Ну и можно посмотреть на байт код в 1С http://kb.mista.ru/article.php?id=519
|
||||||||||
263
quest
18.05.14
✎
15:51
|
" делается через рефакторин во время компиляции кода" - а как рефакторинг (изменение текста! программы) можно сделать в момент анализа AST? и как этому помогут замыкания?
|
||||||||||
264
Serginio1
18.05.14
✎
20:35
|
(263) Посмотри http://v8.1c.ru/o7/201312ref/index.htm
Там как таковые замыкания и не нужны. Просто генерация года во время компиляции. Это же касается и серверного кода внутри клиентского. |
||||||||||
265
Serginio1
18.05.14
✎
20:49
|
Вернее так скажем нет явного использования замыканий.
Посмотри на async и await http://habrahabr.ru/post/162353/ |
||||||||||
266
quest
19.05.14
✎
12:25
|
Вот зарекался я суда писать. Но блин нельзя же так в одну кучу сваливать все вместе. Возьми ты книжку любую - как минимум sicp - и прочитай что такое замыкание. Затем прочитай у Фаулера что такое рефакторинг. И попытайся найти хоть одно сходство.
А то все вместе - и асинхронность, и замыкания, и рефакторинг, и видимо скоро китайский язык потребуется (ибо тренд от которого нельзя отмахнуться) Насчет посмотри туда или сюда - все что ты пытаешься показать - не изобретения Майкрософта, использовалось это все еще в 90 году и нормально работало в лиспе, начиная с 2003 - перекочевало в ракету где стало еще лучше работать. В общем не все вокруг гвозди. И читай не только вику |
||||||||||
267
Serginio1
19.05.14
✎
12:45
|
(266) Ты мне только на один вопрос ответь, что тебе не нравится код в 261 и 171. Чем для тебя плох Linq, await.
Почему лисп несмотря на его мощность не получил такого распространения чем тот же C#. |
||||||||||
268
quest
19.05.14
✎
13:48
|
По пунктам - почему не понравился? - код не баба. его задача работать, а не нравиться. Но конкретно по куску
АссинхронныйВызов( ВыбранноеЗначение=ВыбратьИзМеню(СписокВыБора,Элементы.КомандаМеню); Ф=154; ) тут у тебя мешаются 2 подхода к написанию, которые сложно читать. Убери осмысленные имена и ты получишь ф(х=у(й)) что приводит к увеличению времени чтения кода Код должен быть однородным и не напрягать при чтении. Хреновый сахар короче ты предлагаешь. Как было бы лучше? Не знаю. Чем плох linq и прочий модный набор слов? Да ничем. Как впрочем ничем и не хорош. а если впихивать его вневпиху*мое - так даже вреден. Почему лисп не получил распространения? Не знаю. Наверное потому что детям чернобыля было проще прочитать книжку "Освой программирование на C# за 21 день" чем htdp, paip или sicp. Да того же Страуструппа не читали. Как логичный результат подобного обучения - рефакторинг не сделать без асихроности и замыканий. |
||||||||||
269
iamnub
19.05.14
✎
13:54
|
(268)
Сегодня ты рефакторинг без замыканий делаешь, а завтра?! А завтра ты запросы в цикле крутить будешь! |
||||||||||
270
quest
19.05.14
✎
14:03
|
(269) :) ты сделал мой день!
|
||||||||||
271
iamnub
19.05.14
✎
14:14
|
(270)
;) |
||||||||||
272
Serginio1
19.05.14
✎
14:33
|
(268) То есть по твоему вместо 268 вот это легче читается?
ПоказатьВыборИзМеню(Новый ПоказатьВыборИзМеню("КомандаМенюЗавершение",ЭтотОбъект),СписокВыбора,Элементы.КомандаМеню); Процедура КомандаМенюЗавершение(результат,ДополнительныеПараметры) Экспорт ф=154 КонецПроцедуры (269) Еще раз посморти на await и все, что за ним стоит. Народ тоже раньше писал BeginXXX EndXXX. Не было анонимных делегатов и замыканий. Как только все это появилось народ с большим удовольствием начал писать по новому. По поводу LINQ то там ты можешь писать запросы и в цикле, которые в итоге будут разворачиваться в один запрос. Тогда у меня нет вопросов. Наверное у тебя просто потребность писать лишний код, который к тому же еще и хуже читается. |
||||||||||
273
quest
20.05.14
✎
14:10
|
Да, проще читается.
Народ до сих пор такое пишет на С++ и ничего, не пишут гневные письма в комитет по стандартизации. Странная ситуация, не находишь? Приведи пример когда запрос в цикле будет разобран в один запрос. Вот здесь - v8: Мощь LINQ-а, или 1С и не снилось. написан простой запросик. Измени его так что бы бегая по массиву слов он отобрал все первые большие буквы при условии что массив обходиться циклом. Как они в итоге развернутся? На вкус и цвет как говориться. Но ради эксперимента покажи свой код 100 коллегам и попроси охарактеризовать его. |
||||||||||
274
Serginio1
20.05.14
✎
16:19
|
(273) Ну там в цикле можно условия задавать.
v8: Мощь LINQ-а, или 1С и не снилось. там запрос состоит из двух запросов |
||||||||||
275
Serginio1
20.05.14
✎
16:24
|
(273) Ну мои коллеги с удовольствием используют await
А конструкция из 261 На C# будет такой выбзнач = await ВыбранноеЗначение=ВыбратьИзМенюAsync(СписокВыБора,Элементы.КомандаМеню); // Код который ниже будет выполняться после того как выполнится выбор // При этом не будет блокировки основного потока Если выбранноеЗначение<>неопределено Тогда Ф=154; КонецЕсли; Ну а сишникам я сочувствую. Особенно когда они мучаются с IDispatch и прочим |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |