Re: Rust в Dropbox
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 15.03.16 08:39
Оценка: +6 :))) :))) :))) :)))
Здравствуйте, kaa.python, Вы писали:

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

Давай подождём ещё немного.
Sic luceat lux!
Re[2]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 23.03.16 01:05
Оценка: 19 (4) +1
KP>Ответы разработчиков Dropbox про использование Rust.

Well, we basically needed C++, but:

Dropbox doesn't have a strong C++ ecosystem on the backend, and it takes a lot of work to build one.
Given (1), we had basically a blank slate, and our team is C++ and Haskell type folks, we decided to use Rust so we could get C++ with better type safety and fewer sharp corners.

So realistically, if we had been at a place with an awesome preexisting set of C++ libraries, practices, etc, we probably never would have used Rust.

Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.03.16 07:50
Оценка: 10 (2) +1 -1 :)
Довольно интересная новость от Dropbox, которые переписали свое хранилище с Go на Rust в целях оптимизации. Что показательно, не с Go на C++, а на Rust, что мне видится очень логичным и правильным ходом. Так что всех поздравляю, в полку серьезных решений написанных на Rust, к довольно долго одиноко там стоявшему Servo добавилось еще одно не менее сложное решение
rust go
Re[22]: Rust в Dropbox
От: MaxxK  
Дата: 18.10.16 11:48
Оценка: 19 (3) +1
Здравствуйте, Ikemefula, Вы писали:

I>Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


Пример реализации файловой системы, написанной в среде Coq, язык программирования для которой не является полным по Тьюрингу (с некоторыми оговорками, которые, насколько я могу сказать по итогам быстрого просмотра кода, в этом случае неактуальны).
Код также содержит доказательство того, что реализация ФС не потеряет ранее записанные данные при неожиданном отключении.

Статья: http://adam.chlipala.net/papers/FscqSOSP15/FscqSOSP15.pdf
Код: https://github.com/mit-pdos/fscq-impl

Для приведённых ранее примеров интерактивных приложений типа блокнота достаточно легко представить себе реализацию в виде набора обработчиков событий от пользователя, каждый из которых завершим на любых входах.
Отредактировано 18.10.2016 11:50 MaxxK (грамматика) . Предыдущая версия .
Re[4]: Rust в Dropbox
От: so5team https://stiffstream.com
Дата: 11.10.16 06:03
Оценка: 4 (1) +3
Здравствуйте, rumit7, Вы писали:

R>Ну объективности ради, стоит привести и следующее предложение автора:

R>

Но так как это личный проект — пишу на том, на чём удобно. А это Rust. От плюсов слишком много боли.


R>Хотя мне как плюсовику, его слова причиняют "слишком много боли"


У автора svgcleaner специфический взгляд на C++, например, он принципиально не использует STL, плюс его опыт ограничен рамками работы с Qt и не сильно новыми версиями самого C++. Ну а если оставаться в рамках C++ with Classes, отказываться от STL и исключений, то да, боли будет гораздо больше и переход на Rust будет иметь смысл.
Re[7]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.03.16 12:28
Оценка: +2 :))
Здравствуйте, jazzer, Вы писали:

J>Go — да, но не Rust. Есть мнение, что зоопарк указателей в Rust (и преобразований оных) сравним по сложности с С++. И что если у тебя нет команды из людей, разбирающихся в хитросплетениях модели памяти Rust-а, то народ просто перейдет на повсеместное unsafe и на выходе ты получишь тот же овнокод, только вид сбоку.


Не, ну это разрулить элементарно. Добавляешь в твой любимый CI сервер правило – нашли блок unsafe == сборка провалилась и проблема решена
Re[5]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 23.03.16 02:13
Оценка: 2 (1) +1 :)
Здравствуйте, sergey2b, Вы писали:

S>если не секрет в чем проблеммы с С++

S>и ведь необязательно использовать последний стандарт

Проблем в C++ нет. Проблемы в людях которые на нем пишут есть. Слишком часто хочется смотря на результат "обнять и плакать".
Отредактировано 23.03.2016 2:14 kaa.python . Предыдущая версия .
Re[9]: Rust в Dropbox
От: Klikujiskaaan КНДР  
Дата: 28.04.16 15:55
Оценка: +3
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.

AVK>>Алгоритмическая выразительность языка тут совершенно не причем.

EP>Так где эта выразительность, если по факту пришлось генерить килостроки, причём буквально на ровном алгоритмическом месте?


По факту: ты бегаешь из темы в тему, пытаясь всем доказать, что С++ круче всех, у тебя комплексы какие-то по этому поводу?
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: 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[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[7]: Rust в Dropbox
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 12.10.16 04:08
Оценка: 4 (2)
Здравствуйте, alex_public, Вы писали:

DM>>А еще, если кто не видел:

DM>>https://dlang.org/blog/2016/10/07/project-highlight-dlangui/
DM>>Там и Андроид, и даже текстовый режим!

_>О, не видел. В то время, когда я игрался с D, данного проекта не было видно на горизонте. Судя по скриншотам очень не плохое решение. Тем более, что они похоже рисуют контролы сами, но при этом копируя системные (идеология Qt). Разве что скринов с Андроида не видно. Но если и там всё в порядке, то прямо уже так и тянет попробовать перевести какой-нибудь из GUI проектов на подобную библиотеку. А то Qt утомило уже своей монструозностью. Единственное что не хватает графического редактора форм для данной библиотеки.


Да, DLangUI что-то вроде года назад лишь возник.
Вместо графического редактора там есть редактор, где слева пишешь декларативное описание на DML, а справа тут же видишь, во что это воплощается.
Я этой весной один из главных продуктов своих перевел на D и DLangUI, впечатления весьма положительные.
см. http://www.infognition.com/VideoEnhancer/screenshots.html (Version 2)
Что порадовало по сравнению с монстрами вроде Qt, тут GUI библиотека добавляет меньше мегабайта к размеру exe-шника, линкуясь статически, и никаких DLL-ок вообще не нужно.
Отредактировано 12.10.2016 4:11 D. Mon . Предыдущая версия .
Re[4]: Rust в Dropbox
От: sergey2b ЮАР  
Дата: 23.03.16 01:57
Оценка: :))
Здравствуйте, kaa.python, Вы писали:

KP>К примеру у нас в компании все больше и больше команд (включая нашу) отказывается от C++ в пользу чего-либо ещё.


если не секрет в чем проблеммы с С++
и ведь необязательно использовать последний стандарт
Re[4]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 23.03.16 02:11
Оценка: :))
Здравствуйте, kaa.python, Вы писали:

KP>Всё верно, инфраструктуры не было ни для C++, ни для Rust. Выбрали C++?


Может для Rust уже были необходимые библиотеки, по его словам не ясно

KP>К примеру у нас в компании все больше и больше команд (включая нашу) отказывается от C++ в пользу чего-либо ещё.


У нас основные неудобства от C++ это сборка и поддержка всех сторонних зависимостей под все три OS в нескольких конфигурациях. Но всё то же самое будет справедливо для любого другого native языка, да и не native тоже, ибо все эти зависимости именно native и без аналогов.
Проблемы которые решает borrow checker — это мизер, который мог бы сыграть роль только при прочих сферических равных. Возможно в других проектах как-то по-другому

По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.
Для сравнения C#, свежий пример
Автор: Evgeny.Panasyuk
Дата: 23.03.16
— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода (1 + 2) причём включая кодогенетратор, который генерирует несколько тысяч строк, а алгоритм-то совсем пустяковый.
Отредактировано 23.03.2016 2:18 Evgeny.Panasyuk . Предыдущая версия .
Re[7]: Rust в Dropbox
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.04.16 15:27
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.


Алгоритмическая выразительность языка тут совершенно не причем.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 28.04.16 15:45
Оценка: +1 -1
Здравствуйте, AndrewVK, Вы писали:

EP>>Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.

AVK>Алгоритмическая выразительность языка тут совершенно не причем.

Так где эта выразительность, если по факту пришлось генерить килостроки, причём буквально на ровном алгоритмическом месте?
Re[8]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 11:41
Оценка: +2
Здравствуйте, Ikemefula, Вы писали:

EP>>Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.

I>Сначала ты намекал, что архитекторы не тем занимались. Сейчас оказывается, что соображения были вполне конкретные практические. Выходит, архитекторы вполне себе решали реальные проблемы ?

Опять проблемы с логикой?
Они решали вполне конкретные практические проблемы, возникшие из-за недостатка языка/платформы. В соответствии же с выкладками IT (в другой теме, кстати, ты хотя бы ссылки делай чтобы другим понятно было) у них типа много времени, вплоть до обгона C++ архитектурными решениями на 2000%. Я же показываю на что по факту же тратится это время.
Андерстенд?
Re[13]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.06.16 08:18
Оценка: +1 -1
Здравствуйте, Cyberax, Вы писали:

S>>Либо делается на макросах, шаблонах так, что понять, где начало где конец тяжело. Если в .Net все прозрачно, можно найти ответы на любые вопросы. То для С++ стоит попотеть.

C>Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.

В С++ такой механизм принципиально нереализуем, ибо нет языковой поддержки. Отсюда только наколеночные локальные поделки со много более сложной механикой, при много меньших возможностях.
Re[15]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 04:38
Оценка: :))
Здравствуйте, Evgeny.Panasyuk, Вы писали:


S>> А шаблоны сразу в бинарный код?


EP>А зачем в текст? Чтобы заново парсить?


А теперь задай себе вопрос, почему шаблоны так долго компилятся?
Критика шаблонов

Шаблонное метапрограммирование в С++ страдает от множества ограничений, включая проблемы портируемости, отсутствие поддержки отладки или ввода/вывода в процессе инстанцирования шаблонов, длительное время компиляции, низкую читабельность кода, скудную диагностику ошибок и малопонятные сообщения об ошибках


SS>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
Да.
S>> К тому, что на шаблонах придется делать то же самое.

EP>Не придётся — в C++ типы равнозначны, нет деления на value/reference, поэтому нет необходимости обрабатывать эти ситуации по отдельности.

Даа? То есть у long как и у long* есть null? Для long 0!=null
EP>И вообще, даже если придётся профильтровать элементы — то для этого не нужно вручную инлайнить код пропуска элементов — это ортогонально, достаточно взять например boost::adaptors::filtered.

Бери што хошь. Только сделай мне аналог использования

А можно привести аналог
var МаксЗнач=source.MinItem(i => i.Value)?.Value;

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

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



S>>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.


EP>Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?

А ну да есть еще log файлы и VS для отладки.

S>>>>асинхронное программирование

EP>>>Что "асинхронное программирование"? Говори конкретно.
S>>async await

EP>Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.

Пример пожалуйста.

S>>>> Конечно С++ много своих достоинств. Но программировать на C# проще.

EP>>>Это всё относительно. Вот конкретный обсуждаемый пример min/max на C++ проще
S>> Давай свою конкретную реализацию.

EP>Я уже приводил.


Она не соответствует тому, что в реализации min/max. Смотри выше.
S>>То, что ты привел нужно создавать отдельный класс с функтором.

EP>Читай что такое лямбды в C++.

Еще раз покажи пример. Только и всего.
S>>И как там в C++ c Nullable?

EP>Есть boost::optional.


EP>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:

EP>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>3) Информацию о том найдено ли что-то или нет

На Linq это делается значительно проще. И можно писать свои расширения как с MinItem
Методы Skip и Take


Еще раз приведи пример на С++ с boost::optional.
var МаксЗнач=source.MinItem(i => i.Value)?.Value;
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.07.2016 6:34 Serginio1 . Предыдущая версия . Еще …
Отредактировано 01.07.2016 4:57 Serginio1 . Предыдущая версия .
Re[21]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 10:13
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>>>Если задачи в вакууме — то не нужна.

EP>>>Нет, самые обыкновенные задачи http://rsdn.ru/forum/security/6074456.1
Автор: kochetkov.vladimir
Дата: 10.06.15

I>>Сможешь написать операционку на языке который не обладает полнотой по тьюрингу, да или нет ?

EP>Причём тут написание OS и обыкновенные задачи?


Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.
Re[23]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 12:59
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>расскажи, что за приложение можно написать без полноты по тьюрингу.


EP>Самое обыкновенное. Например опердень — достал данные из файла/базы, показал пользователю, принял ввод и записал обратно — и в каком месте приложения тут нужна полнота по Тьюрингу?


База, на секундочку, тьюринг-полный вычислитель. Опаньки !

EP>Да и вообще, строго говоря наши компьютеры не обеспечивают полноту по Тьюрингу.


Строго говоря — да. И при этом есть небольшой минимум, в который не входят даже функции, который позволяет написать вообще всё.

I>>Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


EP>Причём тут внешний интерпретатор?


См выше.
Re[27]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 20:10
Оценка: -2
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>А как понимать "фича ХХХ не нужна ?" Поясни, а то непонятно.


EP>Смотри контекст
Автор: Ikemefula
Дата: 30.06.16
.

EP>Ты заявил что аналог не реализуем,

Враньё. Учимся читать вместе: "везде будет местечковая наколеночная поделка."

>тебе ответили что вполне реализуем, но особо никому не нужен, мол поэтому и нет готового.


Цитирую себя "А нужен глобальный механизм." — Такое достигается только языковыми средствами или стандартом, а не сторонними библиотеками. Все такие библиотеки дают местечковую наколеночную поделку.
Re[23]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 21:48
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>В чём конкретно не разобравшись?
EP>Я указываю на конкретный недостаток, из-за которого опытные C# разработчики решили использовать текстовую кодогенерацию для примитивнейшего алгоритма. Ты же непонятно зачем пытаешься сделать вид что так и должно быть
И в чем этот недостаток? если я 1С ник тебе привожу примеры о которых ты говоришь?
Мне просто интересно какой именно? То, что я видел на по итераторам даже твои примеры сливают линку как по синтаксису, лаконичности и простоте расширяемости.
и солнце б утром не вставало, когда бы не было меня
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[3]: Rust в Dropbox
От: rumit7  
Дата: 11.10.16 05:44
Оценка: +2
Здравствуйте, D. Mon, Вы писали:

