Re[5]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.01.14 06:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Жабаскрип без ЖЦ обходится.


Это где такой?
Re[5]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.01.14 06:39
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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

I>А что это значит ? Что это за VM такие и что такое питчинг и тд ?

Питчинг там не к месту упомянут, имхо. Это про освобождение из памяти неиспользуемого скомпиленного нативного кода.
Вот скажи, CLR умеет перекомпилировать горячие циклы в рантайме? А делать так, чтобы локальное значение reference-типа было создано не в управляемой куче, а на стеке? Вроде как HotSpot (Oracle JVM) это все делает.
Re[10]: C# for Systems Programming
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.01.14 06:43
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


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

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

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


Ага, вот оказался у тебя цикл без внешних ссылок на него, и все, другие ресуры остались неосвобожденными. Не, к ненадежности.

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

EP>Почему?

Попробуй почитать статьи выше дальше первой страницы.

EP>Когда нужна производительность, например на Java — вынужденны раскладывать и отказываться от GC


Это потому что Java. Разве я о ней в этой ветке говорил?
Re[3]: C# for Systems Programming
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 03.01.14 07:12
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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

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

А вот там где DOM и CSS — для вас там тоже боль и ужас? Я, в общем-то, эту сферу и имел в виду. Как-то вылетело из головы, что на JS нынче и серверные части пишут.
Я с node.js не сталкивался пока, мне с JS приходится работать, в основном, для обработки ввода пользователя на HTML-страничках. А год назад довелось поучаствовать в разработке Android-приложения на HTML5+JS. Если я правильно понимаю, в этих случаях node.js неприменим? Он вроде для серверной части.

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


Ну так для браузерной части других поделок нет.

I>И не совсем понятно, почему по перформансу джава правее C#

...
I>Серверный перформанс выше в джаве

Вероятно, как раз поэтому.

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


Пусть, благодаря библиотекам. Важен результат.
Хотя мне и то и другое кажется медленным..
С уважением, Artem Korneev.
Re[3]: C# for Systems Programming
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 03.01.14 07:28
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>2. C++11 должен быть и выше и правее C++98 — быстрый код стало легче писать.


Он и так выше. А почему он должен быть правее-то?
С++11 позволяет выжать из железа тоже самое, что и С++98, просто облегчает процесс написания кода.

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


Вы пробовали? У вас получалось легко писать код на JavaScript?
Я про практическую часть спрашивал. У меня JS-код шёл с большим скрипом. Забытая скобочка или, хуже того, опечатка в имени элемента — проявлялись лишь после запуска приложения. А мне нужно было писать часть, которая делает снимки фото-камерой и заливает результат на сервер. Отлаживать приходилось в эмуляторе — "сохранить, скомпилить, перезапустить, ввести все параметры.." И только после этого увидеть в консоли сообщение, что оно не нашло такого элемента.

Отсутствие автокомплита тоже огорчило. Вкупе с моим смутным пониманием самого JS, это заставляло просто искать готовые решения в интернете. Сам я не мог понять, как написать что-то более-менее сложное.

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

Тут в треде упомянули инструменты от JetBrains — нужно спросить у менеджера, есть ли у нас лицензии. Может быть, чем-то улучшит ситуацию. Пока я пользовался лишь Visual Studio & Notepad++
С уважением, Artem Korneev.
Re[5]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 09:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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


И давно ?
Re[5]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 09:25
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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


Очень интересно, особенно с учетом того, что "паттерны" есть даже в естественном языке.
Re[5]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 09:26
Оценка: -2
Здравствуйте, Andir, Вы писали:

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


A>см. WCF Streaming


Да-да, это он так и работает.
Re[4]: C# for Systems Programming
От: Философ Ад http://vk.com/id10256428
Дата: 03.01.14 09:34
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


Какие?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[4]: C# for Systems Programming
От: Evgeny.Panasyuk Россия  
Дата: 03.01.14 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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

VD>Лично для меня и скорость кодирования на скриптах очень спорный вопрос. Но тут на любителя. Есть люди которым динамика надет преимущество, а есть те для кого это недостаток.

