
Tema
13.03.2017
14:54:51

Сергей
13.03.2017
14:54:54
хаскелл вроде в это умеет
в приниципе любой фнкциональный язык в рамках ленивого исполнения при редукции выражений может выкинуть те выражения, что не приводят к редексам. Но ленивые вычисления ведь медленней работают

Tema
13.03.2017
14:54:56
его

Дед Пегас
13.03.2017
14:55:38
http://blog.ndcconferences.com/modern-diagnostics-tools-for-c-applications/

Google

Дед Пегас
13.03.2017
14:56:54
Модерн конечно, прям...

Дмитрий
13.03.2017
14:56:58
Всем привет, я хочу использовать функцию urlmksetsessionoption чтобы поменять юзер агента, но меня посылают ещё на этапе компиляции, подскажите пожалуйста что не так? Urlmon.h подключил

Дед Пегас
13.03.2017
14:57:32
https://github.com/Naios/continuable

Tema
13.03.2017
14:57:37

Andrei
13.03.2017
14:57:54

Антон
13.03.2017
14:57:59

Дед Пегас
13.03.2017
14:58:07
Лучше на пасту и ссылку сюда...

Tema
13.03.2017
14:58:31

Антон
13.03.2017
14:58:37
Да
Но сам свн лежит дохлый сука

Andrei
13.03.2017
14:58:55

Google

Andrei
13.03.2017
14:59:00
Вы говорите про рантайм.
То что хаскель доводит выражения до WHNF это понятно.
Но он делает это в рантайме, если значения известны только в рантайме.

Сергей
13.03.2017
15:02:41

Andrei
13.03.2017
15:03:08
Вот. Об этом и речь.

Tema
13.03.2017
15:03:09

Andrei
13.03.2017
15:03:12
Что возможно.
x *= 2;
if(x % 2 = 0) {...}

Tema
13.03.2017
15:03:41
ну если там ветка от проверки какой то константы
да да

Andrei
13.03.2017
15:04:25
Самый простой пример.

Tema
13.03.2017
15:04:52

Andrei
13.03.2017
15:05:05
x неизвестна на стадии компиляции, но известно, что это выражение можно элиминировать.

Сергей
13.03.2017
15:05:21

Andrei
13.03.2017
15:05:30
Плюс оптимизатор твой должен понимать, какая связь между умножением и взятием по модулю, иначе откуда он вообще может понять, что такое надо оптимизировать.
На пастбин такие портянки, пожалуйста.

Сергей
13.03.2017
15:07:13
А если x - не число?) *= и % - переопределённые операторы)

Дмитрий
13.03.2017
15:07:18
Вот ошибка))

Google

Andrei
13.03.2017
15:07:21

Сергей
13.03.2017
15:09:50
Тем более.
ну в общем я типа понял) . Однако простор для оптимизации получается несколько меньше, чем сведение к слабой нормальной форме в рантайме ленивых языков) Этот оптимизатор для с++?

Andrei
13.03.2017
15:10:30
На самом деле сведение к WHNF это покрывает.
Не для с++, свой язык.
Конечно там будет нормальная стратегия редукции выражений, но вместе с этим еще и анализ области значений.

Сергей
13.03.2017
15:12:25
Или язык запрещает side эффекты?

Andrei
13.03.2017
15:13:31
Не запрещает. Над многопоточностью еще ведутся исследования, но с кооперативной многозадачностью +- понятно.

Дмитрий
13.03.2017
15:14:39
http://pastebin.com/WAwfspwp

Сергей
13.03.2017
15:17:33

Andrei
13.03.2017
15:17:50
Типов? ТЕрмов ты имел в виду, наверно?
Она происходит и там и там на самом деле.

Сергей
13.03.2017
15:18:04

Дмитрий
13.03.2017
15:19:00
UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, usag[l], sizeof(usag[l]), 0);
Вот так функцию вызываю

Andrei
13.03.2017
15:19:59
Всё что можно статически заредуцировать компилятор заредуцирует и оставит WHNF, потом когда ты запускаешь программу и у тебя уже форсируется то или иное вычисление значение в терм подставляется и программа снова приводится к WHNF
Если же вычисления не форсируются, то осуществляется только подстановка. И всё это хпранится в виде здоровенного невычисленного chunk-а.