DM>Автор пишет:

DM>

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


Ну объективности ради, стоит привести и следующее предложение автора:

Но так как это личный проект — пишу на том, на чём удобно. А это Rust. От плюсов слишком много боли.


Хотя мне как плюсовику, его слова причиняют "слишком много боли"
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: Rust в Dropbox
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.03.16 10:25
Оценка: 3 (1)
Здравствуйте, kaa.python, Вы писали:

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


Интересно, что их прижала не производительность CPU, а проблемы с памятью.

В принципе, если в языках со сборкой мусора писать в стиле

for (;;) {
  rq = new Request();
  rq.ReadFromNetrowk();
  rq.Process();
  rq.SendReply();
}


то эти самые rq будут накапливаться, как сумасшедшие, пока сборщик мусора до них не доберется. В Go, к тому же, довольно наивный escape analyser (штука, которая пытается понять, переживает ли объект выход из блока, в котором он создан с целью решить, создавать его в куче или на стеке), поэтому даже невинная декларация локальной переменной может обернуться тем, что переменная фактически будет создаваться в куче.

Но тем не менее, я почти уверен, что в их случае можно было бы обойтись переписыванием критического участка кода, без необходимости переписывать все подряд.
Re[5]: Rust в Dropbox
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.10.16 11:47
Оценка: 2 (1)
Здравствуйте, alex_public, Вы писали:

_>Оффтопик. Увидел по ссылке на библиотеки Rust'а незнакомую мне GUI библиотеку (https://github.com/andlabs/libui) и пошёл посмотреть что там такое. Оказался крайне любопытный проект. Это кроссплатформенная (windows/osx/linux) GUI библиотека с нативными контролами, написанная на C, а не на C++. С точки зрения программиста на C++ тут естественно нет ничего интересного. А вот с точки зрения программистов Rust/D/Nim и других пока ещё маргинальных языков это может быть крайне важно. Потому как большинство из них страдают от отсутствия вменяемой GUI библиотеки и при этом все они позволяют бесшовно использовать C (но не C++, на котором сейчас написано практически всё приличное в этой области) библиотеки.


Так по этой ссылке в разделе Language Bindings уже есть байндинги для всех упомянутых Rust/D/Nim.

А еще, если кто не видел:
https://dlang.org/blog/2016/10/07/project-highlight-dlangui/
Там и Андроид, и даже текстовый режим!
Re[5]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 23.03.16 02:20
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Может для Rust уже были необходимые библиотеки, по его словам не ясно


Да вроде всё очевидно, у Rust вообще мало что есть. Он же младенец

EP>У нас основные неудобства от C++ это сборка и поддержка всех сторонних зависимостей под все три OS в нескольких конфигурациях.


В Rust это решено довольно хорошо.

EP>Но всё то же самое будет справедливо для любого другого native языка, да и не native тоже, ибо все эти зависимости именно native и без аналогов.


Как я уже ответил sergey2b, проблема C++ в другом. Он очень очень сложный и подобрать команду, которая будет его хорошо знать требует невероятных усилий и далеко не все могут себе это позволить. Даже Гугл не может, чему Go отличное подтверждение.

EP>Проблемы которые решает borrow checker — это мизер, который мог бы сыграть роль только при прочих сферических равных. Возможно в других проектах как-то по-другому


Да не в этом проблема. Мы сейчас, к примеру, заменили C++ на Go в одном проекте. Просто тупо потому, что в Go почти ничего нельзя и написать на нем адов код сложно. При этом все необходимые базовые вещи есть.

EP>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.


Да, верно. Но мы опять вернемся к вопросу цены всей этой радости и возможности набора большой команды способной это вытянуть. Я на C++ уже лет 15 и врятли буду с него уходить. Но все же отдаю себе отчет в том, что в большинстве случаев он просто неподъемно сложен для больших команд.
Отредактировано 23.03.2016 2:25 kaa.python . Предыдущая версия .
Re[6]: Rust в Dropbox
От: jazzer Россия Skype: enerjazzer
Дата: 24.03.16 12:26
Оценка: :)
Здравствуйте, kaa.python, Вы писали:

KP>Как я уже ответил sergey2b, проблема C++ в другом. Он очень очень сложный и подобрать команду, которая будет его хорошо знать требует невероятных усилий и далеко не все могут себе это позволить. Даже Гугл не может, чему Go отличное подтверждение.


Go — да, но не Rust. Есть мнение, что зоопарк указателей в Rust (и преобразований оных) сравним по сложности с С++. И что если у тебя нет команды из людей, разбирающихся в хитросплетениях модели памяти Rust-а, то народ просто перейдет на повсеместное unsafe и на выходе ты получишь тот же овнокод, только вид сбоку.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[7]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 11:23
Оценка: -1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

AVK>>Вот только не надо передергивать. Алгоритмически все что надо делает одна единственная версия. Все остальное — перегрузки для удобства использования и борьба с перформансом в рамках платформы.


EP>Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.


Сначала ты намекал, что архитекторы не тем занимались. Сейчас оказывается, что соображения были вполне конкретные практические. Выходит, архитекторы вполне себе решали реальные проблемы ?

EP>Про рамки платформы какое-то непонятное замечание, как-будто есть какая-то другая C# платформа где этого не потребовалось бы


C# платформ вообще говоря очень много. В этом году вроде как выходит очередная. Везде всё чуть-чуть по разному.
Re[12]: Rust в Dropbox
От: Cyberax Марс  
Дата: 29.06.16 21:24
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

EP>>Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.

S> Угу. Вы до Linq нормального еще не доросли. Не говоря о Linq to EF. То, что sqcpp это наколеночная поделка. асинхронное программирование. Итд. Причем это целостное решение, а не кто то, где то, что там сделал.
А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?

S>Либо делается на макросах, шаблонах так, что понять, где начало где конец тяжело. Если в .Net все прозрачно, можно найти ответы на любые вопросы. То для С++ стоит попотеть.

Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.
Sapienti sat!
Re[13]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.06.16 08:21
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

S>>Причем это целостное решение, а не кто то, где то, что там сделал.

EP>Типа linq2db, да? Те же кто-то, где-то

expression tree и linq это основа многих библиотек, которые за счет этого очень легко и дешево стыкуются. В С++ нет смысла вводить в стандартную библиотеку аналог IQueryable, пока в языке нет хотя бы expression
Re[14]: Rust в Dropbox
От: Cyberax Марс  
Дата: 30.06.16 17:11
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

C>>Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.

I>В С++ такой механизм принципиально нереализуем, ибо нет языковой поддержки. Отсюда только наколеночные локальные поделки со много более сложной механикой, при много меньших возможностях.
Реализуем, хотя с менее приятным синтаксисом (см.: expression templates). Просто особо нафиг никому не нужен. А в Rust'е, к сожалению, вообще любые макросы можно делать.
Sapienti sat!
Re[16]: Rust в Dropbox
От: Cyberax Марс  
Дата: 30.06.16 22:01
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

C>>Реализуем, хотя с менее приятным синтаксисом (см.: expression templates). Просто особо нафиг никому не нужен. А в Rust'е, к сожалению, вообще любые макросы можно делать.

I>Реализуем это значит, что везде будет местечковая наколеночная поделка. А нужен глобальный механизм.
Зачем? Для фильтрации коллекций вполне достаточно обычных лямбд и прочих.
Sapienti sat!
Re[18]: Rust в Dropbox
От: Cyberax Марс  
Дата: 01.07.16 09:21
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

C>>Зачем? Для фильтрации коллекций вполне достаточно обычных лямбд и прочих.

I>Выражения нужны не для фильтрации, а как удобный механизм для промежуточного процессинга, как контроль над вычислениями. Пишешь код как обычно, а он может выполниться и на клиенте, и на сервере, и в видеокарте, и в базе данных, и на другом сервисе. А может вообще часть вычислений нужно просто скипнуть за ненужностью.
Ну вот не надо мне сказки рассказывать только. Обобщённые запросы возможны примерно только на уровне Эллы-Людоедочки, а потому не интересны вовсе.

LINQ рулит в качестве:
1) Типизированного интерфейса для доступа к БД.
2) В качестве удобного синтаксического сахара для работы с коллекциями.

Эти области на практике почти не пересекаются.
Sapienti sat!
Re[19]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 09:38
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

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

C>Ну вот не надо мне сказки рассказывать только. Обобщённые запросы возможны примерно только на уровне Эллы-Людоедочки, а потому не интересны вовсе.

Я ничего не говорил про обобщенные запросы, это твоя фантазия.

C>LINQ рулит в качестве:

C>1) Типизированного интерфейса для доступа к БД.

Экспрешны != linq.

1 Экспрешны это контроль вычислений — оптимизации, инструме всех сортов, включая рендеринг, ввод-вывод и тд и тд. То есть, взаимодействие с вычислителем другой природы-архитектуры.
2 Экспрешны это типизированый интерфейс к любым источникам данных, а не только БД. Частный случай п1.

C>2) В качестве удобного синтаксического сахара для работы с коллекциями.

C>Эти области на практике почти не пересекаются.


Успокойся, про коллекции никто и не говорил.
Re[19]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 14:00
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


SS>>>>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S>>>> Да.
EP>>>Что "да"?
S>> Это относится к тому, что ты охаял.

EP>Где охаял? Можешь целиком сформулировать мысль?

https://github.com/rsdn/CodeJam/blob/e86dc27fadd28f7932a0c840f5356e98cfa7a40c/Main/src/Collections/EnumerableExtensions.AggregateFuncs.cs
EP>>>Например:
EP>>>
EP>>>auto it = min_element(source, [](auto &i){ return i->value; });
EP>>>

S>> А теперь код element. И что бы было различие между ссылочными и валуе типами.

EP>Я приводил код, нужен только wrapper в пару строк для Range интерфейса, о котором я сразу и сказал
Автор: Evgeny.Panasyuk
Дата: 23.03.16
.

Ну вот нужно добавить. По сути и получится тоже самое. Да и на самом деле мне как пользователю наплевать как внутри реализовано. Главное быстро и удобно. Смотри на конечный результат.

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

EP>>>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.
EP>>>
EP>>>source | filtered([](auto &x){ return x != nullptr; })
EP>>>

S>> То есть мы должны сначала отфильтровать по null а затем применять искать минимум?

EP>Нет, не "сначала" отфильтровать, а применить ленивый фильтр, который даст вид range без nullptr.

То есть делать то же самое, что тебе не понравилось. У ребят сделано тоже самое. Только две ветки для валуе типов и Nullable

S>>Пока это никак не тянет на

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

EP>Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант

И будет в итоге тоже самое.
S>>Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?

EP>Да.


S>>А кто готовит автомат? В .Net этим занимается компилятор.


EP>Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.

Я с вас хренею любите вы словами бросаться. По поводу await async куча статей с разбором как все работает. По С++ все туго.
Хоть бы ссылку на толковую статью.

S>>Кстати по поводу

S>> // await is not limited by "one level" as in C
S>>Есть мнтоды Task WhenAll , WhenAny

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

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

S>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.


EP>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

Я то как раз изучаю и понимаю о чем ты говоришь.
Выложил статью Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
Исходники лежат Здесь


Выложил статью
Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
Исходники здесь

Советую и тебе C# подтянуть.
S>>Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
S>> То есть твой вариант не универсален.

EP>Почему он не универсален?

Я не могу его применить одинаково для валуе и ссылочных типов с учетом null.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.07.2016 14:02 Serginio1 . Предыдущая версия .
Re[24]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 22:12
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

EP>>В чём конкретно не разобравшись?

EP>>Я указываю на конкретный недостаток, из-за которого опытные C# разработчики решили использовать текстовую кодогенерацию для примитивнейшего алгоритма. Ты же непонятно зачем пытаешься сделать вид что так и должно быть
S> И в чем этот недостаток?

AVK>>>>>включая перегрузки для простых типов.
EP>>>>Зачем? Вообще конечно количество boilerplate поражает.
AVK>>>Перформанс
EP>>Я думал для value-типов и так разный код генерируется. Или это не тот случай?
AVK>Операторы сравнения, увы, дженерики не умеют. А сравнение через IComparer уже не утаптывается до простого сравнения примитивов.


S>То, что я видел на по итераторам даже твои примеры сливают линку как по синтаксису,


Дополнительные скобочки у лямбды, auto и return?
auto it = min_element(source, [](auto &i){ return i->value; });
vs
var МаксЗнач = source.MinItem(i => i.Value)?.Value;


S>лаконичности


Сотни строк и текстовая кодогенерация для MinItem — апогей лаконичности.

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


В чём именно?
Re[26]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 22:52
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>>>То, что я видел на по итераторам даже твои примеры сливают линку как по синтаксису,

EP>>Дополнительные скобочки у лямбды, auto и return?
S> Да. То есть для тебя первый вариант смотрится более читабельным?

Отличия минимальные — auto, return и скобочки.

S> Кстати а каков аналог ? в C++? https://habrahabr.ru/company/enterra/blog/252099/


Необходимость повсеместных проверок на null — это "особенность" C#.

S>>>лаконичности

EP>>Сотни строк и текстовая кодогенерация для MinItem — апогей лаконичности.
S> Ну люди так решили сделать?

Да, решили, ради обхода недостатка C#

S>Специализация шаблона выдаст тот же самый результат.


Только на C++ этим занимается компилятор, а на C# разработчики клеят строчки

S>На самом деле потери на применении IComparer есть, но они есть везде.


На C++ этих потерь нет, by-design.

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


