Re[18]: Rust в Dropbox
От: Cyberax Марс  
Дата: 02.07.16 05:41
Оценка: 14 (1) +1
Здравствуйте, Serginio1, Вы писали:

C>>В Rust такая конструкция просто не скомпилируется:

S> Так и в C# такая конструкция вроде не скомпилируется. Еще с первых версий нельзя производить действия с итератором.
Ещё как скомпилируется, и сломается потом в рантайме. Действия идут не с итератором, а со словарём, который итерируется.

S>Хотя для словаря это не критично. Вернее для определенных его вариантов.

Это один из простых примеров, когда возникает ошибка из-за aliasing'а данных.

S>>> Что такое ET?

C>>Expression Tree — второй лик LINQ'а.
S> Ну на самом деле надо просто на этом руку набить.Отдельная специализация. Правда когда очень припрет
Ну вот и не надо делать из LINQ'а манну небесную — для коллекций это просто удобный синтаксический сахар. А работа с БД для С++ не особо актуальна.
Sapienti sat!
Re[19]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.07.16 06:03
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Serginio1, Вы писали:


C>>>В Rust такая конструкция просто не скомпилируется:

S>> Так и в C# такая конструкция вроде не скомпилируется. Еще с первых версий нельзя производить действия с итератором.
C>Ещё как скомпилируется, и сломается потом в рантайме. Действия идут не с итератором, а со словарём, который итерируется.
Да точно вспомнил. Сам же когда свой словарь делал вставлял это ограничение.

S>>Хотя для словаря это не критично. Вернее для определенных его вариантов.

C>Это один из простых примеров, когда возникает ошибка из-за aliasing'а данных.


S>>>> Что такое ET?

C>>>Expression Tree — второй лик LINQ'а.
S>> Ну на самом деле надо просто на этом руку набить.Отдельная специализация. Правда когда очень припрет
C>Ну вот и не надо делать из LINQ'а манну небесную — для коллекций это просто удобный синтаксический сахар. А работа с БД для С++ не особо актуальна.
Ну тут то предлагают делать на C++ все, что только можно.
Просто реально Linq очень удобен и прежде всего при работе с Базами данных. И в основном не делают своих провайдеров а используют Linq to EF. Со всеми его достоинствами и недостатками. Как программист 1С основная лимитирующая часть, это доступ к БД.
А с остальным справляется даже интерпритатор.
Хотя народ и пишет расширения LINQKit
Dynamically Composing Expression Predicates
https://msdn.microsoft.com/ru-ru/library/bb546158(v=vs.110).aspx
и солнце б утром не вставало, когда бы не было меня
Отредактировано 02.07.2016 6:54 Serginio1 . Предыдущая версия .
Re[20]: Rust в Dropbox
От: Cyberax Марс  
Дата: 02.07.16 06:50
Оценка:
Здравствуйте, Serginio1, Вы писали:

C>>Ну вот и не надо делать из LINQ'а манну небесную — для коллекций это просто удобный синтаксический сахар. А работа с БД для С++ не особо актуальна.

S> Ну тут то предлагают делать на C++ все, что только можно.
Конечно. И даже очень многие вещи очень удобно.

S> Просто реально Linq очень удобен и прежде всего при работе с Базами данных. И в основном не делают своих провайдеров а используют Linq to EF. Со всеми его достоинствами и недостатками. Как программист 1С основная лимитирующая часть, это доступ к БД.

Ну вот потому С++ для прикладных программистов 1С особо не актуален, хотя сама 1С написана именно на нём.
Sapienti sat!
Re[21]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.07.16 07:04
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Serginio1, Вы писали:


C>>>Ну вот и не надо делать из LINQ'а манну небесную — для коллекций это просто удобный синтаксический сахар. А работа с БД для С++ не особо актуальна.

S>> Ну тут то предлагают делать на C++ все, что только можно.
C>Конечно. И даже очень многие вещи очень удобно.

S>> Просто реально Linq очень удобен и прежде всего при работе с Базами данных. И в основном не делают своих провайдеров а используют Linq to EF. Со всеми его достоинствами и недостатками. Как программист 1С основная лимитирующая часть, это доступ к БД.

