2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 21:02 
Заслуженный участник


27/04/09
28128
aa_dav в сообщении #1191517 писал(а):
Ничего подобного С++, кроме list<T> они не могут
А что там такое в C++ особенное с шаблонами бывает кроме того, что их параметрами могут быть целые числа? (Вот тут да, вот тут придётся заменять такие числа каким-нибудь специальным типом, с которым будет не очень удобно работать в смысле выписывания его подтипов, соответствующих тому или иному числу.)

Насчёт вариантности. Пусть $t <: u$ означает «$t$ — подтип $u$». Тогда пусть $t$ — тип с $n$ типами-параметрами. $t$ ковариантен (в языках это обозначается как out в тех местах, где это нужно обозначать) по $i$-му аргументу, если $t_i <: t'_i \Rightarrow t[\ldots,t_i,\ldots] <: t[\ldots,t'_i,\ldots]$, и контравариантен (in), если $t_i <: t'_i \Rightarrow t[\ldots,t'_i,\ldots] <: t[\ldots,t_i,\ldots]$ (и порой говорят, что инвариантен, если нет ни того, ни этого). Обозначения можно объяснить тем, что тип функций ковариантен по типу результата и контравариантен по типам аргументов.

Я специально не буду говорить, что это означает на практике, потому что это слишком много, и лучшие примеры должны существовать уже и так.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 21:40 
Заслуженный участник


02/08/11
7059
arseniiv в сообщении #1191567 писал(а):
А что там такое в C++ особенное с шаблонами бывает
Там бывает Александреску (Александреску. Современное проектирование на С++. (прямая ссылка на pdf))

-- 10.02.2017, 22:45 --

aa_dav в сообщении #1191517 писал(а):
По своим возможностям же дженерики есть, были и остаются просто удобным сахаром над compile-time проверкой типов.
Нет, даже если оставаться в заданных вами рамках, вы не правы. Доказательство:
Используется синтаксис C#
public static Container<T> {
    public static T Value;
}

Если бы всё было как говорите вы, то Container<SomeClass1>.Value и Container<SomeClass2>.Value были бы в рантайме одной и той же переменной, но это не так.

-- 10.02.2017, 22:55 --

Ах да, и ещё один аргумент. Хотя это наверно можно формально назвать синтаксическим сахаром, но только формально. Я имею в виду автоматический вывод типов. Конечно, он сильно уступает выводу типов в Haskell, но всё равно очень и очень неплох.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 22:03 
Заслуженный участник


27/04/09
28128
warlock66613 в сообщении #1191587 писал(а):
Там бывает Александреску
За ссылку, конечно, спасибо, но можно пару примеров? А то я даже не знаю, где их там быстренько найти. :-)

-- Сб фев 11, 2017 00:09:13 --

Ага, вот вижу, вообще-то спецификация шаблонов мной упущена, хотя раньше помнил. Дженерики так по-своему не специализируешь (пока?). И bool как тип параметра — но его-то типами как раз представить опять же совсем просто.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 22:11 
Заслуженный участник


02/08/11
7059
arseniiv в сообщении #1191601 писал(а):
Дженерики так по-своему не специализируешь (пока?)
Вполне возможно, что даже не "пока".

-- 10.02.2017, 23:15 --

arseniiv, посмотрите третью главу ("Списки типов"), и, более конкретно, раздел 3.4. Вычисление длины списка (ну и дальше тоже весьма любопытно).

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 22:19 
Заслуженный участник


27/04/09
28128
О, если я угадываю, о чём там речь, то тогда это действительно оно.

warlock66613 в сообщении #1191587 писал(а):
Ах да, и ещё один аргумент. Хотя это наверно можно формально назвать синтаксическим сахаром, но только формально. Я имею в виду автоматический вывод типов. Конечно, он сильно уступает выводу типов в Haskell, но всё равно очень и очень неплох.
Меня вообще немного смутило смешение вместе aa_dav системы типов языка и его рантайма. Они могут быть вообще ортогональны, если не рассматривать соответствие рантайма выбранной семантике языка. То, что тип может иметь типы-параметры (или значения-параметры) — это свойства системы типов. То, есть ли операции, позволяющие смешивать $t[a]$ и $t[b]$ для несравнимых по подтипированию $a, b$ и тому подобные — тоже её. А что у этого под капотом — ну так там никто не запрещает спускаться вообще на уровень процессора, хотя это будет уже и натягиванием. В частности, если большинство проверок типов остаётся только на компиляторе, я не вижу, чем это может быть плохо, разве что невозможностью иметь reflection.

-- Сб фев 11, 2017 00:47:27 --

Про списки типов: понятно, что если C++ позволяет с ними делать больше, чем C# — это хорошо, но обратная сторона может быть в том, не позволяет ли он чересчур много — например, если я напишу параметром какого-то шаблона Typelist<int, Typelist<char, bool> >, неправильно завершив список, или вообще напишу на месте списка не-список, насколько понятным будет ответ компилятора на такое безобразие, и будет ли он гарантированным? (Продолжу читать и узнаю.) При аналогичной ситуации хаскель, например, даст нам описать это так, чтобы сообщение об ошибке было гарантировано, и говорило именно о том, что не так (правда, я пока там видел только гетерогенные списки, у которых есть значения, и которые ради этих значений и нужны, а не просто типы-списки типов без значений, которые полезны ради самих типов-параметров, но реализация должна быть не сильно другой). В общем, детали-то тут, конечно, оффтопны.

-- Сб фев 11, 2017 00:53:52 --

