Re: Проект утилитной библиотечки
От: xy012111  
Дата: 16.03.16 23:00
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Вопросы:

AVK>1) Кто что по этому думает?

http://editorconfig.org/ бы прикрутить, а то у всех настройки редакторов разные, а в проекте должен бьыть один.
Мои личные настроки сильно уж отличаются от того, что в StringExtensions уже есть, посему мне сложно будет добавить.
Re[8]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.03.16 23:21
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

AVK>>Другие требования. Подобная библиотека будет содержать в разы больше функционала.

EP>Видимо ты подразумеваешь жирные библиотеки типа POCO, QT и т.п.

Нет, я подразумеваю как раз библиотеки вроде буста, во многом закрывающие убогость библиотеки стандартной. Для дотнета такого просто не нужно.

EP>Точно — это в QT свои строки, в Boost их нет.

EP>В Boost есть конечно универсальные алгоритмы и библиотеки для работы со строками — String Algo, Spirit, etc — но они не прибиты к конкретным типам строк

Это просто пример. Та же boost:lambda не в одном месте используется.

AVK>>Во всех. Еще раз — идея в том чтобы собрать максимально неспециализированный код, а не очередной всемогутер типа буста или жабьего спринга.

EP>Раскрой мысль про "максимально неспециализированный код",

Код, который не завязан на какую нибудь сравнительно узкую специализацию.

EP> и почему Boost сюда не подходит?


Потому что там много специализированных вещей.

AVK>>Только голосованиями/сурвеями.

EP>Может прикрутить что-то типа Github'овских звёздочек, но на отдельные компоненты/классы/функции?

Куда прикрутить?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.03.16 23:21
Оценка:
Здравствуйте, xy012111, Вы писали:

X>http://editorconfig.org/ бы прикрутить, а то у всех настройки редакторов разные, а в проекте должен бьыть один.


Ну прикрути. Я правда не очень понял что потом с этим конфигом полезного делать. Какой то питоноскрипт при серверной сборке запускать?

X>Мои личные настроки сильно уж отличаются от того, что в StringExtensions уже есть, посему мне сложно будет добавить.


https://rsdn.ru/article/mag/200401/codestyle.XML
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Проект утилитной библиотечки
От: xy012111  
Дата: 16.03.16 23:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

X>>http://editorconfig.org/ бы прикрутить, а то у всех настройки редакторов разные, а в проекте должен бьыть один.

AVK>Ну прикрути. Я правда не очень понял что потом с этим конфигом полезного делать. Какой то питоноскрипт при серверной сборке запускать?

https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328

X>>Мои личные настроки сильно уж отличаются от того, что в StringExtensions уже есть, посему мне сложно будет добавить.

AVK>https://rsdn.ru/article/mag/200401/codestyle.XML

OK
Re[4]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.03.16 23:36
Оценка:
Здравствуйте, xy012111, Вы писали:

X>https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328


А смысл? Студия очень мало сама по себе на эту тему умеет, особенно до Розлина. Вот Решарпер или StyleCop это да, но они эту штуку не понимают.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Проект утилитной библиотечки
От: xy012111  
Дата: 16.03.16 23:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

X>>https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328


AVK>А смысл? Студия очень мало сама по себе на эту тему умеет, особенно до Розлина. Вот Решарпер или StyleCop это да, но они эту штуку не понимают.


Смысл в том, что при открытии солюшена расширение изменит настройки форматирования студии в соответствии с этим файлом, если он будет лежать в правильном месте в папке солюшена.
Re[9]: Проект утилитной библиотечки
От: Evgeny.Panasyuk Россия  
Дата: 17.03.16 00:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Другие требования. Подобная библиотека будет содержать в разы больше функционала.

EP>>Видимо ты подразумеваешь жирные библиотеки типа POCO, QT и т.п.
AVK>Нет, я подразумеваю как раз библиотеки вроде буста, во многом закрывающие убогость библиотеки стандартной. Для дотнета такого просто не нужно.

Пролистай список библиотек Boost, если отбросить то что уже в стандарте, то в .NET из этого есть от силы процентов 20% А вот есть брать что-то типа POCO — там да, очень много пересечения с .NET.

В Boost кстати есть даже многое из того что называли в этом топике:

AVK>Хелпер, обеспечивающий использование ReaderWriterLock с оператором using.

std/boost:: unique_lock, lock_guard

AVK>Есть более специфичные штуки — парсер командной строки

Boost.Program_options

S>Если кому надо — Range<T>/CompositeRange<T> для операция над диапазонами/наборами диапазонов — объединение, пересечение, дополнение — полный набор.

std/boost:: set_union, set_intersection, set_difference, set_symmetric_difference

R>MultiValueDictionary — сейчас есть уже в Corefxlab

std/boost:: multimap, unordered_multimap

R>ObjectPool взятый с проекта Roslyn

Boost.Pool

L>Алгоритмы LowerBound/UpperBound на массивах и list'ах.

std/boost:: lower_bound, upper_bound, equal_range, partition_point

L>Коллекцию Disjoint Sets.

boost::graph::disjoint_sets


AVK>Это просто пример. Та же boost:lambda не в одном месте используется.