Авторы этого кода сделали.

S> Это недостаток не Linq, а .Net.


Я не говорил что это недостаток LINQ.

S>Кстати сам был таким, пока не понял, что удобство и скорость разработки важнее.


Так а я о чём — легче написать десятки строк и пусть компилятор оптимизирует, чем сотни строк с текстовой кодогенрацией

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

EP>>В чём именно?
S> В том, что людям захотелось создать свой MinItem они его и сделали.

А я сделал свой min_element

S>В том числе и для IQueryable.


В том числе для встроенных массивов и всех контейнеров поддерживающих стандартный интерфейс ForwardIterator.
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[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[9]: Rust в Dropbox
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 13.10.16 12:02
Оценка: :)
Здравствуйте, flаt, Вы писали:

F>Я слышал, что в DLangUI есть темы (скины), но на этих скринах софт выглядит как Linux в Windows.


Да, есть темы. Дефолтные довольно самобытные (не совпадают с нативными нигде), здесь у меня своя тема. Если хочется условно нативного лука, надо делать соответствующую тему, готовой пока нет.
Проблема еще в том, что в той же винде уже с десяток разных стилей накопился, что считать нативнымт- непонятно. Например, на Win 8.1 функция WinAPI GetOpenFileName, если ей забыть один параметр передать, показывает такое:

Re[22]: Rust в Dropbox
От: vdimas Россия  
Дата: 17.10.16 14:30
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


Да большинство, от консольных утилит, то того же Notepad никакой полноты по Тьюрингу не требуют.
Re[23]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.10.16 14:50
Оценка: -1
Здравствуйте, vdimas, Вы писали:

I>>Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


V>Да большинство, от консольных утилит, то того же Notepad никакой полноты по Тьюрингу не требуют.


Гипотетически — да, и не большинство, а 100%, с учетом конечной памяти вычислителя. А практически — хрен тебе.
Re[24]: Rust в Dropbox
От: vdimas Россия  
Дата: 17.10.16 19:00
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>>>Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.

V>>Да большинство, от консольных утилит, то того же Notepad никакой полноты по Тьюрингу не требуют.

I>Гипотетически — да, и не большинство, а 100%, с учетом конечной памяти вычислителя. А практически — хрен тебе.


А практически ты плаваешь в предмете, по-видимому, бо огромный пласт задач являются конечными, т.е. соответствующие им ф-ии — вычислимыми за конечное число шагов, т.е. никакая бесконечная лента этим задачам не нужна.

Пример задачи, где требуется "настоящая Тьюринг-машина" — парсер по контекстно-свободной грамматике.

Пример задачи, где НЕ требуется полноценный Тьюринг-вычислитель: текстовый редактор (без вложенных стилей, который), GUI-приложение (пусть будет приложение учёта финансов) да и вообще любая задача, выражаемая через эквивалентный конечный автомат или их систему, например, графические и физические игровые движки и игры на их основе.
Re[28]: Rust в Dropbox
От: MaxxK  
Дата: 19.10.16 21:14
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

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


MK>>Но при этом понять, какого количества памяти будет достаточно, в общем случае для программ, написанных в Coq, нельзя.


I>Ну вот ты сам себе дал объяснение. Потому утверждать "полнота по Тьюрингу не нужна" мягко говоря преждевременно. Пока что никто не продемонстрировал внятный инструмент, который решит насущные задачи нежели языки с полнотой по Тьюрингу. вот и всё.


Почему преждевременно? Для программ «обычного человека» у нас есть характеристики корректности «наверное не упадёт», «наверное посчитает правильный ответ», «наверное не повиснет» и «наверное хватит памяти/стека». Для программ «курильщика Coq» эти характеристики — «точно не упадёт», «точно посчитает правильный ответ», «точно не повиснет», «наверное хватит памяти/стека». 3 гарантии из 4 (да даже 1 из 2, как в исходном примере), на мой взгляд, вполне себе повод для заявлений «полнота по Тьюрингу не нужна».

Если же порассуждать о том, как мог бы выглядеть внятный инструмент для доказательства характеристик по памяти, то неполные по Тьюрингу предметно-ориентированные языки с линейными (как в Rust) типами, или какая-то система и с линейными, и с зависимыми типами, мне кажутся многообещающими направлениями. Неполнота по Тьюрингу здесь появляется не сама по себе, а как необходимое условие корректной работы анализаторов кода.