Сергей
13.03.2017
15:22:34
всё лень начать нормально учить язык с другой парадигмой(( было бы это нужно на работе...

Andrei
13.03.2017
15:23:56
Насколько я понимаю — нет. В рантайме те же слабозаголовочные формы.

Сергей
13.03.2017
15:24:44

Google

Дмитрий
13.03.2017
15:30:02
http://pastebin.com/WAwfspwp

Surreal
13.03.2017
15:47:53

Дмитрий
13.03.2017
15:51:02
Char usag[n][m]={};

Admin
ERROR: S client not available

Дмитрий
13.03.2017
15:52:00
Ну и потом он заполняется

Surreal
13.03.2017
15:54:02
Если закомментить строку, то компилируется?

Дмитрий
13.03.2017
15:55:02
Ага

Surreal
13.03.2017
15:58:04
А urlmon.lib подключена в зависимостях?

Дмитрий
13.03.2017
16:00:03
Нет, думал достаточно .h
А как подключить не подскажешь, недавно студией пользуюсь?)

Surreal
13.03.2017
16:05:37
Или в свойствах проекта через input - additional dependencies, или попробовать #pragma comment(lib, "urlmon") в файле, где у вас вызывается функция.
Нет, думал достаточно .h
На msdn есть секция "Requirements". Чаще заглядывайте в доки. https://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx

Vitaliy
13.03.2017
16:30:34

Дмитрий
13.03.2017
17:03:37
Я подключил с помощью прагмы .либ, а как подключить .dll, я на мсдн читаю и не понимаю нифига про неявное связывание, а явное не получается сделать, ругается
HMODULE hlib;
hlib = LoadLibrary(LPCWSTR(Urlmon.dll));
Пишет hlib не содержит класс хранения или спецификатор типа
Может как-то попроще можно подключить, подскажите кто-нибудь?

Surreal
13.03.2017
17:08:03
> Или в свойствах проекта через input - additional dependencies

Matway
13.03.2017
17:28:29
Ну это же просто предупреждение нерасторопности программиста, разве нет?
Нет. Например, есть на плюсах некий шаблон. Например, считает Фибоначчи какие-нибудь. И критерием окончания вычислений как раз и является вот такая ветка, где результат известен во время компиляции. Теперь представим себе язык, где шаблонов нет. Всё пишется в едином синтаксисе языка. При этом то, что в плюсах бы пришлось делать шаблоном, здесь делается обычным языком, но правила оптимизации этого чего-то известны заранее.
Например, мы пишем код "вызвать функцию, которая посчитает 10-е число Фибоначчи". Этот код гарантированно будет заменён на число. Если же мы этого по какой-то причине не хотим, то мы специально говорим компилятору, чтобы он забыл, что число 10 статически известно.

Google

Сергей
13.03.2017
18:02:59

Artem
13.03.2017
18:21:49
LLVM 4.0.0 (Score: 109+)
Link: http://j.mp/2nxgCiZ

Никита
13.03.2017
19:45:00
Помогите, пожалуйста, я уже не знаю, что делать. Есть такой вот код:
void f(arg0, arg1, arg2, PatchDescriptor& descriptor)
{
//тут немного операций с дескриптором
asm volatile(
"ldr q1, [%0], #16\n" //загружает 16 байт по указателю descriptor.pixels_.data_.data() в векторный регистр и увеличивает указатель на 16
//тут много кода, но его выпиливание поведение не меняет
:
:
"r"(descriptor.pixels_.data_.data()) //descriptor.pixels_.data_ -- это vector<uint8_t>
:
);
//printf("",descriptor.pixels_.data_[0]);
}
При -O0, -O1, -O2 все отлично, при -O3 и -Ofast сегфолт, при этом если раскомментировать printf после асма, все работает при любом уровне оптимизаций. Я так понял, память под вектор очищается слишком рано, но если так, то почему, если она в асме юзается? И что можно придумать, чтобы без костыля работало? Он еще и на производительность не очень хорошо влияет. Код под arm64

Surreal
13.03.2017
19:48:58
#pragma optimize( "", off ) ?

Никита
13.03.2017
19:49:40

Surreal
13.03.2017
19:50:46
Можно unique_ptr передавать в функцию.

Roman
13.03.2017
19:51:18
Эмм
А можно ли писать на плюсах эмбеддед?

Никита
13.03.2017
19:51:38

Surreal
13.03.2017
19:53:56
А что, кстати, в плюсах с volatile для ссылок? Там, вроде, траблы с кастом были. Попробуйте еще volatile к ссылке добавить, мб сработает.

Никита
13.03.2017
19:55:02
забыл указать архитектуру, дописал