
Maxim
24.03.2017
09:41:38
я про то, что если на x86 процессоре сделать структуру, где порт будет ushort, и отправить стуктуру в сокет каким-то образом, то отправится-то поток байтов, и в нем последовательность байтов в ushort порта будет little endian
нужно это иметь в виду

Oleg
24.03.2017
09:43:40
Это больше похоже на проблему протокола самого прокси
Тогда вприцнипе понятно

Google

Oleg
24.03.2017
09:44:17
А так то ядро само должно эндиан переворачивать, вона в линуксе изза этого скорость сети в серверах бывает слегка страдает
Но видимо прокси не касается

Maxim
24.03.2017
09:44:51
это не проблема) это аппаратная архитектура и спецификация протокола)
если Byte order архитектуры и протокола не совпадают, то нужно переворачивать все переменные, которые больше byte)
более того, есть архитектуры экзотические, в которых byte равен short, есть такие, где байт равен семи битам, и да, с этим всем приходится уживаться)

Oleg
24.03.2017
09:48:59

Maxim
24.03.2017
09:49:18
нет, но бывают)

Oleg
24.03.2017
09:50:40
Это всё еще выгодно такое железо закупать? Ужс

Maxim
24.03.2017
09:52:42
ну, разная endianness - это проблема распространенная, mips и arm (насчет второго не уверен) в большинстве случаев big-endian, все intel-совместимые компьютеры little-endian, остальное все экзотика)

Oleg
24.03.2017
09:53:12
В армах это переключается на лету

Maxim
24.03.2017
09:55:28
а не на уровне ос?

Oleg
24.03.2017
09:56:18
это переключаться может до загрузки ОС

Google

Pavel
24.03.2017
09:56:37

Oleg
24.03.2017
09:57:53

Maxim
24.03.2017
09:58:03

Pavel
24.03.2017
10:20:10
А вы вот такую штуку не пробовали? https://dlang.org/phobos/std_variant.html
Может с ней все еще проще?

Dmitry
24.03.2017
12:52:41
А в чем может быть проблема. Почему он connection в коде не видит?
типа потому что он в конструкторе инициализируется? Просто в первый раз вижу такую пробелму

Maxim
24.03.2017
12:54:17
это ж не в конструкторе

Pavel
24.03.2017
12:54:31
В каком методе у тебя строка 21 написана?)

Maxim
24.03.2017
12:54:38
если перенести в конструктор, все нормально будет)

Dmitry
24.03.2017
12:55:32
а смысл cmd в конструктор переносить, он же для того чтобы запросы отправлять

Maxim
24.03.2017
12:56:31
ну, короче, этот cmd в какой-нибудь метод нужно засунуть

Dmitry
24.03.2017
12:56:49
ай, тьфу
понял

Shorty(Ale Chapa) Manskiy
24.03.2017
12:58:31
что это за консоль?

Maxim
24.03.2017
12:58:52
ConEmu
удобная штука, кстати)

Dmitry
24.03.2017
13:14:06
conEmu
очень удобная штука

Google

Dmitry
24.03.2017
13:16:54
кстати, а если делать string x = import("FileName.txt") то оно файл где будет искать?
Просто у меня упорно ругался:
Error: file "FileName.txt" cannot be found or not in a path specified with -J

Grigirii
24.03.2017
13:21:11
ну он же явно написал, что пути поиска надо передать через -J. Иначе нигде не ищет
dub в vibe.d проекте по умолчанию добавляет папку с шаблонами
остальное руками добавляй сам

Dmitry
24.03.2017
13:29:04
Кто будет vibed-0.8.0 использовать, обратите внимание, что он только с DMD 2.072.2 и старше совместим. На более ранних версиях бинарики будут собираться, но он сам работать не будет. Сонк подтвердил тот баг на который я напоролся