Но пока у нас в production, к сожалению, не наступило светлое будущее даже с позиций избавления от стандартных ошибок при работе с памятью, не говоря уже о доказательствах корректности реализации алгоритмов. Поэтому (насколько видно мне, могу ошибаться) гораздо больше работ по извлечению пользы из Тьюринг-неполных языков публикуется именно по этим направлениям.
Re[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.03.16 09:06
Оценка:
Здравствуйте, Kernan, Вы писали:

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

K>Давай подождём ещё немного.

Ну давай подождем, а то я уже начал лопату расчехлять
Re: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 22.03.16 23:56
Оценка:
Ответы разработчиков Dropbox про использование Rust.

Из показавшегося интересным мне:

> Are you happy using rust ?

Yes, overall the team has been very pleased with it. Compile times are the only serious complaint.


> How many lines of rust code are you using in production ?

About 60k of our own, about 300k incl crates.


> Are you using nightly? or just stable version of rust?

We're pinned to a particular nightly right now, as we rely on a fair amount of features that are still stabilizing. I imagine we'll be on a stable by this summer.

Re[3]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 23.03.16 01:32
Оценка:
Кстати, в Dropbox для кроссплатформенных мобильных приложений используют C++:
https://isocpp.org/blog/2015/06/cppcon-2014-a-deep-dive-into-2-cross-platform-mobile-apps-written-in-cpp-t

At Dropbox we’ve spent the last year and a half building two cross platform mobile apps: the email client, Mailbox, and the photo gallery, Carousel. We started with the goal of a native look and feel with seamless performance but also needed to leverage a small team to build these apps on multiple platforms. We ultimately accomplished this by using C++ to share significant amounts of code in each app.

We’ll cover what portions of our apps we built in C++ and why we left some portions in the platform languages of Java and Objective-C, deep diving into some of the most important components. We’ll also discuss some unexpected benefits, areas we faced technical and human challenges, and some tips and tricks that you can use to leverage C++ to build very high performance apps.

Re[3]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 23.03.16 01:49
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>

EP>So realistically, if we had been at a place with an awesome preexisting set of C++ libraries, practices, etc, we probably never would have used Rust.


Всё верно, инфраструктуры не было ни для C++, ни для Rust. Выбрали C++? Но в принципе я согласен, пока что, от этого чудища (я о плюсах) довольно сложно отказаться, кто бы спорил. Но при том, каким сложным он становится и как быстро и хорошо развивается Rust, я полагаю, этот момент не за горами.

К примеру у нас в компании все больше и больше команд (включая нашу) отказывается от C++ в пользу чего-либо ещё.
Re[6]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 23.03.16 09:14
Оценка:
Здравствуйте, kaa.python, Вы писали:

S>>если не секрет в чем проблеммы с С++

S>>и ведь необязательно использовать последний стандарт

KP>Проблем в C++ нет. Проблемы в людях которые на нем пишут есть. Слишком часто хочется смотря на результат "обнять и плакать".


В инструментах проблем никогда не бывает. Проблема всегда исключительно с людьми, которые пытаются использовать инструменты. Других вариантов просто нет.
Re[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.03.16 00:29
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Интересно, что их прижала не производительность CPU, а проблемы с памятью.


Да, это мне тоже кажется немного странным. Мы тут недавно общались с CloudFlare и по их утверждениям, на Go только DNS-сервер не вышел, ну, вернее вышел, но получился тормозной малек. А вот как и почему вылезли проблемы с памятью

Pzz>Но тем не менее, я почти уверен, что в их случае можно было бы обойтись переписыванием критического участка кода, без необходимости переписывать все подряд.


Согласен, уход с Go на мой взгляд немного странно выглядит, все же этот язык именно под сервисы и сети реально заточен. Ну, в любом случае Ave, Rust!
Re: Rust в Dropbox
От: _VW_ Марс  
Дата: 24.03.16 08:40
Оценка:
Здравствуйте, kaa.python, Вы писали:

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



вспомнилось

А теперь давай посмотрим на эту ситуацию с другой стороны. На эту/эти вакансии в ДБ так же придется сдавать зачет по алгоритмам, сортировать гномиков и заниматься другой аналогичной гомосятиной. Но, до кучи, тебе еще устроят зачет по Rust! Это реально возможность, факт
Ты, похоже что, не понимаешь самого главного. Важен не инструмент, супер языка не было и пока не предвидится. А вот предметные области были, есть и будут.



https://rsdn.ru/forum/flame.comp/6027816?tree=tree
Автор: kaa.python
Дата: 25.04.15
Re[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.03.16 09:40
Оценка:
Здравствуйте, _VW_, Вы писали:

_VW>вспомнилось


Да я знаменитость, за постами следят

_VW>https://rsdn.ru/forum/flame.comp/6027816?tree=tree
Автор: kaa.python
Дата: 25.04.15


Только тут о другом. Haskell никогда и ничего не заменит, это был, есть и будет язык для энтузиастов. Rust – может основательно потеснить C++ в тех областях где C++ пока еще силен. И эта тенденция видна.
Re: Rust в Dropbox
От: __kot2  
Дата: 24.03.16 13:31
Оценка:
а сколько у них там кода? строчек 10? чего там такого код может делать в дропбоксе? аутентификация?
Re[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.03.16 13:39
Оценка:
Здравствуйте, __kot2, Вы писали:

__>а сколько у них там кода? строчек 10? чего там такого код может делать в дропбоксе? аутентификация?


Я выше приводил ответ на этот вопрос. Но так как некоторым важнее что-нибудь ляпнуть, нежели чуть-чуть прочесть, я специально для тебя повторю:

> How many lines of rust code are you using in production ?

About 60k of our own, about 300k incl crates.

Re[3]: Rust в Dropbox
От: _VW_ Марс  
Дата: 24.03.16 14:18
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Да я знаменитость, за постами следят


это был мой пост.



_VW>>https://rsdn.ru/forum/flame.comp/6027816?tree=tree
Автор: kaa.python
Дата: 25.04.15


KP>Только тут о другом. Haskell никогда и ничего не заменит, это был, есть и будет язык для энтузиастов. Rust – может основательно потеснить C++ в тех областях где C++ пока еще силен. И эта тенденция видна.



о rust'e/c++ ты на моей памяти менял мнение на противоположное несколько раз за последний год. а уж на хаскеле ты не пишешь вообще, поэтому не нужно говорить о том, в чем не разбираешься.
почему про Руст "потеснит", а про Хаскел — "заменит"?

тенденция, что Хаскел становится более популярным, тоже есть. Я сам на опыте убедился.
Re[4]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.03.16 15:37
Оценка:
Здравствуйте, _VW_, Вы писали:

_VW>о rust'e/c++ ты на моей памяти менял мнение на противоположное несколько раз за последний год. а уж на хаскеле ты не пишешь вообще, поэтому не нужно говорить о том, в чем не разбираешься.


А в чем там нужно разбираться? Иметь опыт разработки на Haskell? Зачем? Этот опыт продать практически не возможно, язык 10 энтузиастов с невнятной сферой применения. При этом язык имеет высокий порог входа, т.е. совсем никуда.

_VW>почему про Руст "потеснит", а про Хаскел — "заменит"?

_VW>тенденция, что Хаскел становится более популярным, тоже есть. Я сам на опыте убедился.

Ты увидел две вакансии на нем?
Re[3]: Rust в Dropbox
От: __kot2  
Дата: 24.03.16 17:44
Оценка:
Здравствуйте, kaa.python, Вы писали:
KP>About 60k of our own, about 300k incl crates.
и что он делает? все авторизация? я тоже могу 60 тысяч строк на расте намолотить прямо сейчас. если не требуется что бы он что-то делал.
это как со скайпом да, вроде бы несколько тысяч программистом им заняты, но единственный видный результат их деятельности, что они что-то ломают. а делать надо! надо же отчитываться за проделанную типа работу.
Отредактировано 24.03.2016 18:11 __kot2 . Предыдущая версия .
Re[5]: Rust в Dropbox
От: _VW_ Марс  
Дата: 25.03.16 01:24
Оценка:
Здравствуйте, kaa.python, Вы писали:

_VW>>о rust'e/c++ ты на моей памяти менял мнение на противоположное несколько раз за последний год. а уж на хаскеле ты не пишешь вообще, поэтому не нужно говорить о том, в чем не разбираешься.


KP>А в чем там нужно разбираться? Иметь опыт разработки на Haskell? Зачем? Этот опыт продать практически не возможно, язык 10 энтузиастов с невнятной сферой применения. При этом язык имеет высокий порог входа, т.е. совсем никуда.


следить за новостями, тенденциями. фейсбук был приведен в пример и standard chartered банк.



_VW>>почему про Руст "потеснит", а про Хаскел — "заменит"?

_VW>>тенденция, что Хаскел становится более популярным, тоже есть. Я сам на опыте убедился.

KP>Ты увидел две вакансии на нем?


я их не искал. а меня нашли.
Re[4]: Rust в Dropbox
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 28.03.16 04:02
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Кстати, в Dropbox для кроссплатформенных мобильных приложений используют C++:

EP>https://isocpp.org/blog/2015/06/cppcon-2014-a-deep-dive-into-2-cross-platform-mobile-apps-written-in-cpp-t
EP>

At Dropbox we’ve spent the last year and a half building two cross platform mobile apps: the email client, Mailbox, and the photo gallery, Carousel.


И что примечательно, оба этих проекта уже выкинуты на помоечку.
https://blogs.dropbox.com/dropbox/2015/12/saying-goodbye-to-carousel-and-mailbox/
Re[5]: Rust в Dropbox
От: Skorodum Россия  
Дата: 29.03.16 10:56
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>И что примечательно, оба этих проекта уже выкинуты на помоечку.

DM>https://blogs.dropbox.com/dropbox/2015/12/saying-goodbye-to-carousel-and-mailbox/

А мне карусель нравилась...
Re[5]: Rust в Dropbox
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.04.16 12:16
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.

EP>Для сравнения C#, свежий пример
Автор: Evgeny.Panasyuk
Дата: 23.03.16
— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода (1 + 2) причём включая кодогенетратор, который генерирует несколько тысяч строк, а алгоритм-то совсем пустяковый.


Вот только не надо передергивать. Алгоритмически все что надо делает одна единственная версия. Все остальное — перегрузки для удобства использования и борьба с перформансом в рамках платформы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 19.04.16 14:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

EP>>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.

EP>>Для сравнения C#, свежий пример
Автор: Evgeny.Panasyuk
Дата: 23.03.16
— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода (1 + 2) причём включая кодогенетратор, который генерирует несколько тысяч строк, а алгоритм-то совсем пустяковый.

AVK>Вот только не надо передергивать. Алгоритмически все что надо делает одна единственная версия. Все остальное — перегрузки для удобства использования и борьба с перформансом в рамках платформы.

Никакого передёргивания, для пустякового алгоритма вам пришлось нагенерить килостроки кода, из вполне конкретных практических соображений.
Про рамки платформы какое-то непонятное замечание, как-будто есть какая-то другая C# платформа где этого не потребовалось бы
Re[10]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 28.04.16 16:05
Оценка:
Здравствуйте, Klikujiskaaan, Вы писали:

K>По факту: ты бегаешь из темы в тему,


Эта тема про C++ в том числе

K>пытаясь всем доказать, что С++ круче всех,


C++ не круче всех.
Re[9]: Rust в Dropbox
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.04.16 16:57
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Так где эта выразительность, если по факту пришлось генерить килостроки, причём буквально на ровном алгоритмическом месте?


Опять за рыбу деньги. Генерить пришлось не из-за алгоримтических проблем. Алгоритмически достаточно ровно одного generic метода.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 11:44
Оценка:
Здравствуйте, Ikemefula, Вы писали:

AVK>>>Вот только не надо передергивать. Алгоритмически все что надо делает одна единственная версия. Все остальное — перегрузки для удобства использования и борьба с перформансом в рамках платформы.

EP>>Про рамки платформы какое-то непонятное замечание, как-будто есть какая-то другая C# платформа где этого не потребовалось бы
I>C# платформ вообще говоря очень много. В этом году вроде как выходит очередная. Везде всё чуть-чуть по разному.

Так покажи же ту, в которой этот костыль не понадобился бы (смотри выделенное)
Re[5]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 14:45
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:



EP>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.

EP>Для сравнения C#, свежий пример
Автор: Evgeny.Panasyuk
Дата: 23.03.16
— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода

Шаблоны С++ в итоге выдадут ту же массу кода при специализации.
У них просто специализация сделана через Т4. В итоге получаем одно и тоже.
и солнце б утром не вставало, когда бы не было меня
Re[9]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 15:07
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Они решали вполне конкретные практические проблемы, возникшие из-за недостатка языка/платформы. В соответствии же с выкладками IT (в другой теме, кстати, ты хотя бы ссылки делай чтобы другим понятно было) у них типа много времени, вплоть до обгона C++ архитектурными решениями на 2000%. Я же показываю на что по факту же тратится это время.


IT нигде не говорит, что на C# всегда можно получить гарантированые 2000% относительно С++. Речь про экономику проекта, её никто пока не отменял.
Re[10]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 15:14
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>Они решали вполне конкретные практические проблемы, возникшие из-за недостатка языка/платформы. В соответствии же с выкладками IT (в другой теме, кстати, ты хотя бы ссылки делай чтобы другим понятно было) у них типа много времени, вплоть до обгона C++ архитектурными решениями на 2000%. Я же показываю на что по факту же тратится это время.

I>IT нигде не говорит, что на C# всегда можно получить гарантированые 2000% относительно С++.

А я не говорил что он что-то гарантировал.
Я как раз и говорю — удобная позиция "в домике" — и не опровергнешь ведь, и гарантировать 2000% не надо, только это всё демагогия же.

I>Речь про экономику проекта, её никто пока не отменял.


Какая экономика? Ты и в том топике зачем-то начал песню про экономику
Речь конкретно про архитектуру, производительность и высвобожденное время. Вот его цитата:

IT>где высвобожденное время можно с успехом потратить, например, на архитектуру приложения и добиться лучшей производительности архитектурными решениями. А это уже может оказаться не 2%, а 2000.

Re[9]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 15:19
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Про рамки платформы какое-то непонятное замечание, как-будто есть какая-то другая C# платформа где этого не потребовалось бы

I>>C# платформ вообще говоря очень много. В этом году вроде как выходит очередная. Везде всё чуть-чуть по разному.

EP>Так покажи же ту, в которой этот костыль не понадобился бы (смотри выделенное)



Ну вот у меня в приложении был обычный генерик метод, безо всяких тысяч строк кода. Как быть ? Ну не нужна мне экстремальная производельность этого метода, он ни разу не был узким местом.
И при чем здесь языковая выразительность ?

Похоже, ты путаешь языковые средства и эффективность кода компилятора.
Re[6]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 15:23
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.

EP>>Для сравнения C#, свежий пример
Автор: Evgeny.Panasyuk
Дата: 23.03.16
— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода

S> Шаблоны С++ в итоге выдадут ту же массу кода при специализации.

Моя полная цитата, без твоих обрезок:

EP>По алгоритмической выразительности среди мэйнстрима C++ сейчас впереди всех.
EP>Для сравнения C#, свежий пример

— на C++ десять строк (+ может несколько wrapper'ов, это максимум десятки строк), на C# — несколько сотен строк кода (1 + 2) причём включая кодогенетратор, который генерирует несколько тысяч строк, а алгоритм-то совсем пустяковый.


Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

S>У них просто специализация сделана через Т4. В итоге получаем одно и тоже.


В итоге получаем что на C++ это элементарно выражается в рамках самого языка, а на C# приходится педалить код на текстовом шаблонизаторе
Re[10]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 15:26
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>>>Про рамки платформы какое-то непонятное замечание, как-будто есть какая-то другая C# платформа где этого не потребовалось бы

I>>>C# платформ вообще говоря очень много. В этом году вроде как выходит очередная. Везде всё чуть-чуть по разному.
EP>>Так покажи же ту, в которой этот костыль не понадобился бы (смотри выделенное)
I>Ну вот у меня в приложении был обычный генерик метод, безо всяких тысяч строк кода.

Я тебя поздравляю, а теперь всё-таки покажи ту платформу, на которой этот костыль не имеет смысла/не даёт эффекта, иначе непонятно к чему вообще твоё возражение про много-платформенность
Re[11]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 15:40
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>IT нигде не говорит, что на C# всегда можно получить гарантированые 2000% относительно С++.


EP>А я не говорил что он что-то гарантировал.

EP>Я как раз и говорю — удобная позиция "в домике" — и не опровергнешь ведь, и гарантировать 2000% не надо, только это всё демагогия же.

Это аргумент про экономику проекта, если непонятно. Именно за счет отказа от тотального числодробления и можно переформулировать задачу.

I>>Речь про экономику проекта, её никто пока не отменял.


EP>Какая экономика? Ты и в том топике зачем-то начал песню про экономику


Обычная. Выход из тупика слишком часто заключается в переходе на гибридное решение. 90% кода это тривиальная рутина, её делают дешовые программисты, которым до С++ как до небес. А на сэкономленый бюджет приглашается внятный архитектор.

EP>Речь конкретно про архитектуру, производительность и

высвобожденное время

. Вот его цитата:
EP>

IT>>где

высвобожденное время

можно с успехом потратить, например, на архитектуру приложения и добиться лучшей производительности архитектурными решениями. А это уже может оказаться не 2%, а 2000.


Я выделил ту часть, которая про экономику проекта. Вместо полировки узких мест ты на коленке реализуешь совсем другй алгоритм, например на базе ExpressionTree и Pattern Matching. В итоге, например, недельные батчи вдруг отработают меньше 10 минут.
Теоретически, дальнейшая оптимизация на С++ даст еще 10-100кратное ускорение. Но это уже не интересно, потому как указаный выше фокус проделал разраб примерно с 1 годом опыта. На С++ у него нет ни единого шанса.

Смотри внимательно пример Mailbox и Carousel — это примеры целиком про экономику.
Re[11]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 15:42
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Так покажи же ту, в которой этот костыль не понадобился бы (смотри выделенное)

I>>Ну вот у меня в приложении был обычный генерик метод, безо всяких тысяч строк кода.

EP>Я тебя поздравляю, а теперь всё-таки покажи ту платформу, на которой этот костыль не имеет смысла/не даёт эффекта, иначе непонятно к чему вообще твоё возражение про много-платформенность


Тут наверное я погорячился — речь про актуальность числодробилки для конкретного приложения.
И это никак не относится к языковой выразтельности.
Re[12]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 15:49
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>Речь про экономику проекта, её никто пока не отменял.

EP>>Какая экономика? Ты и в том топике зачем-то начал песню про экономику
I>Обычная. Выход из тупика слишком часто заключается в переходе на гибридное решение. 90% кода это тривиальная рутина, её делают дешовые программисты, которым до С++ как до небес. А на сэкономленый бюджет приглашается внятный архитектор.

Вот только речи про это (экономику) не шло

I>Вместо полировки узких мест ты на коленке реализуешь совсем другй алгоритм, например на базе ExpressionTree и Pattern Matching. В итоге, например, недельные батчи вдруг отработают меньше 10 минут.

I>Теоретически, дальнейшая оптимизация на С++ даст еще 10-100кратное ускорение. Но это уже не интересно, потому как указаный выше фокус проделал разраб примерно с 1 годом опыта. На С++ у него нет ни единого шанса.

И где в твоей схеме 2000% увлечение производительности, за счёт перераспределения времени? Нет его, зато есть та самая экономика, которой не было в оригинальной дискуссии
Re[7]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 16:48
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:



EP>Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

А шаблоны это что? У них свой Фреймворк. Там же еще генерятся и классы, по метаданным из БД.

S>>У них просто специализация сделана через Т4. В итоге получаем одно и тоже.


EP>В итоге получаем что на C++ это элементарно выражается в рамках самого языка, а на C# приходится педалить код на текстовом шаблонизаторе

Это же элементарно делается и на дженериках. Авторы пошли своим путем.
Проблема не в языке, а в подходе.
и солнце б утром не вставало, когда бы не было меня
Re[13]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 16:55
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Вот только речи про это (экономику) не шло


Это аккурат то, о чем говорит IT:
"... высвобожденное время можно с успехом потратить, например, на архитектуру приложения"

Вот это и есть экономика в чистейшем виде.


I>>Вместо полировки узких мест ты на коленке реализуешь совсем другй алгоритм, например на базе ExpressionTree и Pattern Matching. В итоге, например,

недельные батчи вдруг отработают меньше 10 минут

.
I>>Теоретически, дальнейшая оптимизация на С++ даст еще 10-100кратное ускорение. Но это уже не интересно, потому как указаный выше фокус проделал разраб примерно с 1 годом опыта. На С++ у него нет ни единого шанса.

EP>И где в твоей схеме 2000% увлечение производительности, за счёт перераспределения времени? Нет его, зато есть та самая экономика, которой не было в оригинальной дискуссии


Я выделил синим цветом. Недельный батч — 6 дней по 24 часа по 60 минут = 8640 мин. Здесь гораздо больше 2000%. Если ты конечно настаиваешь на примере именно про 2000% то извини, ровно 2000% у меня ни разу не получалось.
Re[8]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 17:07
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

S> А шаблоны это что?

В каком смысле что? Уж точно не склейка кода как текста.
Это языковое средство обобщённого программирования, а также метапрограммирования.

S>У них свой Фреймворк.


У кого у них?

S>Там же еще генерятся и классы, по метаданным из БД.


Где там? Из какой БД?

S>>>У них просто специализация сделана через Т4. В итоге получаем одно и тоже.

EP>>В итоге получаем что на C++ это элементарно выражается в рамках самого языка, а на C# приходится педалить код на текстовом шаблонизаторе
S> Это же элементарно делается и на дженериках. Авторы пошли своим путем.
S>Проблема не в языке, а в подходе.

То есть авторы плохие, так как выбрали неправильный подход? Или всё-таки язык который вынудил их пойти на это?
Re[14]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 17:11
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>Вместо полировки узких мест ты на коленке реализуешь совсем другй алгоритм, например на базе ExpressionTree и Pattern Matching. В итоге, например,

I>

недельные батчи вдруг отработают меньше 10 минут

I>.
I>>>Теоретически, дальнейшая оптимизация на С++ даст еще 10-100кратное ускорение. Но это уже не интересно, потому как указаный выше фокус проделал разраб примерно с 1 годом опыта. На С++ у него нет ни единого шанса.
EP>>И где в твоей схеме 2000% увлечение производительности, за счёт перераспределения времени? Нет его, зато есть та самая экономика, которой не было в оригинальной дискуссии
I>Я выделил синим цветом. Недельный батч — 6 дней по 24 часа по 60 минут = 8640 мин.

А, то есть под недельным батчем ты имеешь в виду тот, который выполняется неделю, а не раз в неделю, ОК, сразу не понял.
Тогда с чем ты сравниваешь?
Re[15]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.16 17:23
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>А, то есть под недельным батчем ты имеешь в виду тот, который выполняется неделю, а не раз в неделю, ОК, сразу не понял.

EP>Тогда с чем ты сравниваешь?

С предыдущей версией. Плюсовую версию постигла участь Mailbox и Carousel.
Re[9]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 19:41
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

S>> А шаблоны это что?

EP>В каком смысле что? Уж точно не склейка кода как текста.

EP>Это языковое средство обобщённого программирования, а также метапрограммирования.

даааа? В чем различие между шаблонами и Дженериками?
S>>У них свой Фреймворк.

EP>У кого у них?


У LinqDB
S>>Там же еще генерятся и классы, по метаданным из БД.

EP>Где там? Из какой БД?


Это LinqDB
S>>>>У них просто специализация сделана через Т4. В итоге получаем одно и тоже.
EP>>>В итоге получаем что на C++ это элементарно выражается в рамках самого языка, а на C# приходится педалить код на текстовом шаблонизаторе
S>> Это же элементарно делается и на дженериках. Авторы пошли своим путем.
S>>Проблема не в языке, а в подходе.

EP>То есть авторы плохие, так как выбрали неправильный подход? Или всё-таки язык который вынудил их пойти на это?

Я вот сейчас С++ изучаю. Мне после C# изучать проще чем с 0. После C# большое удовольствие получаешь от указателей. Но во многом .Net более грамотно продуман.
Да и возможностей больше.
и солнце б утром не вставало, когда бы не было меня
Re[10]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 19:58
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>>>Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

S>>> А шаблоны это что?
EP>>В каком смысле что? Уж точно не склейка кода как текста.
EP>>Это языковое средство обобщённого программирования, а также метапрограммирования.
S> даааа? В чем различие между шаблонами и Дженериками?

Если даже смотреть определение выше — Generics не являются средством метапрограммирования.
В целом отличий много — посмотри хотя бы сравнение на MSDN.

S>>>У них свой Фреймворк.

EP>>У кого у них?
S> У LinqDB

А причём тут вообще LINQ to DB?

S>>>Там же еще генерятся и классы, по метаданным из БД.

EP>>Где там? Из какой БД?
S> Это LinqDB

И что ты этим хочешь сказать?

S>После C# большое удовольствие получаешь от указателей.


Интересно, в чём конкретно это выражается?

S>Но во многом .Net более грамотно продуман.


.NET чем что?

S> Да и возможностей больше.


Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.
Re[11]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 21:02
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>>>Ещё ДО отрабатывания T4, кода на C# больше, и его труднее поддерживать, ибо это склейка кода как текста.

S>>>> А шаблоны это что?
EP>>>В каком смысле что? Уж точно не склейка кода как текста.
EP>>>Это языковое средство обобщённого программирования, а также метапрограммирования.
S>> даааа? В чем различие между шаблонами и Дженериками?

EP>Если даже смотреть определение выше — Generics не являются средством метапрограммирования.

EP>В целом отличий много — посмотри хотя бы сравнение на MSDN.
Ты на физическом уровне объясни. А то метапрограммирование.
Шаблоны раскрываются в текст с реальными типами. С перегрузкой операторов, функторов.
У дженериков контракты на интерфейсах и ограничениях. Так для классов будет одна специализация. А для валуе типов длякаждого своя.

S>>>>У них свой Фреймворк.

EP>>>У кого у них?
S>> У LinqDB

EP>А причём тут вообще LINQ to DB?

Прошу прощения. Посмотрел невнимательно. Это расширение для Linq
S>>>>Там же еще генерятся и классы, по метаданным из БД.
EP>>>Где там? Из какой БД?
S>> Это LinqDB

EP>И что ты этим хочешь сказать?

Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два
расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null

S>>После C# большое удовольствие получаешь от указателей.


EP>Интересно, в чём конкретно это выражается?

Да просто смена мышления. Вспомнить арифметику указателей, смещение итд

S>>Но во многом .Net более грамотно продуман.


EP>.NET чем что?

Чем С++
S>> Да и возможностей больше.

EP>Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.

Угу. Вы до Linq нормального еще не доросли. Не говоря о Linq to EF. То, что sqcpp это наколеночная поделка. асинхронное программирование. Итд. Причем это целостное решение, а не кто то, где то, что там сделал.
Просто много парадигм сейчас после функциональщины в том же Nemerle и C# смотрится устаревшим.
Либо делается на макросах, шаблонах так, что понять, где начало где конец тяжело. Если в .Net все прозрачно, можно найти ответы на любые вопросы. То для С++ стоит попотеть.
Конечно С++ много своих достоинств. Но программировать на C# проще.
Например https://rsdn.ru/forum/dotnet/6484358.1
Автор: Serginio1
Дата: 28.06.16

В .Net из каропки я могу сделать обертку через DynamicObject любой яля Idispatch объект. На C++ нужно вручную сделать аналог интерфейса. А про рефлексию вообще промолчу.
Кстати я могу использовать дженерики в рантайме с неизвестным заранее типом.
Но я пишу на С++ только две недели, так, что это моё недолгое общение.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.06.2016 21:15 Serginio1 . Предыдущая версия . Еще …
Отредактировано 29.06.2016 21:06 Serginio1 . Предыдущая версия .
Re[12]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 21:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>Если даже смотреть определение выше — Generics не являются средством метапрограммирования.

EP>>В целом отличий много — посмотри хотя бы сравнение на MSDN.
S> Ты на физическом уровне объясни.

На каком именно? Реализацию в компиляторе?

S>А то метапрограммирование.


Метапрограммирование вытекает из ряда свойств, которых например нет у C# Generics. Подробно всё расписывать не собираюсь, тут другая тема.

S> Шаблоны раскрываются в текст с реальными типами.


Это макросы и T4 раскрываются в текст.

S>>>>>Там же еще генерятся и классы, по метаданным из БД.

EP>>>>Где там? Из какой БД?
S>>> Это LinqDB
EP>>И что ты этим хочешь сказать?
S> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два
S>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null

К чему ты ведёшь? Как это относится к обсуждаемому вопросу?

S>>>Но во многом .Net более грамотно продуман.


EP>>Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.

S> Угу. Вы до Linq нормального еще не доросли.

Кто мы?

S>Не говоря о Linq to EF.


Мне не приходится работать ни с базами, ни с GUI, ни какой-либо иной опердень-ориентированной тоской по переливанию из пустого в порожнее. К счастью попадаются задачки поинтересней

S>асинхронное программирование


Что "асинхронное программирование"? Говори конкретно.

S>Причем это целостное решение, а не кто то, где то, что там сделал.


Типа linq2db, да? Те же кто-то, где-то

S> Конечно С++ много своих достоинств. Но программировать на C# проще.


Это всё относительно. Вот конкретный обсуждаемый пример min/max на C++ проще

S> Кстати я могу использовать дженерики в рантайме с неизвестным заранее типом.


Типа std::function? Или что именно?
Re[13]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 21:45
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


EP>>>Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.

S>> Угу. Вы до Linq нормального еще не доросли. Не говоря о Linq to EF. То, что sqcpp это наколеночная поделка. асинхронное программирование. Итд. Причем это целостное решение, а не кто то, где то, что там сделал.
C>А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?
А по русски?

S>>Либо делается на макросах, шаблонах так, что понять, где начало где конец тяжело. Если в .Net все прозрачно, можно найти ответы на любые вопросы. То для С++ стоит попотеть.

C>Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.
Ну вот ты смотрел и не разобрался. Кстати в итоге MinItem используется так.

public Int64?  MinItemInt64Nullable(int[] source) 
            => source.Select(v => new Item<Int64?>((Int64)v)). MinItem(i => i.Value)?.Value;


У каждого языка есть своя ниша.
и солнце б утром не вставало, когда бы не было меня
Re[13]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.06.16 21:56
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>Если даже смотреть определение выше — Generics не являются средством метапрограммирования.

EP>>>В целом отличий много — посмотри хотя бы сравнение на MSDN.
S>> Ты на физическом уровне объясни.

EP>На каком именно? Реализацию в компиляторе?

Да.

S>>А то метапрограммирование.


EP>Метапрограммирование вытекает из ряда свойств, которых например нет у C# Generics. Подробно всё расписывать не собираюсь, тут другая тема.


S>> Шаблоны раскрываются в текст с реальными типами.


EP>Это макросы и T4 раскрываются в текст.

А шаблоны сразу в бинарный код?

S>>>>>>Там же еще генерятся и классы, по метаданным из БД.

EP>>>>>Где там? Из какой БД?
S>>>> Это LinqDB
EP>>>И что ты этим хочешь сказать?
S>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два
S>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null

EP>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?

К тому, что на шаблонах придется делать то же самое. Да еще и применение на C# выглядит удобнее
var МаксЗнач=source.MinItem(i => i.Value)?.Value;

S>>>>Но во многом .Net более грамотно продуман.

EP>>>Некоторые встроенные возможности C# на C++ реализуются в виде библиотек.

S>> Угу. Вы до Linq нормального еще не доросли.

EP>Кто мы?


S>>Не говоря о Linq to EF.


EP>Мне не приходится работать ни с базами, ни с GUI, ни какой-либо иной опердень-ориентированной тоской по переливанию из пустого в порожнее. К счастью попадаются задачки поинтересней

Ну да зато хаять это вы горазды. Еще раз у каждого языка своя ниша.
Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.
S>>асинхронное программирование

EP>Что "асинхронное программирование"? Говори конкретно.

async await

S>>Причем это целостное решение, а не кто то, где то, что там сделал.


EP>Типа linq2db, да? Те же кто-то, где-то

нет типа Linq to EF.

S>> Конечно С++ много своих достоинств. Но программировать на C# проще.


EP>Это всё относительно. Вот конкретный обсуждаемый пример min/max на C++ проще

Давай свою конкретную реализацию.И конечное применение. Тогда и поговорим. То, что ты привел нужно создавать отдельный класс с функтором. И как там в C++ c Nullable?
var МаксЗнач=source.MinItem(i => i.Value)?.Value;



S>> Кстати я могу использовать дженерики в рантайме с неизвестным заранее типом.


EP>Типа std::function? Или что именно?


В рантайме? Еще раз код на 1С.

ListT=Врап.ПолучитьТип("System.Collections.Generic.List`1");
ListT=Врап.ТипКакОбъект(ListT); 
Список=Врап.СоздатьОбъект(ListT.MakeGenericType(String));
и солнце б утром не вставало, когда бы не было меня
Re[14]: Rust в Dropbox
От: Cyberax Марс  
Дата: 29.06.16 22:39
Оценка:
Здравствуйте, Serginio1, Вы писали:

C>>А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?

S> А по русски?
http://smallcultfollowing.com/babysteps/blog/2013/06/11/data-parallelism-in-rust/

C>>Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.

S> Ну вот ты смотрел и не разобрался. Кстати в итоге MinItem используется так.
Я не про MinItem, я про провайдеры, которые работают с ET.
Sapienti sat!
Re[14]: Rust в Dropbox
От: Cyberax Марс  
Дата: 29.06.16 22:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Давай свою конкретную реализацию.И конечное применение. Тогда и поговорим. То, что ты привел нужно создавать отдельный класс с функтором. И как там в C++ c Nullable?

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

См.: boost::optional
Sapienti sat!
Re[14]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 29.06.16 23:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>>А то метапрограммирование.

EP>>Метапрограммирование вытекает из ряда свойств, которых например нет у C# Generics. Подробно всё расписывать не собираюсь, тут другая тема.
S>>> Шаблоны раскрываются в текст с реальными типами.
EP>>Это макросы и T4 раскрываются в текст.
S> А шаблоны сразу в бинарный код?

А зачем в текст? Чтобы заново парсить?

S>>>>>>>Там же еще генерятся и классы, по метаданным из БД.

EP>>>>>>Где там? Из какой БД?
S>>>>> Это LinqDB
EP>>>>И что ты этим хочешь сказать?
S>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два
S>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S> К тому, что на шаблонах придется делать то же самое.

Не придётся — в C++ типы равнозначны, нет деления на value/reference, поэтому нет необходимости обрабатывать эти ситуации по отдельности.
И вообще, даже если придётся профильтровать элементы — то для этого не нужно вручную инлайнить код пропуска элементов — это ортогонально, достаточно взять например boost::adaptors::filtered.

S>>> Угу. Вы до Linq нормального еще не доросли.

EP>>Кто мы?
S>>>Не говоря о Linq to EF.
EP>>Мне не приходится работать ни с базами, ни с GUI, ни какой-либо иной опердень-ориентированной тоской по переливанию из пустого в порожнее. К счастью попадаются задачки поинтересней
S> Ну да зато хаять это вы горазды.

Где?

S>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.


Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?

S>>>асинхронное программирование

EP>>Что "асинхронное программирование"? Говори конкретно.
S>async await

Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.

S>>> Конечно С++ много своих достоинств. Но программировать на C# проще.

EP>>Это всё относительно. Вот конкретный обсуждаемый пример min/max на C++ проще
S> Давай свою конкретную реализацию.

Я уже приводил.

S>То, что ты привел нужно создавать отдельный класс с функтором.


Читай что такое лямбды в C++.

S>И как там в C++ c Nullable?


Есть boost::optional.
Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
3) Информацию о том найдено ли что-то или нет
Re[15]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.06.16 17:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

I>>В С++ такой механизм принципиально нереализуем, ибо нет языковой поддержки. Отсюда только наколеночные локальные поделки со много более сложной механикой, при много меньших возможностях.

C>Реализуем, хотя с менее приятным синтаксисом (см.: expression templates). Просто особо нафиг никому не нужен. А в Rust'е, к сожалению, вообще любые макросы можно делать.

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

Нафиг не нужен — это можно сказать вообще про любую фичу. Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.
Re[16]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 30.06.16 19:21
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Нафиг не нужен — это можно сказать вообще про любую фичу.


Нет, не про любую. Функции например нужны

I>Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.


Если клонить в эту сторону, то вообще-то для большинства задач и полнота по Тьюрингу не нужна
Re[15]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 04:22
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?

S>> А по русски?
C>http://smallcultfollowing.com/babysteps/blog/2013/06/11/data-parallelism-in-rust/
Я 2 недели изучаю С++. Можно на пальцах.

C>>>Ой, ну не надо. Смотреть как реализован провайдер твоего любимого LINQ — это не меньшее удовольствие.

S>> Ну вот ты смотрел и не разобрался. Кстати в итоге MinItem используется так.
C>Я не про MinItem, я про провайдеры, которые работают с ET.
Что такое ET?
и солнце б утром не вставало, когда бы не было меня
Re[15]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 04:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


S>> Давай свою конкретную реализацию.И конечное применение. Тогда и поговорим. То, что ты привел нужно создавать отдельный класс с функтором. И как там в C++ c Nullable?

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

C>См.: boost::optional

А можно привести аналог
var МаксЗнач=source.MinItem(i => i.Value)?.Value;

Имея расширения мне нужно всего навсего добавиить лямбду доступа к полю. Как это выглядит на C++.
И как в итоге будет выглядеть итератор
и солнце б утром не вставало, когда бы не было меня
Re[17]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 06:26
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>Нафиг не нужен — это можно сказать вообще про любую фичу.

EP>Нет, не про любую. Функции например нужны

Не нужны.

I>>Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.


EP>Если клонить в эту сторону, то вообще-то для большинства задач и полнота по Тьюрингу не нужна


Если задачи в вакууме — то не нужна.
Re[17]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 06:28
Оценка:
Здравствуйте, Cyberax, Вы писали:

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

C>Зачем? Для фильтрации коллекций вполне достаточно обычных лямбд и прочих.

Выражения нужны не для фильтрации, а как удобный механизм для промежуточного процессинга, как контроль над вычислениями. Пишешь код как обычно, а он может выполниться и на клиенте, и на сервере, и в видеокарте, и в базе данных, и на другом сервисе. А может вообще часть вычислений нужно просто скипнуть за ненужностью.
Отредактировано 01.07.2016 6:40 Pauel . Предыдущая версия .
Re[18]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 09:49
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.

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

Нет, самые обыкновенные задачи http://rsdn.ru/forum/security/6074456.1
Автор: kochetkov.vladimir
Дата: 10.06.15
Re[19]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 09:52
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>>>Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.

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

EP>Нет, самые обыкновенные задачи http://rsdn.ru/forum/security/6074456.1
Автор: kochetkov.vladimir
Дата: 10.06.15


Сможешь написать операционку на языке который не обладает полнотой по тьюрингу, да или нет ?
Re[20]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 09:54
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>>>Принципиальная необходимость есть только в тех вещах, которые обеспечивают полноту по тьюрингу.

EP>>>>Если клонить в эту сторону, то вообще-то для большинства задач и полнота по Тьюрингу не нужна
I>>>Если задачи в вакууме — то не нужна.
EP>>Нет, самые обыкновенные задачи http://rsdn.ru/forum/security/6074456.1
Автор: kochetkov.vladimir
Дата: 10.06.15

I>Сможешь написать операционку на языке который не обладает полнотой по тьюрингу, да или нет ?

Причём тут написание OS и обыкновенные задачи?
Re[22]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 10:24
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>>>Если задачи в вакууме — то не нужна.

EP>>>>Нет, самые обыкновенные задачи http://rsdn.ru/forum/security/6074456.1
Автор: kochetkov.vladimir
Дата: 10.06.15

I>>>Сможешь написать операционку на языке который не обладает полнотой по тьюрингу, да или нет ?
EP>>Причём тут написание OS и обыкновенные задачи?
I>Ты не увиливай,

Ты совершенно неадекватен, я не увиливал

I>расскажи, что за приложение можно написать без полноты по тьюрингу.


Самое обыкновенное. Например опердень — достал данные из файла/базы, показал пользователю, принял ввод и записал обратно — и в каком месте приложения тут нужна полнота по Тьюрингу?

Да и вообще, строго говоря наши компьютеры не обеспечивают полноту по Тьюрингу.

I>Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


Причём тут внешний интерпретатор?
Отредактировано 01.07.2016 10:24 Evgeny.Panasyuk . Предыдущая версия .
Re[16]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 11:29
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>> А шаблоны сразу в бинарный код?

EP>>А зачем в текст? Чтобы заново парсить?
S> А теперь задай себе вопрос, почему шаблоны так долго компилятся?

Думаешь потому что текст заново парсится?

1. Потому что мощные — это требует ресурсов компилятора.
2. Они полные по Тьюрингу, и как следствие на них реализуется разнообразные алгоритмы времени компиляции.
3. Потому что компилятор сильно оптимизируют выхлоп от них. Конкретный пример
Автор: Evgeny.Panasyuk
Дата: 20.10.14
.

SS>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S> Да.

Что "да"?

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

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

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

Например:
auto it = min_element(source, [](auto &i){ return i->value; });


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


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

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


Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.
source | filtered([](auto &x){ return x != nullptr; })


S>>>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.

EP>>Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?
S> А ну да есть еще log файлы и VS для отладки.



S>>>async await

EP>>Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.
S> Пример пожалуйста.

http://rsdn.ru/forum/cpp/5219587.1
Автор: Evgeny.Panasyuk
Дата: 03.07.13


S>>>И как там в C++ c Nullable?

EP>>Есть boost::optional.
EP>>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
EP>>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>>3) Информацию о том найдено ли что-то или нет
S>На Linq это делается значительно проще.

Да неужели? Именно поэтому EqualRange из CodeJam возвращает два унылых индекса?

S>И можно писать свои расширения как с MinItem

S>Методы Skip и Take

Расширения для этого не нужны.
Re[17]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 11:59
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>> А шаблоны сразу в бинарный код?

EP>>>А зачем в текст? Чтобы заново парсить?
S>> А теперь задай себе вопрос, почему шаблоны так долго компилятся?

EP>Думаешь потому что текст заново парсится?

Разворачиваются
EP>1. Потому что мощные — это требует ресурсов компилятора.
EP>2. Они полные по Тьюрингу, и как следствие на них реализуется разнообразные алгоритмы времени компиляции.
EP>3. Потому что компилятор сильно оптимизируют выхлоп от них. Конкретный пример
Автор: Evgeny.Panasyuk
Дата: 20.10.14
.

Угу, а если без оптимизации то должны как в .Net

SS>>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S>> Да.

EP>Что "да"?

Это относится к тому, что ты охаял.
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>


Это и на Linq аналогично, только заметь насколько лаконичнее.
int min2 = users.Min(n => n.value);


Только вот проблема в том, что n может быть null, а фильтр нужен только для ссылочных типов
Поэтомк ребята и сделали универсальную функцию.

А теперь код element. И что бы было различие между ссылочными и валуе типами.
S>>И как в итоге будет выглядеть итератор.

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


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


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

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


То есть мы должны сначала отфильтровать по null а затем применять искать минимум?
Пока это никак не тянет на
var МаксЗнач=source.MinItem(i => i.Value)?.Value

S>>>>Я решаю кучу различных задач. И кстати GUI мне только помогает. А то консоль наше всё.

EP>>>Причём тут консоль? Думаешь если не-GUI задача, то значит консоль?
S>> А ну да есть еще log файлы и VS для отладки.

EP>


S>>>>async await

EP>>>Await реализуется на stackful coroutines, причём получается даже удобнее так как нет инфецирования await'ами/async'ами по всему callstack, и мощнее — так как намного легче интегрировать асинхронные вставки в существующий код.
S>> Пример пожалуйста.

EP>http://rsdn.ru/forum/cpp/5219587.1
Автор: Evgeny.Panasyuk
Дата: 03.07.13


Рад за вас если у вас все прекрасно. Кстати. Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?
А кто готовит автомат? В .Net этим занимается компилятор. Кстати по поводу
// await is not limited by "one level" as in C
Есть мнтоды Task WhenAll , WhenAny


S>>>>И как там в C++ c Nullable?

EP>>>Есть boost::optional.
EP>>>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
EP>>>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>>>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>>>3) Информацию о том найдено ли что-то или нет
S>>На Linq это делается значительно проще.

EP>Да неужели? Именно поэтому EqualRange из CodeJam возвращает два унылых индекса?


Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.
Еще раз хватает >>Методы Skip и Take

S>>И можно писать свои расширения как с MinItem

S>>Методы Skip и Take

EP>Расширения для этого не нужны.


Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.
То есть твой вариант не универсален.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.07.2016 13:21 Serginio1 . Предыдущая версия . Еще …
Отредактировано 01.07.2016 13:14 Serginio1 . Предыдущая версия .
Отредактировано 01.07.2016 12:35 Serginio1 . Предыдущая версия .
Re[18]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 13:31
Оценка:
Здравствуйте, Serginio1, Вы писали:

SS>>>>>>> Это расширение для Linq. И называется кстати EnumerableExtensions. Во втором случае генерятся по подобию два

S>>>>>>>расширения на Макс и Мин. Только и всего. При этом две ветки для валуе типов и для классов. Для классов идет еще проверка на null всех элементов, сравнение для них не проводится. По аналогии с DB Null
EP>>>>>>К чему ты ведёшь? Как это относится к обсуждаемому вопросу?
S>>> Да.
EP>>Что "да"?
S> Это относится к тому, что ты охаял.

Где охаял? Можешь целиком сформулировать мысль?

EP>>Например:

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

S> А теперь код element. И что бы было различие между ссылочными и валуе типами.

Я приводил код, нужен только wrapper в пару строк для Range интерфейса, о котором я сразу и сказал
Автор: Evgeny.Panasyuk
Дата: 23.03.16
.

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

EP>>Добавь filtered во внутрь обёртки, при этом алгоритм фильтрации не нужно расписывать вручную — его заинлайнит компилятор.
EP>>
EP>>source | filtered([](auto &x){ return x != nullptr; })
EP>>

S> То есть мы должны сначала отфильтровать по null а затем применять искать минимум?

Нет, не "сначала" отфильтровать, а применить ленивый фильтр, который даст вид range без nullptr.

S>Пока это никак не тянет на

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

Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант

S>Я так понимаю async([i]{ return reschedule(), i*100; }); возвращает аналог Task?


Да.

S>А кто готовит автомат? В .Net этим занимается компилятор.


Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.

S>Кстати по поводу

S> // await is not limited by "one level" as in C
S>Есть мнтоды Task WhenAll , WhenAny

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

S>>>>>И как там в C++ c Nullable?

EP>>>>Есть boost::optional.
EP>>>>Но, в контексте алгоритмов намного мощнее не optional, а итератор — так как сделано в STL. Итератор одним махом даёт:
EP>>>>1) Позицию элемента — например минимальный можно swap'нуть с первым элементом
EP>>>>2) Два диапазона [first, min) и [min, last), которые можно обрабатывать в следующих алгоритмах
EP>>>>3) Информацию о том найдено ли что-то или нет
S>>>На Linq это делается значительно проще.
EP>>Да неужели? Именно поэтому EqualRange из CodeJam возвращает два унылых индекса?
S> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.

Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

