Re[6]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.14 15:47
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Как ни крути, когда в языках с GC-by-default требуется performance — от этого GC в той или иной мере пытаются избавиться.


Это неполное видение: как ни крути, в любых языках когда требуется performance — пытаются избавиться от лишних аллокаций. Но в целом согласен. Например, в С++ пытаются избавиться от shared указателей.

DM>>А если в целом, то согласно Страуструпу современный С++ — язык со сборкой мусора (причем плохой: на подсчете ссылок, т.е. медленной, ненадежной и небезопасной).

EP>1. Есть интерфейс для консервативного GC.

Это тоже медленно и ненадежно.

EP>2. Некоторые смарт-поинтеры используют подсчёт ссылок. Но они требуются только при наличии shared семантики, которая встречается крайне редко — в большинстве кода никакой ref-counting не нужен.


Это уже детали и спекуляции.

DM>>(причем плохой: на подсчете ссылок, т.е. медленной,


EP>Почему медленной?


http://research.microsoft.com/pubs/202163/rcix-oopsla-2013.pdf
http://www.cs.virginia.edu/~cs415/reading/bacon-garbage.pdf

DM>>и небезопасной).

EP>Почему небезопасной?

Потому что система типов слишком легко позволяет поиметь указатель на мертвый объект, например. Или перепутать виды указателей, использовать shared там где нужен weak или наоборот. Нет никаких гарантий, все управление памятью на честном слове держится.
Re[7]: C# for Systems Programming
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.01.14 15:49
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>И? Как именно это мешает хаскелю быть быстрым?


Потерял нить разговора?
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.14 16:31
Оценка: :)))
Здравствуйте, AndrewVK, Вы писали:

DM>>И? Как именно это мешает хаскелю быть быстрым?

AVK>Потерял нить разговора?

Себя спрашиваешь?
Смотри:
В C# есть GC, но в критичных местах можно писать код без его участия, тем не менее язык все равно в секторе "медленных". Почему? Например, потому что кодогенератор у него так себе.
В Хаскеле есть GC, но в критичных местах можно писать код без аллокаций, при этом кодогенератор у него другой, поэтому записывать его в сектор "медленных" пока нет причин.
Re[7]: C# for Systems Programming
От: Evgeny.Panasyuk Россия  
Дата: 02.01.14 16:55
Оценка:
Здравствуйте, D. Mon, Вы писали:

EP>>Как ни крути, когда в языках с GC-by-default требуется performance — от этого GC в той или иной мере пытаются избавиться.

DM>Это неполное видение: как ни крути, в любых языках когда требуется performance — пытаются избавиться от лишних аллокаций.

Согласен, но в C++ это достигается легко, без потери абстракций. А в языках с GC переходят на уровень даже ниже чем C — играют массивами байт.

EP>>2. Некоторые смарт-поинтеры используют подсчёт ссылок. Но они требуются только при наличии shared семантики, которая встречается крайне редко — в большинстве кода никакой ref-counting не нужен.

DM>Это уже детали и спекуляции.

Это факт — ref counting в C++ нужен редко.

DM>>>(причем плохой: на подсчете ссылок, т.е. медленной,

EP>>Почему медленной?
DM>http://research.microsoft.com/pubs/202163/rcix-oopsla-2013.pdf

RC divides execution into three distinct phases: mutation, reference counting collection, and cycle collection.


DM>http://www.cs.virginia.edu/~cs415/reading/bacon-garbage.pdf


We have implemented both types of collector: a multiprocessor concurrent reference counting collector with cycle collection

В обоих случаях говорится про ref-counted GC со сборкой циклов. Это принципиально отличается от того что даёт std::shared_ptr — никакого cycle collection там нет

DM>>>и небезопасной).

EP>>Почему небезопасной?
DM>Потому что система типов слишком легко позволяет поиметь указатель на мертвый объект, например. Или перепутать виды указателей, использовать shared там где нужен weak или наоборот. Нет никаких гарантий, все управление памятью на честном слове держится.