Oleg
24.03.2017
13:48:49
а много людей вообще пользуется не последней версией компилятора?
пока не выходило ни одной версии (копилятора, библиотеки), в которой я бы не нашёл ошибки
и думаю так с каждыйм активным пользователем D, к сожалению
это достаточно хороший мотиватор обновлять версию компилятора


Shorty(Ale Chapa) Manskiy
24.03.2017
14:36:33
Я все время пользую последнии версии DMD и LDC, но не из-за того что там ошибки исправляют, а от того, что хочу чтобы кодогениратор делал более лучший код, и чтобы все фичи поддерживались.
У меня нет крупных проектов, и особых проблем с обновлением нет. А в сторонних библиотеках и приложениях постоянно что-то да не работает, и приходится держать несколько версий компиляторов.
По поводу ошибок, как писал карпов (PVS-Studio) - если вдруг вам подумалось что в компиляторе ошибка, то скорее всего ошибка у вас, а не вкомпиляторе. Это работало до D.
Разработчики MSVC++ как-то писали что исправили свыше трехсот ошибок. Я думал - Ну бля, как они смогли нахуячить столько ошибок... знал про ошибки в компиляторе C#, точнее знал что там их исправляли, но я сам никогда сними не сталкивался.
Когда же я сам нашел первую ошибку в DMD, у меня было что-то типа когнитивного диссонанса, ведь я знал что там не может быть ошибок, но современем ошибки стали нормой.
Я не сообщал об ошибках, т.к. с английским все плохо, и пока я собирался сообщить о них, больше половины уже исправили :)


Oleg
24.03.2017
14:46:02
Я все время пользую последнии версии DMD и LDC, но не из-за того что там ошибки исправляют, а от того, что хочу чтобы кодогениратор делал более лучший код, и чтобы все фичи поддерживались.
У меня нет крупных проектов, и особых проблем с обновлением нет. А в сторонних библиотеках и приложениях постоянно что-то да не работает, и приходится держать несколько версий компиляторов.
По поводу ошибок, как писал карпов (PVS-Studio) - если вдруг вам подумалось что в компиляторе ошибка, то скорее всего ошибка у вас, а не вкомпиляторе. Это работало до D.
Разработчики MSVC++ как-то писали что исправили свыше трехсот ошибок. Я думал - Ну бля, как они смогли нахуячить столько ошибок... знал про ошибки в компиляторе C#, точнее знал что там их исправляли, но я сам никогда сними не сталкивался.
Когда же я сам нашел первую ошибку в DMD, у меня было что-то типа когнитивного диссонанса, ведь я знал что там не может быть ошибок, но современем ошибки стали нормой.
Я не сообщал об ошибках, т.к. с английским все плохо, и пока я собирался сообщить о них, больше половины уже исправили :)
последний абзац, доставляет, конечно)))


Dmitry
24.03.2017
17:54:34
Как раз для любителей всего новенького beta dmd 2.074 вышла
Кстати, а как лучше всего структуры сравнить? Мне нужно найти структуру у которой одно из полей имеет максимальное значение
http://dlang.org/changelog/2.074.0.html

Shorty(Ale Chapa) Manskiy
24.03.2017
17:56:45
... ночные сборки же есть.

Dmitry
24.03.2017
18:03:23
Выбрать из 10 структур те у которых значения одного из полей максимальные доя начала. filter! Тут поможет? Структуры это же range или нет?
Или там sort!take(1) как нить...

Google

Shorty(Ale Chapa) Manskiy
24.03.2017
18:13:30
какая разница что они range или нет, важно то, в чем они у тебя хранятся, ну там массив, иил еще что.
или если ты хочешь сравнивать все поля у каждого объекта, то можно использовать свойство tupleof.
В общем, я так и не понял, что тебе нужно.

Pavel
24.03.2017
18:24:42
Походу ему нужно упорядочить структуры и найти максимальную
Нужно добавить операторы ><=

zk
24.03.2017
18:28:58
сперва ему нужно понять что есть структура (struct), а что объект

Dmitry
24.03.2017
19:09:41
ну да, получается найти структуру в которое поле (к примеру) .age максимальное