Где? Сделал grep — там только в двух библиотеках добавили расширенную поддержку boost::lambda, никак не заставляя пользователя использовать её, и всё.

AVK>>>Во всех. Еще раз — идея в том чтобы собрать максимально неспециализированный код, а не очередной всемогутер типа буста или жабьего спринга.

EP>>Раскрой мысль про "максимально неспециализированный код",
AVK>Код, который не завязан на какую нибудь сравнительно узкую специализацию.

Парсер командной строки предложенный тобой, парсер CSV, или например предложенное scoped tempdir — это всё довольно узкая специализация

AVK>>>Только голосованиями/сурвеями.

EP>>Может прикрутить что-то типа Github'овских звёздочек, но на отдельные компоненты/классы/функции?
AVK>Куда прикрутить?

Например в документацию.
Re[8]: Проект утилитной библиотечки
От: IT Россия linq2db.com
Дата: 17.03.16 02:44
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>1. Куда заводить тикеты.

AVK>github на английском

+1. Тем более, что они интегрированы с репозиторием.

S>>2. Где обсуждать / голосовать фичи

AVK>github на английском. Если совсем уж проблемы с английским — можно в форум в надежде что кто то заветет issue на гитхабе. Примерно как сейчас с тем же решарпером — основной трекер англоязычный, а здесь русскоязычный форум.

Для обсуждений можно у нас форум в проектах завести. На английском сильно не пообсуждаешь, да и голосовалок там нет.

S>>3. Документашка.

AVK>Для разработчиков самой библиотеки — пока на русском в местной вике. Для пользователей — md в проекте на английском. Проект/русская версия на русском в местной вике.

На гитхабе есть вика. Можно там.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.16 15:53
Оценка:
Здравствуйте, rameel, Вы писали:

R>7. NaturalStringComparer для натурального сравнения строк. Пару раз уже пригодилась, взято отсюда с http://rsdn.ru/forum/src/4246932.1
Автор: Andy77
Дата: 24.04.11


Может я чего не понимаю, но оно полностью нерабочее. Подробности в тесте.

Поковырял в гугле, нашел реализацию на жабе — https://github.com/paour/natorder/blob/master/NaturalOrderComparator.java
Выглядит немного похитрее.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: Проект утилитной библиотечки
От: Sinix  
Дата: 17.03.16 16:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Поковырял в гугле, нашел реализацию на жабе — https://github.com/paour/natorder/blob/master/NaturalOrderComparator.java

AVK>Выглядит немного похитрее.

Лучше не с явы, на SO есть почти рабочее решение, очень близкое к нативной StrCmpLogical. В коде опечатка падает при сравнении строк из нулей, как поправить в комментариях есть.

Проверено и тестами и опытной эксплуатацией, работает.

UPD. Подключусь на следующей неделе скорее всего, работа.
Зато вспомнил, за что я не люблю NUnit — Assert.That.This.Asertion.Would.Not.Be.Read.By.Anyone(), 100 способов записать одно и тоже и вечные баги типа такого — подарок тот ещё
Фиг с ним, прорвёмся.
Отредактировано 17.03.2016 16:43 Sinix . Предыдущая версия .
Re[4]: Проект утилитной библиотечки
От: Evgeny.Panasyuk Россия  
Дата: 17.03.16 16:37
Оценка:
Здравствуйте, AndrewVK, Вы писали:

R>>7. NaturalStringComparer для натурального сравнения строк. Пару раз уже пригодилась, взято отсюда с http://rsdn.ru/forum/src/4246932.1
Автор: Andy77
Дата: 24.04.11

AVK>Может я чего не понимаю, но оно полностью нерабочее. Подробности в тесте.

Это же получается experimental а не main.
Re[5]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.16 16:41
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Лучше не с явы, на SO есть почти рабочее решение, очень близкое к нативной StrCmpLogical. В коде опечатка падает при сравнении строк из нулей, как поправить в комментариях есть.


Да я вроде жабное портанул уже, вполне рабочее. Так что ХЗ как лучше. Ты как считаешь?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.16 16:41
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Это же получается experimental а не main.


Не получается. Разница между experimental и main, во-первых, проявляется в релизе, а не в любом состоянии репа, а во-вторых оно больше относится к собственно публичному API, а не к реализации.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: Проект утилитной библиотечки
От: Sinix  
Дата: 17.03.16 16:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Да я вроде жабное портанул уже, вполне рабочее. Так что ХЗ как лучше. Ты как считаешь?


Проект без кода подобен проекту с кодом, но только без кода

Так что пусть будет то что есть, как будет время / необходимость — можно поменять. Главное, чтоб никто не закладывался на порядок сортировки, а то если будут баги — не исправишь без поломки совместимости.
Re: Проект утилитной библиотечки
От: Klikujiskaaan КНДР  
Дата: 17.03.16 20:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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

