Любой каркас, язык или их комбинация, которые не являются чисто экспериментальными упражнениями, имеют рынок.Некоторые чисто экспериментальные продолжают развивать рынок.
В этом смысле «рынок» не обязательно относится к рыночной экономике, это так же верно, независимо от того, являются ли производители фреймворка / языка / оба коммерческими или некоммерчески ориентированные и распространяющие фреймворк / язык / оба (сейчас я просто скажу «фреймворк») по цене или бесплатно.В самом деле, проекты «бесплатно как в пиве и речи» могут быть в такой степени еще более зависимыми от своих рынков, чем коммерческие проекты, потому что их производители являются подмножеством их рынка.Рынок - это каждый, кто его использует.
Природа этого рынка будет влиять на структуру несколькими способами, как органическими процессами (некоторые части оказываются более популярными, чем другие, и получают большую долю пространства ума внутрисообщество, которое информирует своих членов о них) и по указу (кто-то решает, что функция будет обслуживать рынок, и поэтому добавляет ее).
Когда была разработана .NET, она была разработана для обслуживания будущего рынка.Поэтому идеи о том, что им послужит, повлияли на решения относительно того, что следует и не следует включать в FCL, среду выполнения и языки, с которыми он работает.
Кто-то решил, что нам, скорее всего, понадобится System.Collections.ArrayList
.Кто-то решил, что нам, скорее всего, понадобится System.IO.DirectoryInfo
, чтобы иметь метод Delete()
.Никто не решил, что нам, скорее всего, понадобится System.Collections.ImmutableStack
.
Может быть, об этом вообще никто не подумал.Может быть, кто-то сделал и даже реализовал это, и тогда было решено, что оно не будет достаточно общего назначения.Может быть, это долго обсуждалось в Microsoft.Я никогда не работал на MS, поэтому понятия не имею.
Что я могу рассмотреть, так это вопрос о том, что люди, которые использовали .NET Framework в 2002 году, использовали в 2001 году.
Ну, COM, ActiveX, ("Classic") ASP и VB6 & VBScript теперь используются гораздо реже, чем раньше, поэтому можно сказать, что они были заменены на .NET.В самом деле, можно сказать, что это было намерение.
Как и VB6 & VBScript, значительное число тех, кто писал на C ++ и Java с Windows в качестве единственной или основной целевой платформы, теперь по крайней мере частично используют.NET вместо.Опять же, я думаю, что это можно назвать намерением, или, по крайней мере, я не думаю, что MS были удивлены, что все пошло именно так.
В COM у нас был метод foreach, основанный на объектах перечислителя, дляИтерация, которая имела прямую поддержку в некоторых языках (семейство VB *), и .NET у нас есть подход foreach к итерации, основанный на объектах перечислителя, который имеет прямую поддержку в некоторых языках (C #, VB.NET и другие) †.
В C ++ у нас был богатый набор типов коллекций из STL, а в .NET у нас есть богатый набор типов коллекций из FCL (и безопасных универсальных типов из .NET2.0 и далее).
В Java у нас был строгий стиль ООП "все для объекта" с небольшим набором методов, предоставляемых общим базовым типом, и механизмом бокса, позволяющим создавать простые эффективные примитивы при соблюдении этого стиля.В .NET у нас есть строгий стиль ООП «все для объекта» с небольшим набором методов, предоставляемых общим базовым типом и (другим) механизмом бокса, позволяющим создавать простые эффективные примитивы, сохраняя этот стиль.
Эти случаи демонстрируют выбор, который неудивителен, учитывая, кто, вероятно, в конечном итоге станет рынком для .NET (хотя такие широкие высказывания выше не следует воспринимать таким образом, чтобы недооценивать объем работы и тонкость проблем в рамкахкаждый из них).Другая вещь, которая относится к этому, - это когда .NET отличается от COM или классического VB, C ++ или Java, вполне может быть что-то вроде объяснения, приведенного в документации.Когда .NET отличается от Haskell или Lisp, никто не чувствует необходимости указывать на это!
Теперь, конечно, в .NET все сделано иначе, чем в любом из вышеперечисленного (или не было бы никакого смысла, и мы могли бы остаться с COM и т. Д.)
Однако, моя точка зрениячто из почти бесконечного диапазона возможных вещей, которые могут оказаться в такой среде, как .NET, есть некоторые полные легкие задачи («им может понадобиться какой-то тип строки ...»), некоторые близкие кочевидно («это действительно легко сделать в COM, поэтому это должно быть легко сделать в .NET»), некоторые сложные вызовы («это будет сложнее, чем в VB6, но преимущества того стоят»), некоторые улучшения(«Поддержка локали действительно может быть намного проще для разработчиков, поэтому давайте создадим новый подход к старой проблеме») и некоторые, которые были менее связаны с вышеупомянутым.
С другой стороны, мы можем, вероятно,все воображают что-то такое, что может быть странным («эй, все кодеры, как жизнь Конвея - давайте поместим жизнь Конвея прямо в рамки»), и, следовательно, нет ничего удивительного в том, что мы не можем его найти.upported.
До сих пор я быстро справился с тяжелой работой и сложными балансами дизайна таким образом, что дизайн, который они придумали, казался более простым, чем он, без сомнения, был.Скорее всего, чем более «очевидным» это кажется постороннему после свершившегося факта, тем сложнее это было для дизайнеров.
Неизменяемые типы коллекций попадают в большой диапазон возможных компонентов для FCL, которые, хотя и не такbizarre как идея встроенной поддержки conway, не так сильно требовалась, рассматривая рынок как изменяемый список или способ красиво инкапсулировать информацию о локали.Это было бы новшеством для большей части первоначального рынка, и, следовательно, риск того, что его не будут использовать.В альтернативной вселенной есть .NET1.0 с неизменяемыми коллекциями, но неудивительно, что здесь его нет.
* По крайней мере, для потребления.Создание IEnumVARIANT
реализаций в VB6 было непростым и могло включать в себя запись значений указателей прямо в v-таблицы довольно неприятным способом, который внезапно приходит мне в голову, возможно, даже не допускается сегодняшним DEP.
† Иногда невозможно реализовать метод .Reset()
.Есть ли какая-то причина для этого, кроме как в IEnumVARIANT
?Был ли он вообще когда-либо использован в IEnumVARIANT
?