S>Вот когда покажешь такой же ваприант тогда поверю. Пока все мимо.

S> То есть твой вариант не универсален.

Почему он не универсален?
Re[8]: Rust? Какой Rust?
От: flаt  
Дата: 01.07.16 13:47
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Сначала ты намекал, что архитекторы не тем занимались. Сейчас оказывается, что соображения были вполне конкретные практические. Выходит, архитекторы вполне себе решали реальные проблемы ?


Ребят, вы два месяца молчали, зачем тему подняли? И хоть бы словом о сабже упомянули
Re[9]: Rust? Какой Rust?
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 13:53
Оценка:
Здравствуйте, flаt, Вы писали:

I>>Сначала ты намекал, что архитекторы не тем занимались. Сейчас оказывается, что соображения были вполне конкретные практические. Выходит, архитекторы вполне себе решали реальные проблемы ?

F>Ребят, вы два месяца молчали, зачем тему подняли?

Я ему в других темах не отвечал, вот он и поднял эту тему своей демагогией.

F>И хоть бы словом о сабже упомянули


Borrow checker таки упомянули
Re[24]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 14:08
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>расскажи, что за приложение можно написать без полноты по тьюрингу.

EP>>Самое обыкновенное. Например опердень — достал данные из файла/базы, показал пользователю, принял ввод и записал обратно — и в каком месте приложения тут нужна полнота по Тьюрингу?
I>База, на секундочку, тьюринг-полный вычислитель. Опаньки !