При раскладывании объектов по массивам байт в управляемых языках возникают те же проблемы.
Re[8]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 02.01.14 18:10
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>В обоих случаях говорится про ref-counted GC со сборкой циклов. Это принципиально отличается от того что даёт std::shared_ptr — никакого cycle collection там нет


Это к вопросу о ненадежности. Но даже без cycle collection временные характеристики не менее печальные. Даже такая важная оптимизация как deferred reference counting, как я подозреваю, на С++ не делается.

EP>>>Почему небезопасной?

DM>>Потому что система типов слишком легко позволяет поиметь указатель на мертвый объект, например. Или перепутать виды указателей, использовать shared там где нужен weak или наоборот. Нет никаких гарантий, все управление памятью на честном слове держится.

EP>При раскладывании объектов по массивам байт в управляемых языках возникают те же проблемы.


Поэтому не надо раскладывать.
Re[9]: C# for Systems Programming
От: Evgeny.Panasyuk Россия  
Дата: 02.01.14 19:43
Оценка:
Здравствуйте, D. Mon, Вы писали:

EP>>В обоих случаях говорится про ref-counted GC со сборкой циклов. Это принципиально отличается от того что даёт std::shared_ptr — никакого cycle collection там нет

DM>Это к вопросу о ненадежности.

К вопросу о надёжности — кроме памяти есть и другие ресурсы, причём для которых необходимо детерминированное время жизни. В управляемых языках только половинчатые решения: using/try-with-resources/with.

DM>Но даже без cycle collection временные характеристики не менее печальные.


Почему?

DM>Даже такая важная оптимизация как deferred reference counting, как я подозреваю, на С++ не делается.


Чем же она так важна, особенно в контексте C++?

EP>>При раскладывании объектов по массивам байт в управляемых языках возникают те же проблемы.

DM>Поэтому не надо раскладывать.

Когда нужна производительность, например на Java — вынужденны раскладывать и отказываться от GC
Re[9]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.14 20:51
Оценка: +1
Здравствуйте, D. Mon, Вы писали:

EP>>При раскладывании объектов по массивам байт в управляемых языках возникают те же проблемы.

надо расклад
DM>Поэтому неывать.

Надо. смотри off heap cache
Re[2]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.14 21:02
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>Но сколько я с ним ни сталкивался — боль и ужас. По параметрам "Safety & Productivity" я бы убрал его в левый нижний угол.


Боль и ужас это DOM и css. Хочешь смотреть серьезные вещи — смотри node.js , внятный АПИ большей частью и довольно предсказуемое поведение.

AK>Вообще я грешил на своё плохое знание JavaScript и по возможности стараюсь это исправить — вот буквально два дня назад на распродаже
Автор: Lonely Dog
Дата: 27.12.13
купил десяток книг, из них две — по jQuery. По работе частенько приходится сталкиваться с JS, допиливая какие-нибудь веб-интерфейсы.


Не надо путать джаваскрипт с DOM, Css и поделками навроде jQuery.

AK>Но что-то наблюдая за другими разработчиками в своих командах, я бы не сказал что большинство из них пишет JS-части кода сильно быстрее и лучше, чем я.


AK>Куда бы вы поместили JavaScript на этой диаграмме?


Примерно там, где он сейчас стоит, может быть даже чуток правее Скажем, отрисовка в канвас будет не хуже, чем мега сервелат на С#

И не совсем понятно, почему по перформансу джава правее C#, низкоуровневый перформанс в C# намного лучше, там честные оптимизации на дженериках и прочих вещах, навроде строк и типов-значений. Серверный перформанс выше в джаве и исключительно благодаря библиотекам, которым уже 20 скоро будет.
Re[3]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.14 21:20
Оценка: 5 (1) :)
Здравствуйте, Аноним, Вы писали:

А>Да это вообще странная идея о том, что-де на джаваскрипт проще программировать, чем на Java или C#.


А что странного, я вот пишу и отдыхаю после C# Вот первых, отладка намного мощнее, многие вещи можно попробовать прямо в отладочной консоли, в джаве и дотнете это недостижимый предел.

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


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

