@ProCxx

Страница 166 из 2477
Andrei
13.05.2016
16:10:38
Зачем ей это делать? :D

Сергей
13.05.2016
16:10:48
Бля

Andrei
13.05.2016
16:10:53
В однопоточном с++ модель вычислений строго последовательная.

И конечно в итоговом коде это не так, но да.

Google
Сергей
13.05.2016
16:11:07
Откуда ты вообще узнал про ленивые вычисления :D

Andrei
13.05.2016
16:11:21
Ленивые вычисления это совсем другое, срсли.

Это стратегия редукции лямбда термов.

В языках типа хаскелль и пр.

[Anonymous]
13.05.2016
16:11:54
вычисления следует откладывать до тех пор, пока не понадобится их результат.

это про ленивые

Andrei
13.05.2016
16:12:02
Это то как приводить программу к слабозаголовочной нормальной форме

[Anonymous]
13.05.2016
16:12:03
вот я и подумал

Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат.

Aldar
13.05.2016
16:12:34
тут нет лямбдя термов))

это С++

Andrei
13.05.2016
16:12:51
Да, поэтому про с++ нельзя сказать о ленивых вычислениях

это не функциональный язык

Google
Aldar
13.05.2016
16:13:04
хотя в руби есть ленивые вычисления

Andrei
13.05.2016
16:13:14
модель с++ это последовательные вычисления

другое дело, что на уровне компилятора есть реордеринг

[Anonymous]
13.05.2016
16:13:29
в плюсах про ленивые можно только сказать когда идет проверка на && и все?

Andrei
13.05.2016
16:13:30
и оптимизация

Aldar
13.05.2016
16:13:36
вот ты написал let(:user) { create(:user) }, пока не использовал переменную user, то ничего не создаётся

Andrei
13.05.2016
16:13:56
на уровне процессора есть реордеринг и branch prediction

Еще есть execution policy для фьючеров

[Anonymous]
13.05.2016
16:15:17
кароче вот что я не понял

Andrei
13.05.2016
16:15:21
std::launch::async \std::launch::deferred

[Anonymous]
13.05.2016
16:15:40
Уж простите за глупые вопросы, но еще поспрашиваю https://tour.golang.org/flowcontrol/7 (Both calls to pow are executed and return before the call to fmt.Println in main begins.) т.е. функции выполняются заранее, еще перед тем как в main() идет их вызов?

В тех же плюсах, на сколько помню, функции выполняются только после их вызова, верно?

нет

там написано, что обе pow выполнятся до того, как Println будет вызвана

То есть, заходим в блок fmt.Println , выполняем все что внутри, и уже запускаем fmt.Println чтобы вывести эти значения

да

но это во всех языках так, кроме тех, где ленивые вычисления есть

А в ленивых тогда как?

Andrei
13.05.2016
16:16:28
Ну человек не совсем прав.

Google
Andrei
13.05.2016
16:16:34
Но вообще в ленивых может быть так

у тебя функция print взяла аругмент

но на самом деле у тебя аргумент не вычислился

до вызова функции

[Anonymous]
13.05.2016
16:17:05
Так, да

Andrei
13.05.2016
16:17:12
вместо аргумента в print передаётся указатель на отложенные вычисления

и идёт выполнятся print

может внутри там вообще аргумент не понадобится

и тогда он не вычислится никогда

в с++ аргументы функции до её вызова вычисляются всегда

в этом смысле это всегда eager

энергичные вычисления

Aldar
13.05.2016
16:18:01
но в каком порядке не говорится

Andrei
13.05.2016
16:18:10
не суть, главное, что вычисляются

до вызова функции

Aldar
13.05.2016
16:18:17
да

Andrei
13.05.2016
16:18:44
в аналоге лямбда исчеления это значит, что сначала в теле лямба терма редуцируются все подтермы, а потом уже само тело лямбды

[Anonymous]
13.05.2016
16:18:52
вместо аргумента в print передаётся указатель на отложенные вычисления
на отложенные вычисления? т.е. это для "ленивых" языков вроде хаскеля, так?

Andrei
13.05.2016
16:18:52
а ленивые или их еще называют нормальные

это когда сначала редуцируется тело лямбды, а потом уже тела её аргументов—подтермов

Google
Andrei
13.05.2016
16:19:18
в с++ аргументы вычисляются всегда

Ну это модель вычисления c++

[Anonymous]
13.05.2016
16:21:02
Так вот я тупой еще раз, не могу разницу чуток понять, вот есть у print аргумент, но он не вычислен, в плюсах и go он вычисляется, и потом print их выводит, а в ленивых как

Andrei
13.05.2016
16:21:11
но конечно компилятор може это поведение изменить, но так чтобы не изменилось так называемое observable behaviour

окей

давай поясню

Aldar
13.05.2016
16:21:25
@Doaxan, попробуй хаскель поучи)

Andrei
13.05.2016
16:21:28
вот у тебя есть функция

щас про плюсы

Admin
ERROR: S client not available

Andrei
13.05.2016
16:21:56
void foo(int arg1, bool arg2) { if(arg2) { arg1++; } }

Aldar
13.05.2016
16:22:09
http://www.youtube.com/watch?v=7BPQ-gpXKt4&list=PLlb7e2G7aSpRDR44HMNqDHYgrAOPp7QLr

Andrei
13.05.2016
16:22:23
Бтв

на видео

денис москвин

Aldar
13.05.2016
16:22:31
рекомендую, заодно поймёшь откуда функциональщина вообще взялась

Andrei
13.05.2016
16:22:38
чувак который у меня преподавал хаскель

в универе

и которому яодин из немногих сдал на отл экзамен

Google
[Anonymous]
13.05.2016
16:22:55
щас про плюсы
слушаю внимательно)

Aldar
13.05.2016
16:23:07
https://stepic.org/course/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5-Haskell-75/syllabus

вот его курс ещё

Andrei
13.05.2016
16:23:20
а степик это проект универа в котором я учился :3

энивей, про плюсы.

Andrei
13.05.2016
16:23:58
void foo(int arg1, bool arg2) { if(arg2) { arg1++; } }
вот здесь вызов foo(x*x , false);

Aldar
13.05.2016
16:24:02
Я прошёл, не жалею, на многое глаза открываются)

Andrei
13.05.2016
16:24:17
будет вычислять x*x в любом случае

потом записывать на стек это значение и вызывать foo

аналогичный код в хаскеле

не будет вычислять x*x

Aldar
13.05.2016
16:25:03
@Doaxan, откуда ты вообще эту ленивость взял?

обычно про неё особо не знают пока хаскель не потрогают

Andrei
13.05.2016
16:25:27
он сначала зайдет в foo()

увидит, что arg2 == false

[Anonymous]
13.05.2016
16:25:38
@Doaxan, откуда ты вообще эту ленивость взял?
я же выше отписал, мне написали что в ленивых по-другому, вот я и затупил

Andrei
13.05.2016
16:25:51
и забъет на вычисление первого аргумента, который равен x*x

[Anonymous]
13.05.2016
16:26:18
Andrei
13.05.2016
16:26:53
Мы говорим про рантайм.

foo(x*x , y);

y заранее неизвестно

плюсы всегда вычислят x*x

Страница 166 из 2477