Я не говорю про использование eval и подобных хаков.
Если говорить про базы, то не полного по Тьюрингу подмножества SQL-диалекта достаточно для подавляющего большинства задач

I>И при этом есть небольшой минимум, в который не входят даже функции, который позволяет написать вообще всё.


А я нигде не утверждал что функции необходимы для полноты по Тьюрингу, есть например SK комбинаторы, ты опять споришь с какими-то придуманными тобой тезисами
Re[25]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.07.16 17:50
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>А я нигде не утверждал что функции необходимы для полноты по Тьюрингу


А как понимать "фича ХХХ не нужна ?" Поясни, а то непонятно. У меня ощущение, что только ты наверняка знаешь, какие фичи нужны или не нужны на самом деле.
Re[20]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 19:29
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>Где охаял? Можешь целиком сформулировать мысль?

S>https://github.com/rsdn/CodeJam/blob/e86dc27fadd28f7932a0c840f5356e98cfa7a40c/Main/src/Collections/EnumerableExtensions.AggregateFuncs.cs
EP>>>>Например:
EP>>>>
EP>>>>auto it = min_element(source, [](auto &i){ return i->value; });
EP>>>>

S>>> А теперь код element. И что бы было различие между ссылочными и валуе типами.
EP>>Я приводил код, нужен только wrapper в пару строк для Range интерфейса, о котором я сразу и сказал
Автор: Evgeny.Panasyuk
Дата: 23.03.16
.