А>Набирать код в Javascript нужно внимательно и напряженно, чтобы не дай бог не опечататься и ничего не перепутать, и набирать вручную приходится гораздо больше, чем в C# и подобных, из-за отсутствия подсказок, компиляции,


Наоборот — набирать нужно намного _меньше_. А вот если на джаваскрипте писать "как на C#" то гораздо больше.

>рефакторинга и статической типизации. Ну и в Javascript есть набор совершенно диких нелогичностей в преобразованиях типов и синтаксисе, которых в C# нет, при этом в джаваскрипт ты ошибку не найдешь, пока выполнение не дойдет до этого места с нужными предварительными шагами (для получения тех данных, при которых проявляется ошибка). Ну или нужно строго 100% покрытие тестами.


Есть много нелогичностей, но в целом кривая вхождения довольно пологая.

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


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

Взять браузер — там одни ограничения. Серверные приложения — другие. Десктоп — третьи. Мобайл — четвертые. На кой ляд там одна библиотека, если скажем работа с файлами принципиально отличается во всех четырех случаях ?

Вместо этого можно подобрать библиотеку под конкретный случай.

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


1. в языках навроде C# слабоватый вывод типов и через это возможности ООП и ФП довольно хилые.
2. юниттесты нужны и в C#, при чем ровно там же, где и в джаваскрипте
3. запуск программы на JS большей частью ничего не стоит и да и запускать можно не программу, а один файл

А>Я не так много программировал на Javascript, так что, уверен, список недостатков можно пополнить. Хотя на Javascript можно делать веселые штуки благодаря динамике, и в отдельно взятых конкретных случаях они могут здорово сократить решение, да. Но не думаю, что таких случаев достаточно, чтобы это было существенно.


Динамика дает возможности, которых в C# нет и никогда не будет

А>Если все это суммировать, утверждения о более высокой производительности разработки на Javascript по сравнению, например, с C# — смехотворный бред, вызванный чьим-то больным воображением, либо какой-то миф, оставшийся от устаревших представлений. Непонятно, почему этот дурацкий миф так широко распространен и всеми так легко принимается на веру.


Хочешь, простой тест сделаем — регэкспы. Сильно удивишься. Или рисование в канвас.

Ну или совсем чит — правильный пайпинг на сервере, т.е. читаешь поток , обрабатываешь и одновременно отдаёшь. Выпилить такое на WCF мало кто сможет, стандартная либа первым делом пытается закачать весь стрим а уже потом разрешить процессить.
Re[3]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.14 21:22
Оценка: :))) :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>4. JavaScript можно считать более продуктивным потому, что это язык с динамической типизацией. Это позволяет легко писать обобщённый код. Но safety — это крайне спорный момент (опять таки — что конкретно подразумевается).


джаваскрипт исполняется в песочнице, что дает сафети.
Re[4]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 02.01.14 21:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

EP>>1. Почему Java правее C#? В Java даже структур нету. Или это обусловлено только текущим качеством оптимизаторов?


AVK>Я так понимаю мало кто удосужился прочесть многабукав статьи. А в ней есть ответ:

AVK>

AVK>Java is closer than C# thanks to the excellent work in HotSpot-like VMs which employ code pitching and stack allocation.


А что это значит ? Что это за VM такие и что такое питчинг и тд ?
Re[4]: C# for Systems Programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.14 01:39
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Хаскель уже без ГЦ обходится?


Жабаскрип без ЖЦ обходится. Но это ему не шибко помогает.

Что до Хаскеля, то не сказал бы, что писать на нем так уж продуктивно. Так что даже если он не будет отличатья от Си по скорости, один фиг его вряд ли ждет повсеместное применение. Это язык не для всех.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# for Systems Programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.14 01:46
Оценка:
Здравствуйте, Sharov, Вы писали:

S>http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html