На C#/Java обобщённый код особо не получается
Автор: Evgeny.Panasyuk
Дата: 04.11.13
. На C++ с этим всё нормально, но приходится то тут, то там подсказывать компилятору (auto, decltype, template, etc).
На языках с динамической типизацией этот обобщённый код получается легко и непринуждённо, но приносятся в жертву compile-time проверки.
Собственно код на языках со статической типизацией с каждым годом становится похож на код языков с динамической типизацией (например полиморфные лямбды в C++14, или те же лямбды в C# — удобно ведь). Но динамические языки — это то что доступно здесь и сейчас.

VD>Я предпочитают статические проверки типов и качественный интеллисес.


Я думаю все предпочитают статические проверки.
Re[7]: C# for Systems Programming
От: Evgeny.Panasyuk Россия  
Дата: 03.01.14 09:48
Оценка:
Здравствуйте, VladD2, Вы писали:

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

VD>Это ты расскажи тем кто Хорм в Гуле пилит. Они в итоге замаялись с тормозным и глючным посчетом ссылок и запилили ЖЦ для плюсов. Убогий конечно, но для их задач все равно лучше чем то что можно сделать в плюсах без него.

А есть ссылка?
Re[5]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 09:55
Оценка:
Здравствуйте, Евгений Акиньшин, Вы писали:

ЕА>Здравствуйте, Ikemefula, Вы писали:


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


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


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


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

Вообще эта хрень пролазит уже в мобайл, не сильно в курсе какие успехи.

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


Я про это говорил — незачем в джаваскрипте писать как в дотнете. Вместо, скажем, INotifyPropertyChanged используется key-value observer, это более мощная вещь. IList не нужен. IEnumerable помог бы, но для этого уже есть кое что в
следующем стандарте. INotifyPropertyChanged при желании реализуется очень просто — где надо, берёшь и файришь эвент

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


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


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


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


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


А зачем они нужны ?

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


ЕА>Например?


метапрограммирование в рантайме. На этом сделана целая куча либ.
Re[7]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 10:37
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Это ты расскажи тем кто Хорм в Гуле пилит. Они в итоге замаялись с тормозным и глючным посчетом ссылок и запилили ЖЦ для плюсов. Убогий конечно, но для их задач все равно лучше чем то что можно сделать в плюсах без него.


Похоже этот ЖЦ настолько убог, что нет никакой возможности даже проверить его работоспособности, ибо DOM ведёт себя так, как будто этот ЖЦ сделан целиком и полностью на счетчиках ссылок.
Re[5]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 10:45
Оценка: +1
Здравствуйте, Философ, Вы писали:

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


Ф>Какие?


Метапрограммирование в рантайме и плюшки динамики — православный полиморфизм.
Re[5]: C# for Systems Programming
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.01.14 10:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Жабаскрип без ЖЦ обходится.


Оно и видно:
https://developers.google.com/v8/design#garb_coll
http://blogs.msdn.com/b/ericlippert/archive/2003/09/17/53038.aspx
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: C# for Systems Programming
От: Евгений Акиньшин grapholite.com
Дата: 03.01.14 11:30
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Евгений Акиньшин, Вы писали:


ЕА>>Здравствуйте, Ikemefula, Вы писали:


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


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


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


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


I>Вообще эта хрень пролазит уже в мобайл, не сильно в курсе какие успехи.


Ничего не понял — чем бы помешал единый способ работы с потоками везде, включая браузер и какая поддержка им нужна?


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


I>Я про это говорил — незачем в джаваскрипте писать как в дотнете. Вместо, скажем, INotifyPropertyChanged используется key-value observer, это более мощная вещь. IList не нужен. IEnumerable помог бы, но для этого уже есть кое что в

I>следующем стандарте. INotifyPropertyChanged при желании реализуется очень просто — где надо, берёшь и файришь эвент

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

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


I>А зачем они нужны ?


Деньги считать

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


ЕА>>Например?


I>метапрограммирование в рантайме. На этом сделана целая куча либ.


Ну так в си-шарпе это тоже частенько используется — начиная от компиляции лямбд и кончая полноценной кодогенерацией с запуском компилятора. Понятно, что в динамике это будет удобнее делать, но "нет и никогда не будет" это перебор.
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[6]: C# for Systems Programming
От: Философ Ад http://vk.com/id10256428
Дата: 03.01.14 11:32
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


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


Ф>>Какие?


I>....плюшки динамики — православный полиморфизм.


Можно подробнее?
Я полиморфизм понимаю с точки зрения классического определения, т.е. например вот так: различное поведение экземпляров производных классов.
или вот так:

Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1]. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».