C>Ну вот потому С++ для прикладных программистов 1С особо не актуален, хотя сама 1С написана именно на нём.
Только вот если бы была написана на C# то эволюционировала бы быстрее. Все таки C# очень удобный и простой язык.
Но если сравнивать C# как язык для массового использования, то для меня он даже проще чем 1С, так как сочетает и динамику и статику и кучу сахара для быстрого кодирования.
Хотя для прикладных решений, там где нужно много кодить я бы предпочел TypeScript или Kotlin. Так или иначе нужен Вэб клиент, и у 1С в одном месте пишется как клиентская так и серверная часть (методы подразделяются на клиентские и серверные. Серверные вызываются из клиентских. Все прозрачно)
У каждого языка своя ниша.
и солнце б утром не вставало, когда бы не было меня
Re[21]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.07.16 07:30
Оценка: +1 -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Это не в тему. Смотри пример по ссылке — await из bar'а возвращает управление на самый вверх, в C# пришлось бы ставить await bar внутри foo, добавлять async, и так на всех уровнях. Тут же можно вызывать await на самом глубоком уровне, не меняя код на промежуточных.

S>> Так await и показывает, что функция асинхронная. А вот вызов просто bar воспринимается как синхронная. Где логика?

EP>Логика в том, что синхронный по форме код не нужно засорять await'ом по всему callstack. И не нужно писать две версии отличающиеся только наличием await+async. И можно взять уже готовый код типа getline, и передать в него stream который внутри делает await. Смотри пример
Автор: Evgeny.Panasyuk
Дата: 21.06.13
.


Асинхронный код должен сраз показывать, что он асинхронный. getline со стримом это пример "я могу штаны через голову". Именно эта асинхронщина и даёт проблемы, т.к. изначально однозадачный и возможно даже нереэнтерабельный код превращается в многозадачный реэнтерабельный.

await в дотнете это абстракция — абсолютно без разницы, где работает Task, в текущем потоке, в другом, размазывается по пулу или эвентлупу.

Похоже, что за три года обсуждений ты так и не понял это, но все еще борешься с частным случаем от частного случая при помощи stackfull корутин.
Re[22]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 02.07.16 07:39
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>await в дотнете это абстракция — абсолютно без разницы, где работает Task, в текущем потоке, в другом, размазывается по пулу или эвентлупу.


Так и в случае await на stackful coroutines можно перебрасывать корутины между потоками
Re[23]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.16 07:33
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>await в дотнете это абстракция — абсолютно без разницы, где работает Task, в текущем потоке, в другом, размазывается по пулу или эвентлупу.


EP>Так и в случае await на stackful coroutines можно перебрасывать корутины между потоками


Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.
Re[24]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 05.07.16 09:20
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>await в дотнете это абстракция — абсолютно без разницы, где работает Task, в текущем потоке, в другом, размазывается по пулу или эвентлупу.

EP>>Так и в случае await на stackful coroutines можно перебрасывать корутины между потоками
I>Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.

Точно также как и в случае с C# await
Отредактировано 05.07.2016 9:32 Evgeny.Panasyuk . Предыдущая версия .
Re[25]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.16 09:33
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Так и в случае await на stackful coroutines можно перебрасывать корутины между потоками

I>>Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.

EP>Точно также как и в случае с C# await


Неверно. await в C# ничего не перебрасывает.
Re[28]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 05.07.16 09:41
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>>Это не факт, что это нужно делать ради Перформанс.

EP>>Авторы этого кода сделали.
S>>> Это недостаток не Linq, а .Net.
EP>>Я не говорил что это недостаток LINQ.
S> На самом деле этот недостаток происходит от достоинства, а именно простоты и лаконичности использования.

Нет, это ортогонально простоте и лаконичности использования. Ты непонятно зачем пытаешься любыми средствами оправдать этот недостаток — пока у тебя это совсем не получается

S>А вот когда начинаю выжимать копейки, то это уже недостаток не языка, а в мозгах.


Авторы CodeJam, вы слышали? Тут Serginio1 передаёт вам привет

S>>>>>и простоте расширяемости.

EP>>>>В чём именно?
S>>> В том, что людям захотелось создать свой MinItem они его и сделали.
EP>>А я сделал свой min_element
S>>>В том числе и для IQueryable.
EP>>В том числе для встроенных массивов и всех контейнеров поддерживающих стандартный интерфейс ForwardIterator.
S> А как насчет IQueryable

