Не совсем, говоря о типе переменных мы говорим о множестве допустимых значений и о наборе допустимых операций. Про вторую часть забывать не следует, тогда и не будет противоречий с номинативной типизацией и академическими работами.
Начнём с того, что нет предиката принадлежности объекта типу. Когда мы пишем x : T […]
Уточню. Вот тут не надо путать терм (тот самый x) и его значение. Для значений нет проблем построить предикат принадлежности.
В HoTT множеством называется тип, у которого любые два экземпляра равны не более чем одним способом.
Ага, только вот во всех языках программирования, включая Agda и Idris, любой тип является множеством (есть попытки убрать аксиому K из языков, но они все за флагами). Так что, даже с точки зрения HoTT, занимаясь практическим программированием считать типы множествами не так уж и глупо.
принципиальное отсутствие поддержки .NET Standard 2.1;
принципиальная несовместимость с некоторыми свежими фичами языка C#;
устаревшая система сборки в комплекте;
ужасные конфигурационные файлы, в которых смешиваются настройки платформы и настройки приложения;
устаревшая архитектура системных классов (особенно в System.Web).
Многие вещи ощущались как неизбежное зло в 2016м году, но начиная с выхода .NET Core 2.0 вся старая ветка .NET перешла в категорию "всё ещё приходится использовать, но уже хочется свалить". А это и есть legacy.
Соответственно, все версии 4.7.1, 4.7.2, 4.8 и 4.8.1 были legacy ещё в момент релиза.
Иногда строгая типизация как раз нужна, чтобы избежать лишних ошибок. Этак можно с шаблонами написать T вместо типа и передавать туда всё, что угодно (скомпилируется ли это - другой вопрос).
Только вот std::span - вполне себе строгий тип, это никак не какой-то там T. Каких таких ошибок вы пытаетесь избежать принимая вместо него vector?
Требование минимального достаточного контракта от входных данных всегда было хорошей практикой программирования, и оно никак не противоречит строгой типизации.
Разумеется, как только стек (или очередь) toVisit исчерпается. В показанном фрагменте кода этого не видно, но лично мне очевидно что первая же строчка внутри тела цикла забирает из toVisit очередной элемент.
Подмену тезиса я вижу как раз у вас. Типы String, Vec и им подобные перемещаются? Перемещаются. Почему вы вообще ожидаете перемещение типа, не содержащего ни одной ссылки - не понимаю.
Не совсем, говоря о типе переменных мы говорим о множестве допустимых значений и о наборе допустимых операций. Про вторую часть забывать не следует, тогда и не будет противоречий с номинативной типизацией и академическими работами.
Уточню. Вот тут не надо путать терм (тот самый x) и его значение. Для значений нет проблем построить предикат принадлежности.
Ага, только вот во всех языках программирования, включая Agda и Idris, любой тип является множеством (есть попытки убрать аксиому K из языков, но они все за флагами). Так что, даже с точки зрения HoTT, занимаясь практическим программированием считать типы множествами не так уж и глупо.
Как вы вообще представляете себе внезапную смену теплоснабжающей организации?
.NET 4.* - это legacy в принципе:
принципиальное отсутствие поддержки .NET Standard 2.1;
принципиальная несовместимость с некоторыми свежими фичами языка C#;
устаревшая система сборки в комплекте;
ужасные конфигурационные файлы, в которых смешиваются настройки платформы и настройки приложения;
устаревшая архитектура системных классов (особенно в System.Web).
Многие вещи ощущались как неизбежное зло в 2016м году, но начиная с выхода .NET Core 2.0 вся старая ветка .NET перешла в категорию "всё ещё приходится использовать, но уже хочется свалить". А это и есть legacy.
Соответственно, все версии 4.7.1, 4.7.2, 4.8 и 4.8.1 были legacy ещё в момент релиза.
Лучше сделать прививку, чем прижигать.
Мосты не то определять научились, не то просто публично доступные по списку перебанили.
Ну так именно про это и пример, про дружественность к своим.
"Тоже" - это если бы его и там пытались удалить из основателей, но этого не происходит. Обычный вандализм там.
Так занимаются же. Те которые и правда животных любят, а не просто людей ненавидят.
Он тут как пример подхода. Старый пример, потому и старая версия.
Комментарий был написан не в вакууме, а в ответ на статью.
Только вот std::span - вполне себе строгий тип, это никак не какой-то там T. Каких таких ошибок вы пытаетесь избежать принимая вместо него vector?
Требование минимального достаточного контракта от входных данных всегда было хорошей практикой программирования, и оно никак не противоречит строгой типизации.
Разумеется, как только стек (или очередь) toVisit исчерпается. В показанном фрагменте кода этого не видно, но лично мне очевидно что первая же строчка внутри тела цикла забирает из toVisit очередной элемент.
Подмену тезиса я вижу как раз у вас. Типы String, Vec и им подобные перемещаются? Перемещаются.
Почему вы вообще ожидаете перемещение типа, не содержащего ни одной ссылки - не понимаю.
Вы так пишете, как будто в каком-нибудь С++ аналогичный код сделает меньше копирований памяти:
Оно там исследуется конечно же, только не рекурсивно, а итеративно. Обратите внимание на внешний цикл.
Так вот почему некоторые купленные утюги нихрена не грели...
А выставленная на кондиционере температура вообще хоть на что-то влияет?
Спор-то идёт исключительно терминологический, а термины всегда привязаны к языку. Не вижу смысла вообще смотреть в какие-то там "оригиналы".