S> Ну вот нужно добавить.

Что значит "ну вот"? Ещё раз, я сразу же написал:

EP>Да, могут быть добавлены wrapper'ы для range интерфейса вместо двух итераторов, но это же десятки строк, а не сотни


S>По сути и получится тоже самое.


Нет, не тоже самое.
В варианте C# фильтрация заинлайненна вручную и текстовая кодогенерация — сотни строк. На C++ один алгоритм и пару обёрток, причём фильтрация внешняя и ортогональная.

S>Да и на самом деле мне как пользователю наплевать как внутри реализовано. Главное быстро и удобно. Смотри на конечный результат.


Вот только обсуждение как раз про то как реализовано

S>>> То есть мы должны сначала отфильтровать по null а затем применять искать минимум?

EP>>Нет, не "сначала" отфильтровать, а применить ленивый фильтр, который даст вид range без nullptr.
S>То есть делать то же самое, что тебе не понравилось.

Не надо выдумывать Мне не понравилось что на ровном месте пришлось запрягать текстовую кодогенерациюю и примитивнейший алгоритм растянулся на сотни строк (ещё до генерации).

S>У ребят сделано тоже самое.


Ты вообще не понимаешь о чём речь, уже надоедает У них фильтр вручную прибит гвоздями ко внутренностях алгоритма.

S>>>Пока это никак не тянет на

S>>>var МаксЗнач=source.MinItem(i => i.Value)?.Value
EP>>Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант
S> И будет в итоге тоже самое.

Нет же Перечитай всю тему.

S>>>А кто готовит автомат? В .Net этим занимается компилятор.

EP>>Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.
S> Я с вас хренею любите вы словами бросаться. По поводу await async куча статей с разбором как все работает. По С++ все туго.
S>Хоть бы ссылку на толковую статью.

Читай что такое Coroutine, а конкретно Stackful.

S>>>Кстати по поводу

S>>> // await is not limited by "one level" as in C
S>>>Есть мнтоды Task WhenAll , WhenAny
EP>>Это не в тему. Смотри пример по ссылке — await из bar'а возвращает управление на самый вверх, в C# пришлось бы ставить await bar внутри foo, добавлять async, и так на всех уровнях. Тут же можно вызывать await на самом глубоком уровне, не меняя код на промежуточных.
S> Так await и показывает, что функция асинхронная. А вот вызов просто bar воспринимается как синхронная. Где логика?

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

S>>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.


EP>>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

S> Я то как раз изучаю и понимаю о чем ты говоришь.
S>Выложил статью Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
S>Исходники лежат Здесь
S>Выложил статью
S>Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
S>Исходники здесь
S>Советую и тебе C# подтянуть.

Давай ты мне не будешь советовать что тебе кажется мне следует делать, а я тебе не буду говорить ты постоянно вставляешь ссылки на свои статьи совершенно не к месту и не в тему, ОК?
Отредактировано 01.07.2016 19:32 Evgeny.Panasyuk . Предыдущая версия . Еще …
Отредактировано 01.07.2016 19:32 Evgeny.Panasyuk . Предыдущая версия .
Re[26]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 19:42
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>А я нигде не утверждал что функции необходимы для полноты по Тьюрингу

I>А как понимать "фича ХХХ не нужна ?" Поясни, а то непонятно.

Смотри контекст
Автор: Ikemefula
Дата: 30.06.16
.
Ты заявил что аналог не реализуем, тебе ответили что вполне реализуем, но особо никому не нужен, мол поэтому и нет готового.

А функции есть в каждом более менее используемом языке, поэтому я и говорю что они нужны.

I>У меня ощущение, что только ты наверняка знаешь, какие фичи нужны или не нужны на самом деле.


Те которые помогают решать существующие задачи. На C++ задача что-то там забрать из базы массово не встречается, поэтому вопрос тщательно и не проработан (хотя кое-какие готовые варианты всё же есть).
Re[21]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 20:40
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Нет, не тоже самое.

EP>В варианте C# фильтрация заинлайненна вручную и текстовая кодогенерация — сотни строк. На C++ один алгоритм и пару обёрток, причём фильтрация внешняя и ортогональная.

В варианте с C# это выглядит так.

var рез= Список.Where(i =>i!=null).Max(i =>i.Value);





S>>>>Пока это никак не тянет на

S>>>>var МаксЗнач=source.MinItem(i => i.Value)?.Value
EP>>>Спрячь применение фильтра во внутрь обёртки, если тебе нужен именно этот вариант
S>> И будет в итоге тоже самое.

EP>Нет же Перечитай всю тему.


Я тебе привел пример на C#. Ребята предпочли более длинный вариант. Видно это связано с Nullable.
Так как результат должен возвращать null если все значения null.
Но для валуе типов достаточно

var рез= Список.Max(i =>i.Value);



S>>>>А кто готовит автомат? В .Net этим занимается компилятор.

EP>>>Никто специальный автомат не готовит, я же говорю что это на основе stackful coroutines. Автомат нужен для stackless.
S>> Я с вас хренею любите вы словами бросаться. По поводу await async куча статей с разбором как все работает. По С++ все туго.
S>>Хоть бы ссылку на толковую статью.

EP>Читай что такое Coroutine, а конкретно Stackful.

Спасибо почитаю
S>>>>Кстати по поводу
S>>>> // await is not limited by "one level" as in C
S>>>>Есть мнтоды Task WhenAll , WhenAny
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
.


Неее. Это не засорение. Если не будет await то ты получаешь Task. Можешь засунуть в массив и вызвать WhenAll , WhenAny
Это совсем другие вызовы.

S>>>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.


EP>>>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь

S>> Я то как раз изучаю и понимаю о чем ты говоришь.
S>>Выложил статью Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
S>>Исходники лежат Здесь
S>>Выложил статью
S>>Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
S>>Исходники здесь
S>>Советую и тебе C# подтянуть.

EP>Давай ты мне не будешь советовать что тебе кажется мне следует делать, а я тебе не буду говорить ты постоянно вставляешь ссылки на свои статьи совершенно не к месту и не в тему, ОК?

А ты значит свои ссылки не выставляешь. Но критикуешь С# не разобравшись в нем. Это как про Карузо который Васильич напел.
и солнце б утром не вставало, когда бы не было меня
Re[22]: Rust в Dropbox
От: Evgeny.Panasyuk Россия  
Дата: 01.07.16 21:27
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Я тебе привел пример на C#. Ребята предпочли более длинный вариант.


По вполне практичным причинам, связанными с ограничениями языка/компилятора/платформы — о том и речь. Непонятно с чем ты споришь

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

S> Неее. Это не засорение. Если не будет await то ты получаешь Task. Можешь засунуть в массив и вызвать WhenAll , WhenAny
S>Это совсем другие вызовы.

Если мне нужен аналог Task — то я сделаю явный вызов asynchronous. При этом я могу в уже готовый код вставить await, не меняя всей цепочки — а на C# так не получится.

S>>>>> Ты всю эту библиотеку изучил? Лучше бы Linq изучил. Тогда вопросов бы таких не было.

EP>>>>Лучше бы ты изучил STL, тогда хотя бы понял о чём речь
S>>> Я то как раз изучаю и понимаю о чем ты говоришь.
S>>>Выложил статью Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
S>>>Исходники лежат Здесь
S>>>Выложил статью
S>>>Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
S>>>Исходники здесь
S>>>Советую и тебе C# подтянуть.
EP>>Давай ты мне не будешь советовать что тебе кажется мне следует делать, а я тебе не буду говорить ты постоянно вставляешь ссылки на свои статьи совершенно не к месту и не в тему, ОК?
S> А ты значит свои ссылки не выставляешь.

Я вставляю ссылки по теме. А вот каким образом вообще .NET + 1С относится к данной теме?

S>Но критикуешь С# не разобравшись в нем.


В чём конкретно не разобравшись?
Я указываю на конкретный недостаток, из-за которого опытные C# разработчики решили использовать текстовую кодогенерацию для примитивнейшего алгоритма. Ты же непонятно зачем пытаешься сделать вид что так и должно быть
Re[23]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 22:08
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>В чём конкретно не разобравшись?
EP>Я указываю на конкретный недостаток, из-за которого опытные C# разработчики решили использовать текстовую кодогенерацию для примитивнейшего алгоритма. Ты же непонятно зачем пытаешься сделать вид что так и должно быть
Так в чем все таки недостаток?
и солнце б утром не вставало, когда бы не было меня
Re[16]: Rust в Dropbox
От: Cyberax Марс  
Дата: 01.07.16 22:10
Оценка:
Здравствуйте, Serginio1, Вы писали:

C>>>>А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?

S>>> А по русски?
C>>http://smallcultfollowing.com/babysteps/blog/2013/06/11/data-parallelism-in-rust/
S> Я 2 недели изучаю С++. Можно на пальцах.
Rust позволяет при его правильном использовании гарантировать, что объект не используется более чем одним мутатором. В том числе и в пределах потока.

Для примера:
Dictionary<string, int> dict = new Dictionary<string, int> {
    {"Foo", 1 },
    {"Bar", 2 }
};
foreach(var item in dict.Keys) {
  dict.Remove(item); //Whoops
}

В Rust такая конструкция просто не скомпилируется:
use std::collections::HashMap;

fn main() {
  let mut map = HashMap::new();
  map.insert("a", 1);
  map.insert("c", 3);
  map.remove("c");
  for val in map.keys() {
    map.remove(val);
  }
}

Результат компиляции:
test.rs:9:5: 9:8 error: cannot borrow `map` as mutable because it is also borrowed as immutable [E0502]
test.rs:9     map.remove(val);
              ^~~
test.rs:9   for val in map.keys() {
                       ^~~
test.rs:9   }
            ^
error: aborting due to previous error


S>>> Ну вот ты смотрел и не разобрался. Кстати в итоге MinItem используется так.

C>>Я не про MinItem, я про провайдеры, которые работают с ET.
S> Что такое ET?
Expression Tree — второй лик LINQ'а.
Sapienti sat!
Re[25]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 22:34
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>В чём конкретно не разобравшись?

EP>>>Я указываю на конкретный недостаток, из-за которого опытные C# разработчики решили использовать текстовую кодогенерацию для примитивнейшего алгоритма. Ты же непонятно зачем пытаешься сделать вид что так и должно быть
S>> И в чем этот недостаток?

EP>

AVK>>>>>>включая перегрузки для простых типов.
EP>>>>>Зачем? Вообще конечно количество boilerplate поражает.
AVK>>>>Перформанс
EP>>>Я думал для value-типов и так разный код генерируется. Или это не тот случай?
AVK>>Операторы сравнения, увы, дженерики не умеют. А сравнение через IComparer уже не утаптывается до простого сравнения примитивов.



S>>То, что я видел на по итераторам даже твои примеры сливают линку как по синтаксису,


EP>Дополнительные скобочки у лямбды, auto и return?

Да. То есть для тебя первый вариант смотрится более читабельным?

EP>
EP>auto it = min_element(source, [](auto &i){ return i->value; });
EP>vs
EP>var МаксЗнач = source.MinItem(i => i.Value)?.Value;
EP>


Кстати а каков аналог ? в C++? https://msdn.microsoft.com/ru-ru/library/dn986595.aspx
S>>лаконичности

EP>Сотни строк и текстовая кодогенерация для MinItem — апогей лаконичности.

Ну люди так решили сделать? Специализация шаблона выдаст тот же самый результат.
На самом деле потери на применении IComparer есть, но они есть везде. Это не факт, что это нужно делать ради Перформанс.
Это недостаток не Linq, а .Net. Кстати сам был таким, пока не понял, что удобство и скорость разработки важнее. Но у них есть время на это. И они пошли своим путем. Но в итоге применение то лаконичнее?
Помню еще на Видби был вариант с инлайнингом компараторов, но потом MS ушли от этой идеи.
S>>и простоте расширяемости.

EP>В чём именно?

В том, что людям захотелось создать свой MinItem они его и сделали. В том числе и для IQueryable.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.07.2016 22:46 Serginio1 . Предыдущая версия .
Re[17]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 22:40
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


C>>>>>А borrow checker в C# уже появился для проверки отсутствия race condition'ов с данными?

S>>>> А по русски?
C>>>http://smallcultfollowing.com/babysteps/blog/2013/06/11/data-parallelism-in-rust/
S>> Я 2 недели изучаю С++. Можно на пальцах.
C>Rust позволяет при его правильном использовании гарантировать, что объект не используется более чем одним мутатором. В том числе и в пределах потока.

C>Для примера:

C>
C>Dictionary<string, int> dict = new Dictionary<string, int> {
C>    {"Foo", 1 },
C>    {"Bar", 2 }
C>};
C>foreach(var item in dict.Keys) {
C>  dict.Remove(item); //Whoops
C>}
C>

C>В Rust такая конструкция просто не скомпилируется:
C>
 Так и в C# такая конструкция вроде не скомпилируется. Еще с первых версий нельзя производить действия с итератором.
Хотя для словаря это не критично. Вернее для определенных его вариантов.

C>use std::collections::HashMap;

C>fn main() {
C>  let mut map = HashMap::new();
C>  map.insert("a", 1);
C>  map.insert("c", 3);
C>  map.remove("c");
C>  for val in map.keys() {
C>    map.remove(val);
C>  }
C>}
C>

C>Результат компиляции:
C>
C>test.rs:9:5: 9:8 error: cannot borrow `map` as mutable because it is also borrowed as immutable [E0502]
C>test.rs:9     map.remove(val);
C>              ^~~
C>test.rs:9   for val in map.keys() {
C>                       ^~~
C>test.rs:9   }
C>            ^
C>error: aborting due to previous error
C>