И причём тут IQueryable и C++?

S>На Linq проще он поддерживает IEnumerable. Еще раз он поддерживает SQL подобный синтаксис. А как в C++?


Декларативный синтаксис Boost.Range.

S>Все я завязываю этот бесполезный спор. Соглашусь, что ребята затеяли совсем ненужную возню с генерацией кода, где проще было обойтись стандартными подходами Linq. Причем они не ушли от компаратора. Во всяком случае с MinItem.

S> В итоге нельзяделать выводы, по деятелльности отдельных пусть и уважаемых программистов. Мухи в голове бывают у всех. Особенно года времени куча.

Авторы CodeJam, вам привет №2

S> Но если пройтись по библиотеке. То увидим Action Func c кучей перегрузок по количеству параметров по моему до 64 аргументов.

S>Я на xamarin наткнулся, что больше 4 там не понимает. Вот это недостаток.

Это от отсутствия variadic generics.

S> То есть можно ввести заинлайненную специализацию только для примитивных типов


А на C++ это всё работает автоматом для всех типов
Re[26]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 05.07.16 09:43
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>>>Так и в случае await на stackful coroutines можно перебрасывать корутины между потоками

I>>>Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.
EP>>Точно также как и в случае с C# await
I>Неверно. await в C# ничего не перебрасывает.

Код после await может проснуться в другом потоке
Re[27]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.16 09:44
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>>>Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.

EP>>>Точно также как и в случае с C# await
I>>Неверно. await в C# ничего не перебрасывает.

EP>Код после await может проснуться в другом потоке


Тем не менее сам await ничего не перебрасывает.
Re[28]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 05.07.16 09:46
Оценка: +1 -1
Здравствуйте, Ikemefula, Вы писали:

I>>>>>Тогда на ровном месте возникнут проблемы с обращением к объектам которые привязаны к конкретному потоку.

EP>>>>Точно также как и в случае с C# await
I>>>Неверно. await в C# ничего не перебрасывает.
EP>>Код после await может проснуться в другом потоке
I>Тем не менее сам await ничего не перебрасывает.

А я не говорил что сам await перебрасывает. Я тебе указал на то что там ситуация аналогичная.
Ты уже от недостатка аргументов скатился к придирке к словами Всё, совсем не интересно, удачи.
Отредактировано 05.07.2016 9:47 Evgeny.Panasyuk . Предыдущая версия .
Re[29]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.16 09:59
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Код после await может проснуться в другом потоке

I>>Тем не менее сам await ничего не перебрасывает.

EP>А я не говорил что сам await перебрасывает. Я тебе указал на то что там ситуация аналогичная.

EP>Ты уже от недостатка аргументов скатился к придирке к словами Всё, совсем не интересно, удачи.

Не аналогичная. Ты предлагаешь неявный механизм, который меняет втихаря вообще все. Я говорю о явном, безопасном механизме.
Re[29]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.07.16 11:09
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Serginio1, Вы писали:


S>>>>Это не факт, что это нужно делать ради Перформанс.

EP>>>Авторы этого кода сделали.
S>>>> Это недостаток не Linq, а .Net.
EP>>>Я не говорил что это недостаток LINQ.
S>> На самом деле этот недостаток происходит от достоинства, а именно простоты и лаконичности использования.

EP>Нет, это ортогонально простоте и лаконичности использования. Ты непонятно зачем пытаешься любыми средствами оправдать этот недостаток — пока у тебя это совсем не получается

У меня нет проблем с этим недостатком. Учитывая, что я еще программирую на 1С, в том числе и на С++.


S>>А вот когда начинаю выжимать копейки, то это уже недостаток не языка, а в мозгах.


EP>Авторы CodeJam, вы слышали? Тут Serginio1 передаёт вам привет

Они мне тоже самое говорили когда то, когда я выжимал в разы. В конечном итоге я последовал их срвету.
S>>>>>>и простоте расширяемости.
EP>>>>>В чём именно?
S>>>> В том, что людям захотелось создать свой MinItem они его и сделали.
EP>>>А я сделал свой min_element
S>>>>В том числе и для IQueryable.
EP>>>В том числе для встроенных массивов и всех контейнеров поддерживающих стандартный интерфейс ForwardIterator.
S>> А как насчет IQueryable

EP>И причём тут IQueryable и C++?