Кстати, в C# и Java (тут — насколько я в курсе) нет синонимов типов — вот это уже печально. (Недавно в C# появились, но их можно писать только среди директив using, а не в любом месте. Этого мало.)

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 22:55 
Заслуженный участник


28/04/09
1933
У C# много интересных возможностей, но вот в плане обобщенного программирования/метапрограммирования там все печально по сравнению с C++. Атмосфера C++ в этой области тоже довольно разрежена, бедна кислородом, полна ядовитых примесей... Но в ней можно дышать. И даже летать... низенько, правда. В атмосфере C# программист долго просуществовать не может, приходится то и дело выходить в рантайм и прибегать к обстоятельной рефлексии.

Александреску в данном своем проявлении уже слегка устарел или потерял актуальность. Списки типов без лишней возни реализуются с помощью variadic templates (std::tuple опять же), появилось множество новых вкусностей, доступных даже диабетикам. Относительно свежие веяния можно пронаблюдать на примере библиотеки с очаровательным названием Boost.Hana.

Можно попробовать какие-нибудь относительно простенькие задачки (неалгоритмического свойства) решить на одном и другом языке, чтобы сравнить.

-- Пт фев 10, 2017 23:03:39 --

arseniiv в сообщении #1191605 писал(а):
Недавно в C# появились, но их можно писать только среди директив using, а не в любом месте.
Появились они довольно давно (если вообще не сначала были), а вот то, что действие такого синонима распространяется только на отдельный файл, очень печально, приходится одну и ту же "шапку" из синонимов копировать из файла в файл. В C++11 тем временем уже появились синонимы для шаблонов.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение10.02.2017, 23:27 
Заслуженный участник
Аватара пользователя


30/01/06
72407
arseniiv в сообщении #1191601 писал(а):
За ссылку, конечно, спасибо, но можно пару примеров? А то я даже не знаю, где их там быстренько найти. :-)

Они там прямо с введения начинаются.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 00:03 
Заслуженный участник


27/04/09
28128
Ну хорошо-хорошо, специализация шаблонов действительно с введения (Assert).

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 11:45 


11/12/14
893
Munin в сообщении #1191547 писал(а):
Ну а собственно, на практике большего и не надо.


Не ну если только ради коллекций list<T>, то тогда вполне себе. Плюс, по сравнению с Java С# вообще имеет value type struct как таковые, что в матанном смысле ему тоже будет большой плюс.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 13:17 
Заслуженный участник


27/04/09
28128
Java тоже собирается вводить value types. Не знаю, насколько там всё продвинулось, но можно понять, почему так долго, раз они не были с самого начала.

-- Сб фев 11, 2017 15:27:36 --

Munin в сообщении #1191547 писал(а):
Ну а собственно, на практике большего и не надо.
Кстати, тут я не согласен. Даже чисто вычислительные задачи могут выиграть от выразительности возможностей метапрограммирования языка. Например, можно сделать статическую проверку размерностей, можно нагенерировать кода для умножения тензоров малых порядков разных размерностей и (хотя тут не думаю, что C++ уже сможет) даже упростить такой код для каких-нибудь сложных выражений, если это возможно. Ну, тут только надо дать волю фантазии и, уверен, применение найдётся.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 17:26 


11/12/14
893
arseniiv в сообщении #1191694 писал(а):
Не знаю, насколько там всё продвинулось, но можно понять, почему так долго, раз они не были с самого начала.


Насколько мне известно разработчики Java крайне не любят изменение архитектуры виртуальной машины.
Т.е. они расширяют язык, добавляют новые синтаксические конструкции, но когда компилятор поработал и получил *.class-файл, то его сможет переварить виртуальная машина 10-летней давности всё на тех же ~50 командах виртуальной машины.
value type-ы же, насколько я понимаю, без апгрейда виртуальной машины сделать невозможно.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 17:28 
Заслуженный участник


27/04/09
28128
Не могу комментировать это, потому что совсем не в курсе. :-) Но над этим точно работали.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 17:43 
Заслуженный участник


02/08/11
7059
arseniiv в сообщении #1191694 писал(а):
Даже чисто вычислительные задачи могут выиграть от выразительности возможностей метапрограммирования языка.
В C# с некоторых пор есть очень хорошие внеязыковые возможности в виде Roslyn (это compiler as service).

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 17:43 


11/12/14
893
arseniiv в сообщении #1191759 писал(а):
Но над этим точно работали.


Работали, конечно.
На сайте Oracle есть документация по 3 версиям VM, - 6,7,8.
6 называется просто "JVM Secondary Edition", т.е. видимо что до 6-ой (а не деле 1.6) версии не было изменений вообще.
В 7-ой и 8-ой структура оглавления уже сильно отличается от 6-ой, поэтому я не смог их сравнить через утилиту сравнения текстов.
Но если судить по этой утилите, то между 7-ой и 8-ой версией по составу "машинных инструкций" в оглавлении разницы нет никакой, хотя некоторые немного перетусованы в оглавлении, но это не должно вводить в заблуждение.
Какие то есть изменения в "annotations & specifications", но если глядеть краем глаза, то тоже вижу только перестановку слов и смену регистров букв.

 Профиль  
                  
 
 Re: Достоинства и недостатки языка C#
Сообщение11.02.2017, 18:24 
Заслуженный участник


27/04/09
28128
Так я и не говорил же, будто работа над ними как-то сказалась на опубликованных версиях спецификаций JVM и Java.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: granit201z


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group