Кстати, мы тут вообще об ООП говорим, или о чём?

I>Метапрограммирование в рантайме...


Что мешает метапрограммировать в рантайме на шарпе? CodeDOM отменили?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[6]: C# for Systems Programming
От: Аноним  
Дата: 03.01.14 11:42
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Очень интересно, особенно с учетом того, что "паттерны" есть даже в естественном языке.


Ха, отличный пример — естественный язык! Естественные языки гораздо хуже, избыточнее и непоследовательнее, чем самые плохие из формальных искусственных языков.
Re[5]: C# for Systems Programming
От: Аноним  
Дата: 03.01.14 12:10
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>На C#/Java обобщённый код особо не получается
Автор: Evgeny.Panasyuk
Дата: 04.11.13
. На C++ с этим всё нормально, но приходится то тут, то там подсказывать компилятору (auto, decltype, template, etc).


Чтобы проверить корректность типизации, нужно ввести ограничения, а, точнее, объяснить компилятору свои намерения формально, чтобы он и мог выполнить проверки. Ничего удивительного, что не получается написать нонсенс вроде "обобщенная функция с непонятно какой сигнатурой".

EP>На языках с динамической типизацией этот обобщённый код получается легко и непринуждённо, но приносятся в жертву compile-time проверки.


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

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

Например, что делает данная фукнция:

function concatenate(a, b);


А если так:

Matrix3x3 concatenate(Matrix3x3 a, Matrix3x3 b);


Я не знаю, каким изощренным и неземным мышлением надо обладать, чтобы сказать, что с кодом в стиле первого фрагмента работать проще?

Ну и про обобщенный код: что, кто-то хочет сказать, что раз функция в первом фрагменте такая вся из себя обобщенная, не должна ли она тогда конкатенировать все подряд: и строки, и матрицы, и списки, и массивы, и звуковые файлы, и еще черт знает что? Слабо написать такую обобщенную функцию?

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


Просто некорректное сравнение. Статическая типизация все равно остается статической, так что динамические языки — это не то, "что доступно здесь и сейчас", а скорее "не хотите ли вы из кареты пересесть в телегу". Для тебя это привлекательно звучит по какой-то причине, для других — не уверен, например, для меня — не особо.
Re[7]: C# for Systems Programming
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 03.01.14 12:12
Оценка: +1
Здравствуйте, Философ, Вы писали:

Ф>Можно подробнее?

Ф>Я полиморфизм понимаю с точки зрения классического определения, т.е. например вот так: различное поведение экземпляров производных классов.
Ф>или вот так:
Ф>

Ф>Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1]. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».


Ф>Кстати, мы тут вообще об ООП говорим, или о чём?


Мы про полиморфизм. Не совсем ясно, почему ты ООП вспомнил

Полиморфизмы они разные бывают. В C# система типов очень сильно ограничивает этот самый полиморфизм.
Пример

var f = (int x) => x * 2;




Я понимаю, что у разрабов были основания пойти по такому пути, но сути это не меняет.


I>>Метапрограммирование в рантайме...


Ф>Что мешает метапрограммировать в рантайме на шарпе? CodeDOM отменили?


Вот есть у тебя метод
void Write(string data) {}


Покажи код на CodeDom, который пропатчит метод нужного экземпляр или класс и будет дополнительно файрить эвент. Для простоты возьмём Console.Write.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.