Вот это форменный набор приседаний. Вообще, паттерны — это список недоработок в языке. Чем меньше нужно знать паттернов при программировании на языке, тем лучше этот язык.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# for Systems Programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.14 01:48
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>4. JavaScript можно считать более продуктивным потому, что это язык с динамической типизацией. Это позволяет легко писать обобщённый код. Но safety — это крайне спорный момент (опять таки — что конкретно подразумевается).


Лично для меня и скорость кодирования на скриптах очень спорный вопрос. Но тут на любителя. Есть люди которым динамика надет преимущество, а есть те для кого это недостаток. Я предпочитают статические проверки типов и качественный интеллисес.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: C# for Systems Programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.14 01:51
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>2. Некоторые смарт-поинтеры используют подсчёт ссылок. Но они требуются только при наличии shared семантики, которая встречается крайне редко — в большинстве кода никакой ref-counting не нужен.


Это ты расскажи тем кто Хорм в Гуле пилит. Они в итоге замаялись с тормозным и глючным посчетом ссылок и запилили ЖЦ для плюсов. Убогий конечно, но для их задач все равно лучше чем то что можно сделать в плюсах без него.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# for Systems Programming
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.14 01:56
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Я так понимаю мало кто удосужился прочесть многабукав статьи. А в ней есть ответ:

AVK>

AVK>Java is closer than C# thanks to the excellent work in HotSpot-like VMs which employ code pitching and stack allocation.


Что на практике скорее желаемое, нежели действительное. В то же Скале это ни хрена не помогает сделать for таким же быстрым как в Яве, так как он реализован как функция высшего порядка. Казалось бы мощные оптимизации явовского рантайма должны были бы нивелировать разницу, но на практике они только лишь сокращают отставание. Но оно все равно огромно.

В дотнете же оптимизации можно делать за счет использования вэйлью-типов. Так что на практике, в лучшем случае Ява стоит на одном месте по производительности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# for Systems Programming
От: Andir Россия
Дата: 03.01.14 04:15
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Жабаскрип без ЖЦ обходится. Но это ему не шибко помогает.


А как же тогда в JavaScript менеджится память?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
https://developers.google.com/v8/design?hl=ru#garb_coll

--
С Уважением, Andir!
using(<< RSDN@Home 1.2.0 alpha 5 rev. 74>>) { /* Работаем */ }
Re[4]: C# for Systems Programming
От: Andir Россия
Дата: 03.01.14 04:25
Оценка: +3
Здравствуйте, Ikemefula, Вы писали:

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


см. WCF Streaming

--
С Уважением, Andir!
using(<< RSDN@Home 1.2.0 alpha 5 rev. 74>>) { /* Работаем */ }
Re[4]: C# for Systems Programming
От: Евгений Акиньшин grapholite.com
Дата: 03.01.14 05:20
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


I>Взять браузер — там одни ограничения. Серверные приложения — другие. Десктоп — третьи. Мобайл — четвертые. На кой ляд там одна библиотека, если скажем работа с файлами принципиально отличается во всех четырех случаях ?


А работа с потоками обычно везде одинаковая — практически везде есть базовый IStream (никогда не видел, чтобы с этим были проблемы).

Или, возьмем для примера, хотя бы коллекции и нотификации о изменениях. В том же .net все используют одни и те же IEnumerable, IList, INotifyPropertyChanged и т.д.

А на jscript каждый придумывает свою базовую библиотеку ни с чем не совместимую. В результате нельзя например написать логическую часть независимо, а потом выбрать GUI библиотеку для отображения — в каждой гуи библиотеке свой не визуальный фреймворк, со своими требованиями ко всем базовым объектам и все завязано на узел по самое ни хочу. И так во всем.

I>Вместо этого можно подобрать библиотеку под конкретный случай.


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

И как вы там выкручиваетесь без элементарных типов, вроде decimal?

I>Динамика дает возможности, которых в C# нет и никогда не будет


Например?
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[5]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.01.14 06:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> В то же Скале это ни хрена не помогает сделать for таким же быстрым как в Яве, так как он реализован как функция высшего порядка.


Давно проверял?
Эта проблема была очень давно, и мне казалось, ее уже давно исправили.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.