AVK>Основные критерии оптимизации — высокая универсальность (т.е. возможность использовать в широком спектре проектов), минимальный объем навязываемых решений (т.е. никаких сквозных подвязок, никаких фреймворков), высокая читаемость и качество кода.
AVK>Вопросы:
AVK>1) Кто что по этому думает?
AVK>2) Что бы хотелось в этой библиотеке увидеть, и что не хотелось бы?
AVK>3) Кому интересно в этом поучаствовать?
AVK>4) Кому интересно библиотеку в своих проектах использовать?

Было бы интересно поучаствовать, сейчас посмотрю что там и как, может даже затащу в свой проект.
Re[2]: Проект утилитной библиотечки
От: nigh  
Дата: 17.03.16 20:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>7) Хелпер, обеспечивающий использование ReaderWriterLock с оператором using.

Это, вроде отцы-основатели не рекомендуют делать. Они даже не рекмендуют больше lock использовать https://blogs.msdn.microsoft.com/ericlippert/2009/03/06/locks-and-exceptions-do-not-mix/
Re[3]: Проект утилитной библиотечки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.16 20:35
Оценка:
Здравствуйте, nigh, Вы писали:

N>Это, вроде отцы-основатели не рекомендуют делать. Они даже не рекмендуют больше lock использовать https://blogs.msdn.microsoft.com/ericlippert/2009/03/06/locks-and-exceptions-do-not-mix/


Ну, если судить по твоей ссылке, то "не рекомендуют" сильно сказано. Кроме того, в случае с RWLock это не борьба с исключением, а просто способ указать в коде scope, в котором лок действует. Примерно как Html.BeginForm в MVC.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Проект утилитной библиотечки
От: xy012111  
Дата: 17.03.16 20:40
Оценка:
Здравствуйте, AndrewVK, Вы писали:

X>>https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328

AVK>А смысл?

Мда, я был уверен, что EditorConfig умеет хотя бы скобки расставлять, а там из полезного лишь настройка табуляции
Re[3]: Проект утилитной библиотечки
От: Evgeny.Panasyuk Россия  
Дата: 17.03.16 20:43
Оценка: +1
Здравствуйте, nigh, Вы писали:

AVK>>7) Хелпер, обеспечивающий использование ReaderWriterLock с оператором using.

N>Это, вроде отцы-основатели не рекомендуют делать. Они даже не рекмендуют больше lock использовать https://blogs.msdn.microsoft.com/ericlippert/2009/03/06/locks-and-exceptions-do-not-mix/

Описанная там проблема относится скорее в общем к exception safety guarantee, чем к различного рода lock'ам.

And of course, this is yet another reason why aborting a thread is pure evil. Try to never do so!

Я же говорил:

https://rsdn.ru/forum/philosophy/6063177.1


EP>>>Он может выкинуть исключение откуда угодно? Или только из обозначенных мест?
S>>Откуда угодно.

EP>Очень хрупкая концепция — получается что no-throw кода нет в принципе, что в некоторых случаях сильно затрудняет реализацию транзакционных операций.
EP>Надеюсь оно хоть не выкидывает новое исключение при повтором Thread.Abort в случае когда первое поймано или при выполнении finally/dispose?



(3) carefully implement the bodies of locks that do mutations so that in the event of an exception, the mutated resource is rolled back to a pristine state before the lock is released. (Good, but hard.)

При помощи scope(failure)/scope(success) это намного проще.
Отредактировано 17.03.2016 20:58 Evgeny.Panasyuk . Предыдущая версия .
Re[4]: Проект утилитной библиотечки
От: nigh  
Дата: 17.03.16 20:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


N>>Это, вроде отцы-основатели не рекомендуют делать. Они даже не рекмендуют больше lock использовать https://blogs.msdn.microsoft.com/ericlippert/2009/03/06/locks-and-exceptions-do-not-mix/


AVK>Ну, если судить по твоей ссылке, то "не рекомендуют" сильно сказано. Кроме того, в случае с RWLock это не борьба с исключением, а просто способ указать в коде scope, в котором лок действует. Примерно как Html.BeginForm в MVC.


Да нет, там все гораздо глубже. Основная мысль в том, что Disposable и try-finally для семантики локов не подходят и создают ложное ощущение безопасности.
В случае с rwlock, если в процессе выполнения операции внутри using возникнет исключение, finally-блок радостно разблокирует заблокированный ресурс и вы получите букет с race conditions, unprecitable behavior и т. д. (т.е. unlock произойдет тогда, когда вы его не ожидали, а не должен был произойти в принципе)

Причем, самое ужасное, что такой дизайн кода получается неявно (в случае явного вызова lock / unlock и отсутствия implicit try/finally в глаза сразу бросаются вопросы "а что будет если тут будет exception?")



using(GetRWLock())
{
   UpdateJournal(AccountA, AccountB, 100)
   AddMoney(AccountA, 100)
   WithdrawMoney(AccountB, 100)    //throw an exception here, all other threads now receive an account in an incorrect state
}



var lc = GetRWLock();

lc.wlock();
UpdateJournal(AccountA, AccountB, 100)
AddMoney(AccountA, 100)
WithdrawMoney(AccountB, 100)    //throw an exception here, will never unlock unless proper recovery is done - likely a deadlock, but no further data corruption by other threads

rwlock.unlock();
Отредактировано 17.03.2016 20:48 nigh . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.