S>>>> Ну вот ты смотрел и не разобрался. Кстати в итоге MinItem используется так.

C>>>Я не про MinItem, я про провайдеры, которые работают с ET.
S>> Что такое ET?
C>Expression Tree — второй лик LINQ'а.
Ну на самом деле надо просто на этом руку набить.Отдельная специализация. Правда когда очень припрет
и солнце б утром не вставало, когда бы не было меня
Re[27]: Rust в Dropbox
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.07.16 23:32
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>>То, что я видел на по итераторам даже твои примеры сливают линку как по синтаксису,

EP>>>Дополнительные скобочки у лямбды, auto и return?
S>> Да. То есть для тебя первый вариант смотрится более читабельным?

EP>Отличия минимальные — auto, return и скобочки.

Так какой вариант выбираешь ты? Есть лишние элементы. Как правило это не один оператор, а цепочка
Кстати для Linq есть и SQL подобный синтаксис который я больше предпочитаю.

S>> Кстати а каков аналог ? в C++? https://habrahabr.ru/company/enterra/blog/252099/


EP>Необходимость повсеместных проверок на null — это "особенность" C#.

То есть нет.

S>>>>лаконичности

EP>>>Сотни строк и текстовая кодогенерация для MinItem — апогей лаконичности.
S>> Ну люди так решили сделать?

EP>Да, решили, ради обхода недостатка C#

А кстати они там применяют тот же компаратор. Так, что они его не обошли.
S>>Специализация шаблона выдаст тот же самый результат.

EP>Только на C++ этим занимается компилятор, а на C# разработчики клеят строчки

Это их проблемы. Большинство программистов на этом не заморачиваются, а пишут нормально читаемый код.

S>>На самом деле потери на применении IComparer есть, но они есть везде.


EP>На C++ этих потерь нет, by-design.

Ну так у него и своя ниша, там где нужно выжимать все до остатка. C# не для этого. А значит и программировать нужно в этом же стиле.

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


EP>Авторы этого кода сделали.


S>> Это недостаток не Linq, а .Net.


EP>Я не говорил что это недостаток LINQ.

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

S>>Кстати сам был таким, пока не понял, что удобство и скорость разработки важнее.


EP>Так а я о чём — легче написать десятки строк и пусть компилятор оптимизирует, чем сотни строк с текстовой кодогенрацией

А зачем нужны то эти копейки? В реалиях эти выжимание никому не нужны. У меня была Хэш таблица, которая была в 4 раза быстрее стандартной. Но ей никто не пользовался. Но кстати сам алгоритм был уже применен в других версиях .Net.

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

EP>>>В чём именно?
S>> В том, что людям захотелось создать свой MinItem они его и сделали.

EP>А я сделал свой min_element


S>>В том числе и для IQueryable.


EP>В том числе для встроенных массивов и всех контейнеров поддерживающих стандартный интерфейс ForwardIterator.

А как насчет IQueryable
На Linq проще он поддерживает IEnumerable. Еще раз он поддерживает SQL подобный синтаксис. А как в C++?
Все я завязываю этот бесполезный спор. Соглашусь, что ребята затеяли совсем ненужную возню с генерацией кода, где проще было обойтись стандартными подходами Linq. Причем они не ушли от компаратора. Во всяком случае с MinItem.
В итоге нельзяделать выводы, по деятелльности отдельных пусть и уважаемых программистов. Мухи в голове бывают у всех. Особенно года времени куча.

Но если пройтись по библиотеке. То увидим Action Func c кучей перегрузок по количеству параметров по моему до 64 аргументов.
Я на xamarin наткнулся, что больше 4 там не понимает. Вот это недостаток.

На самом деле компилятор совершенствуется и вполне возможно в скором времени заинлайнят компаратор для валуе типов.
Но опять же. Компаратор позволяет иметь только одну специализацию, а для заинлайненного нужна своя специализация.

То есть можно ввести заинлайненную специализацию только для примитивных типов
и солнце б утром не вставало, когда бы не было меня
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[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[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[2]: Rust в Dropbox
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 10.10.16 09:39
Оценка:
Здравствуйте, Nuzhny, Вы писали:

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


Очень круто! Похоже, что Rust очень хорош до те пор, пока не нужно сталкиваться с FFI. А вот сочетания FFI С Rust мне показалось просто редкостным трешем, фактически как JNI по уровню кошмара.
Re[3]: Rust в Dropbox
От: flаt  
Дата: 11.10.16 04:00
Оценка:
Здравствуйте, D. Mon, Вы писали:


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


Интересно, почему. Есть же gtk-rs, Qt, ещё что-то там.
Re[4]: Rust в Dropbox
От: alex_public  
Дата: 11.10.16 07:05
Оценка:
Здравствуйте, flаt, Вы писали:

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

F>Интересно, почему. Есть же gtk-rs, Qt, ещё что-то там.

В версии Qt для Rust (https://github.com/cyndis/qmlrs) имеется только убогий qml (аналог html на базе js движка), а собственно библиотеки нормальных виджетов нет. Оно и понятно. Для портирования qml достаточно добавить одну функцию вида "LoadQML", а для портирования библиотеки виджетов надо добавить сотни классов с тысячами методов...

Да, кстати, а GUI к обсуждаемому продукту (svgcleaner) написан как раз с помощью нормальных виджетов Qt: https://github.com/RazrFalcon/svgcleaner-gui/blob/master/src/mainwindow.h

Оффтопик. Увидел по ссылке на библиотеки Rust'а незнакомую мне GUI библиотеку (https://github.com/andlabs/libui) и пошёл посмотреть что там такое. Оказался крайне любопытный проект. Это кроссплатформенная (windows/osx/linux) GUI библиотека с нативными контролами, написанная на C, а не на C++. С точки зрения программиста на C++ тут естественно нет ничего интересного. А вот с точки зрения программистов Rust/D/Nim и других пока ещё маргинальных языков это может быть крайне важно. Потому как большинство из них страдают от отсутствия вменяемой GUI библиотеки и при этом все они позволяют бесшовно использовать C (но не C++, на котором сейчас написано практически всё приличное в этой области) библиотеки.

Единственно что надо ещё заметить, что проект с подобными целями следовало заводить как минимум лет 10 назад. А вот в 2016-ом году делать библиотеку без поддержки Андроида — это уже несколько сомнительное мероприятие. Понятно, что достучаться до нативных контролов из нативного кода на Андроиде весьма напряжно, но всё же вполне реально. Более того, можно тупо стащить базовые подходы (устройство универсальной java прокладки) из того же Qt, где это реализовано. Так что не знаю насчёт светлого будущего данного проекта. Но на месте Rust/D/Nim и т.п. программистов я бы активно следил и даже помогал данному проекту.
Re[6]: Rust в Dropbox
От: alex_public  
Дата: 11.10.16 20:45
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Так по этой ссылке в разделе Language Bindings уже есть байндинги для всех упомянутых Rust/D/Nim.


Так я об этом и говорю. И наличие такого большого числа языков у только что рождённого проекта как раз и является следствием C интерфейса, потому что во многих языках подключение подобной библиотеки заключается в грубо говоря переименование h файла. В отличие от C++ GUI библиотек, для подключения которых надо писать прилично кода.

DM>А еще, если кто не видел:

DM>https://dlang.org/blog/2016/10/07/project-highlight-dlangui/
DM>Там и Андроид, и даже текстовый режим!

О, не видел. В то время, когда я игрался с D, данного проекта не было видно на горизонте. Судя по скриншотам очень не плохое решение. Тем более, что они похоже рисуют контролы сами, но при этом копируя системные (идеология Qt). Разве что скринов с Андроида не видно. Но если и там всё в порядке, то прямо уже так и тянет попробовать перевести какой-нибудь из GUI проектов на подобную библиотеку. А то Qt утомило уже своей монструозностью. Единственное что не хватает графического редактора форм для данной библиотеки.

И ещё слегка смущает тот факт, что они говорят о GUI библиотеки CoolReader'a, как о своём базисе. А при этом CoolReader в последних версиях вроде как (я им сам не пользуюсь, просто глянул на их сайте) перешёл на Qt. Хм хм)
Re[8]: Rust в Dropbox
От: flаt  
Дата: 13.10.16 07:16
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Я этой весной один из главных продуктов своих перевел на D и DLangUI, впечатления весьма положительные.

DM>см. http://www.infognition.com/VideoEnhancer/screenshots.html (Version 2)

Я слышал, что в DLangUI есть темы (скины), но на этих скринах софт выглядит как Linux в Windows.
Re[25]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.10.16 10:33
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А практически ты плаваешь в предмете, по-видимому, бо огромный пласт задач являются конечными, т.е. соответствующие им ф-ии — вычислимыми за конечное число шагов, т.е. никакая бесконечная лента этим задачам не нужна.


V>Пример задачи, где требуется "настоящая Тьюринг-машина" — парсер по контекстно-свободной грамматике.


Любой частный случай можно запилить на регулярной грамматике. Память то конечна, соответсвенно входных строк — конечное число. Бгг Ну будет у тебя астрономическое число вариантов, какая разница ?

V>Пример задачи, где НЕ требуется полноценный Тьюринг-вычислитель: текстовый редактор (без вложенных стилей, который), GUI-приложение (пусть будет приложение учёта финансов) да и вообще любая задача, выражаемая через эквивалентный конечный автомат или их систему, например, графические и физические игровые движки и игры на их основе.


Ога.
Re[23]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.10.16 15:59
Оценка:
Здравствуйте, MaxxK, Вы писали:

I>>Ты не увиливай, расскажи, что за приложение можно написать без полноты по тьюрингу. Самостоятельное приложение, без внешнего интерпретатора и тд и тд.


MK>Пример реализации файловой системы, написанной в среде Coq, язык программирования для которой не является полным по Тьюрингу


А зачем так стараться ? Можно ведь вспомнить, что память компьютера конечна
Re[24]: Rust в Dropbox
От: MaxxK  
Дата: 18.10.16 19:54
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


MK>>Пример реализации файловой системы, написанной в среде Coq, язык программирования для которой не является полным по Тьюрингу


I>А зачем так стараться ? Можно ведь вспомнить, что память компьютера конечна


... что, в свою очередь, ничуть не мешает программам в плохих случаях (1) уйти в бесконечный цикл или (2) съесть всю доступную память, так и не решив при этом задачу. От (1) Coq защищает по построению, а вот для (2) я, к сожалению, не слышал о каких-то красивых общих подходах.

А память компьютера — особенно с учётом доступа к сети — достаточно велика, чтобы для того самого большинства нужных на практике задач проще было считать её бесконечной (= больше, чем нужно для решения)
Re[25]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.10.16 12:29
Оценка:
Здравствуйте, MaxxK, Вы писали:

MK>>>Пример реализации файловой системы, написанной в среде Coq, язык программирования для которой не является полным по Тьюрингу


I>>А зачем так стараться ? Можно ведь вспомнить, что память компьютера конечна


MK>... что, в свою очередь, ничуть не мешает программам в плохих случаях (1) уйти в бесконечный цикл или (2) съесть всю доступную память, так и не решив при этом задачу. От (1) Coq защищает по построению, а вот для (2) я, к сожалению, не слышал о каких-то красивых общих подходах.


И что с того ?
Re[26]: Rust в Dropbox
От: MaxxK  
Дата: 19.10.16 13:58
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


MK>>... что, в свою очередь, ничуть не мешает программам в плохих случаях (1) уйти в бесконечный цикл или (2) съесть всю доступную память, так и не решив при этом задачу. От (1) Coq защищает по построению, а вот для (2) я, к сожалению, не слышал о каких-то красивых общих подходах.


I>И что с того ?


Не понял вопрос. Вот конкретный пример с Coq — отказались от Тьюринг-эквивалентности, и получился всё ещё достаточно мощный функциональный язык программирования, все программы, написанные на котором, гарантировано завершатся при достаточном количестве памяти. Но при этом понять, какого количества памяти будет достаточно, в общем случае для программ, написанных в Coq, нельзя. Так что это не серебряная пуля, даже при всех прочих возможностях Coq по написанию корректных по построению программ.
Re[27]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.10.16 19:16
Оценка:
Здравствуйте, MaxxK, Вы писали:

MK>>>... что, в свою очередь, ничуть не мешает программам в плохих случаях (1) уйти в бесконечный цикл или (2) съесть всю доступную память, так и не решив при этом задачу. От (1) Coq защищает по построению, а вот для (2) я, к сожалению, не слышал о каких-то красивых общих подходах.


I>>И что с того ?


MK>Но при этом понять, какого количества памяти будет достаточно, в общем случае для программ, написанных в Coq, нельзя.


Ну вот ты сам себе дал объяснение. Потому утверждать "полнота по Тьюрингу не нужна" мягко говоря преждевременно. Пока что никто не продемонстрировал внятный инструмент, который решит насущные задачи нежели языки с полнотой по Тьюрингу. вот и всё.
Re[29]: Rust в Dropbox
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.10.16 08:43
Оценка:
Здравствуйте, MaxxK, Вы писали:

MK>Почему преждевременно? Для программ «обычного человека» у нас есть характеристики корректности «наверное не упадёт», «наверное посчитает правильный ответ», «наверное не повиснет» и «наверное хватит памяти/стека». Для программ «курильщика Coq» эти характеристики — «точно не упадёт», «точно посчитает правильный ответ», «точно не повиснет», «наверное хватит памяти/стека». 3 гарантии из 4 (да даже 1 из 2, как в исходном примере), на мой взгляд, вполне себе повод для заявлений «полнота по Тьюрингу не нужна».


Теоретически, она не является необходимым условием. Ты это имел ввиду ? Я же говорю про экономическую целесообразность.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.