Oleg
24.03.2017
19:12:18
import std.stdio;
import std.range;
import std.algorithm;
struct Test
{
float age, sex;
string value;
}
void main()
{
auto list = [
Test(3.14, 2.7, "one"),
Test(4.20, 8.15, "two"),
Test(1.4, 6.66, "three"),
Test(9.5, 0.15, "four"),
Test(4.0, 2.0, "five"),
];
writeln(list.sort!("a.age + a.sex > b.age + b.sex").front);
}
ничего не надо переопределять

Dmitry
24.03.2017
19:12:39
Олег, спасибо)))

Oleg
24.03.2017
19:13:43
writeln(list.sort!((a,b) => a.age / a.sex > b.age / b.sex).front);

Admin
ERROR: S client not available

Oleg
24.03.2017
19:13:53
можно ещё так задавать фукнцию сравнения
если строкой, то там можно использовать только a и b
а если лямбду сам делаешь, то на твой вкус

Maxim
24.03.2017
19:14:38
https://dlang.org/phobos/std_algorithm_sorting.html#sort тут подробности)

Eto
24.03.2017
19:14:58
Без сортировки никак?

Oleg
24.03.2017
19:15:17
можно и без
а сортировка не нравится потому что "не оптимально"?

Eto
24.03.2017
19:16:48
Не нравится отсутствие понимания.

Oleg
24.03.2017
19:19:01
да, в std.algorithm появились (насколько я помню раньше не было) функции minElement и maxElement
writeln(list.maxElement!(a => a.age / a.sex));

Google

Oleg
24.03.2017
19:20:25
А ведь логично что сортировка лишняя была)
Вы учите его оптимальным решениям
Ему потом 100 гигабайт обрабатывать

Oleg
24.03.2017
19:20:59
ну...
если по серьёзному 100 гб обрабатывать, то тут нужно много работы
элементарно замерить скорости библиотечных реализаций и своих
и оптимизировать, оптимизировать и ещё раз оптимизировать
алгоритмы и исполнение
а если нужно по быстрому код написать, то можно и так себе

Oleg
24.03.2017
19:22:57
Я думаю в Д засчет крутой семантики все быстро должно быть? Разве тот код с maxElement не сгенерирует тупейший цикл для оптимальности вместо замыкания?

Oleg
24.03.2017
19:23:41

Eto
24.03.2017
19:25:07


Oleg
24.03.2017
19:25:39
maxElement не генерирует код
и цикл не совсем тупой
private auto extremum(alias map = "a", alias selector = "a < b", Range,
RangeElementType = ElementType!Range)
(Range r, RangeElementType seedElement)
if (isInputRange!Range && !isInfinite!Range &&
!is(CommonType!(ElementType!Range, RangeElementType) == void))
{
alias mapFun = unaryFun!map;
alias selectorFun = binaryFun!selector;
alias Element = ElementType!Range;
alias CommonElement = CommonType!(Element, RangeElementType);
alias MapType = Unqual!(typeof(mapFun(CommonElement.init)));
Unqual!CommonElement extremeElement = seedElement;
MapType extremeElementMapped = mapFun(extremeElement);
static if (isRandomAccessRange!Range && hasLength!Range)
{
foreach (const i; 0 .. r.length)
{
MapType mapElement = mapFun(r[i]);
if (selectorFun(mapElement, extremeElementMapped))
{
extremeElement = r[i];
extremeElementMapped = mapElement;
}
}
}
else
{
while (!r.empty)
{
MapType mapElement = mapFun(r.front);
if (selectorFun(mapElement, extremeElementMapped))
{
extremeElement = r.front;
extremeElementMapped = mapElement;
}
r.popFront();
}
}
return extremeElement;
}
min и maxElement вызывают эту функцию
тут всё просто, но не проще


Maxim
24.03.2017
19:28:09

Oleg
24.03.2017
19:29:05
есть же стикеры)