Это тот же Linq
S>>На Linq проще он поддерживает IEnumerable. Еще раз он поддерживает SQL подобный синтаксис. А как в C++?

EP>Декларативный синтаксис Boost.Range.

Что то я там не увидел аналога
string[] teams = {"Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"};
 
var selectedTeams = from t in teams where t.ToUpper().StartsWith("Б") orderby t select t;
 
// выполнение LINQ-запроса
foreach (string s in selectedTeams)
    Console.WriteLine(s);


Мне это пригодится в дальнейшем.
S>>Все я завязываю этот бесполезный спор. Соглашусь, что ребята затеяли совсем ненужную возню с генерацией кода, где проще было обойтись стандартными подходами Linq. Причем они не ушли от компаратора. Во всяком случае с MinItem.
S>> В итоге нельзяделать выводы, по деятелльности отдельных пусть и уважаемых программистов. Мухи в голове бывают у всех. Особенно года времени куча.

EP>Авторы CodeJam, вам привет №2


S>> Но если пройтись по библиотеке. То увидим Action Func c кучей перегрузок по количеству параметров по моему до 64 аргументов.

S>>Я на xamarin наткнулся, что больше 4 там не понимает. Вот это недостаток.

EP>Это от отсутствия variadic generics.

Думаю решат в следующих версиях.
S>> То есть можно ввести заинлайненную специализацию только для примитивных типов

EP>А на C++ это всё работает автоматом для всех типов

На самом деле в первой версии для Arrray они так и поступали.
И еще раз тот Java, C#, JS и даже 1С прекрасно себе живут без пресловутой скрорсти, зато скорость и надежность кодирования значительно выше.
и солнце б утром не вставало, когда бы не было меня
Re[17]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.07.16 19:20
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


S>> А можно привести аналог

S>>
S>>var МаксЗнач=source.MinItem(i => i.Value)?.Value;
S>>

S>> Имея расширения мне нужно всего навсего добавиить лямбду доступа к полю. Как это выглядит на C++?

EP>Например:

EP>
EP>auto it = min_element(source, [](auto &i){ return i->value; });
EP>


S>>И как в итоге будет выглядеть итератор.


EP>В каком смысле?


S>> По алгоритму указанному в MinItem. А именно null не сравниваются для указателей.


EP>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.

EP>
EP>source | filtered([](auto &x){ return x != nullptr; })
EP>


А можно оберточку пожалуйста.
Стандартный
http://www.cplusplus.com/reference/algorithm/min_element/
Не такой. Там с перегрузкой < или bool operator()

Мне это интересно в плане изучения С++ и подтверждение твоих в 100 раз.
и солнце б утром не вставало, когда бы не было меня
Re: Rust в Dropbox
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 10.10.16 09:19
Оценка: 16 (2)
Здравствуйте, kaa.python, Вы писали:

KP>Довольно интересная новость от Dropbox, которые переписали свое хранилище с Go на Rust в целях оптимизации. Что показательно, не с Go на C++, а на Rust, что мне видится очень логичным и правильным ходом.


Ещё новость: svgcleaner переписали на Rust. Теперь уже с C++ и получили ускорение в 3 раза.
Re[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.10.16 09:39
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Ещё новость: svgcleaner переписали на Rust. Теперь уже с C++ и получили ускорение в 3 раза.


Очень круто! Похоже, что Rust очень хорош до те пор, пока не нужно сталкиваться с FFI. А вот сочетания FFI С Rust мне показалось просто редкостным трешем, фактически как JNI по уровню кошмара.
Re[2]: Rust в Dropbox
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.10.16 03:49
Оценка: 4 (1)
Здравствуйте, Nuzhny, Вы писали:

N>Ещё новость: svgcleaner переписали на Rust. Теперь уже с C++ и получили ускорение в 3 раза.


Автор пишет:

Увеличение производительности связано исключительно с алгоритмами. Rust даже немного медленнее плюсов.


И весь GUI на С++, на расте лишь консольная часть.
Re[3]: Rust в Dropbox
От: flаt  
Дата: 11.10.16 04:00
Оценка:
Здравствуйте, D. Mon, Вы писали:


DM>И весь GUI на С++, на расте лишь консольная часть.


Интересно, почему. Есть же gtk-rs, Qt, ещё что-то там.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.