Historia języka C#

Silv

Ten artykuł opisuje historię języka C#.

***

TODO

  • Pozbyć się znaków zapytania (znak zapytania oznacza, że nie wiadomo albo czy wyraz przed tym znakiem lub cały punkt z tym znakiem powinien być umieszczony pod daną datą, albo czy ma sens pod jego punktem nadrzędnym, albo czy w ogóle jest prawdziwy)
  • Uspójnić styl (wszystkie punkty powinny być równoważnikami zdania, zaczynającymi się albo rzeczownikami "zwykłymi", albo rzeczownikami odczasownikowymi)
  • Przełumaczyć tekst z angielskiego na polski (na tyle, na ile się da, by był zrozumiały)
  • Zamienić pojęcia na linki do nich (najlepiej do Wikipedii, ewentualnie do oficjalnej dokumentacji, ewentualnie do innych uznanych stron)

Historia

1988

  • Pierwsze wystąpienie nazwy "C#" [1]

1999-01

  • Utworzenie przez Andersa Hejlsberga zespołu mającego stworzyć nowy język programowania o nazwie "Cool" [1]

2000-07 lub wcześniej

  • Zmiana nazwy języka Cool na "C#" [1]

2001-01

  • Rozpoczęcie projektu DotGNU [5]

2001-12

  • Przyjęcie pierwszego wydania standardu ECMA-334 [1] [27]

2002-01

  • Wydanie wersji 1.0 języka C# [1]

2002-12

  • Przyjęcie drugiego wydania standardu ECMA-334 [1] [27]

2003

  • Wydanie wersji 1.1 języka C# [1]
  • Wydanie wersji 1.2 języka C# [1]
    • Wprowadzenie wywoływania Dispose przez kod wygenerowany w pętli foreach na instancji klasy? implementującej interfejs IEnumerator, jeśli ta klasa? implementuje interfejs IDisposable [8]
  • Przyjęcie standardu ISO/IEC 23270 [1]

2003-04

  • Opublikowanie standardu ISO/IEC 23270:2003 [28]

2004

  • Rozpoczęcie projektu Mono [1]

2004-01-29

  • Zakończenie promowania języka C# maskotką "Andy" [1]

2005

  • Wydanie wersji 2.0 języka C# [1] [8]
    • Wprowadzenie funkcji "first-class" [1]
    • Wprowadzenie domknięć (w formie delegatów anonimowych)? [1]
    • Wprowadzenie typów generycznych [8]
    • Wprowadzenie typów częściowych (ang. partial types) [8]
      • Wprowadzenie słowa kluczowego partial [33]
      • Wprowadzenie podziału na "accumulative qualities" i "non-accumulative qualities"? [33]
    • Wprowadzenie metod anonimowych [8]
    • Wprowadzenie "nullable value types" [8]
    • Wprowadzenie iteratorów [8] (zobacz też [33])
      • Wprowadzenie instrukcji yield return? [33]
      • Wprowadzenie instrukcji yield break? [33]
    • Wprowadzenie kowariancji i kontrawariancji [8]

2005-06

  • Przyjęcie trzeciego wydania standardu ECMA-334 [1] [27]

2006 lub wcześniej

  • Wycofanie standardu ISO/IEC 23270:2003 [1]
  • Przyjęcie standardu ISO/IEC 23270:2006 [1]

2006-09

  • Opublikowanie standardu ISO/IEC 23270:2006 [1] [28]

2006-06

  • Przyjęcie czwartego wydania standardu ECMA-334 (wersja 2 języka C#?) [1] [27]

2006-09

  • Przyjęcie standardu ISO/IEC dla wersji 2.0 języka C# [1]

2007

  • Wydanie wersji 3.0 języka C# [1] [8]
    • Wprowadzenie LINQ ("query expressions") [1] [8]
    • Wprowadzenie wyrażeń lambda [1] [8]
    • Wprowadzenie "extension methods" [1] [8]
    • Wprowadzenie typów anonimowych [1] [8]
    • Wprowadzenie "auto-implemented properties" [2] [8]
    • Wprowadzenie drzew wyrażeń [8]
    • Wprowadzenie "implicitly typed local variables" [8]
    • Wprowadzenie "partial methods" [8]
    • Wprowadzenie "object initializers" i "collection initializers" [8]

2007-03-20

  • Wydanie ostatniej wersji oprogramowania DotGNU (0.8.0) [5]

2010

  • Wydanie wersji 4.0 języka C# [1]
    • Wprowadzenie wiązania dynamicznego (ang. dynamic binding) [8]
    • Wprowadzenie argumentów nazwanych i opcjonalnych [8]
    • Wprowadzenie generycznej kowariancji i kontrawariancji [8]
    • Wprowadzenie "embedded interop types" [8]

2011-10-19

  • Wydanie wersji CTP oprogramowania .NET Compiler Platform (Roslyn) [7] [11]
    • Wprowadzenie nowego typu pliku, "C# Script File" (o rozszerzeniu csx) [11]
    • Pojawienie się rcsi.exe [11]
    • Przepisanie kompilatora C# z C++ na C# [12]
    • Wprowadzenie okna "C# Interactive" w Visual Studio [12]

2013 lub wcześniej

  • Wydanie wersji 5.0 języka C# [1]
    • Wprowadzenie "asynchronous members" [8]
    • Wprowadzenie "caller info attributes" [8]

2014

  • Wydanie oprogramowania RemObjects C# [6]

2014-03-18 lub wcześniej

  • Udostępnienie kodu projektu Roslyn jako open-source [7] [13]

2015-07

  • Wydanie wersji 6.0 języka C# [1]
    • Wprowadzenie "static imports" [8]
    • Wprowadzenie "exception filters" [8]
    • Wprowadzenie "auto-property initializers" [8]
    • Wprowadzenie "expression bodied members" [8]
    • Wprowadzenie "null propagator" [8]
    • Wprowadzenie interpolowanych ciągów znaków ("string interpolation") [8]
    • Wprowadzenie operatora nameof [8]
    • Wprowadzenie "index initializers" [8]

2017-03

  • Wydanie wersji 7.0 języka C# [1]
    • Wprowadzenie krotek (ang. tuples) [1] [8]
    • Wprowadzenie funkcji lokalnych (ang. local functions) [1] [8]
    • Wprowadzenie dopasowania do wzorca (ang. pattern matching) [1] [8]
      • Wprowadzenie "declaration patterns" [15]
      • Wprowadzenie "constant patterns" [15]
      • Wprowadzenie "var patterns" [15]
    • Wprowadzenie "out variables" [8]
    • Wprowadzenie "expanded expression bodied members" [8]
    • Wprowadzenie "ref locals" i wartości zwracanych przez referencję (ang. reference return values, ref returns) [8] [29] [31]
    • Wprowadzenie "discards" [8]
      • Wprowadzenie składni _? [24]
    • Wprowadzenie "Binary Literals" i "Digit Separators" [8]
    • Wprowadzenie wyrażeń throw (ang. throw expressions) [8]

2017-08

  • Wydanie wersji 7.1 języka C# [1]
    • Wprowadzenie "language version selection configuration element" [8]
    • Umożliwienie metodzie Main posiadania modyfikatora async [8]
    • Wprowadzenie "default literal expressions" [8]
    • Wprowadzenie "inferred tuple element names" [8]
    • Umożliwienie dopasowania do wzorca w przypadku parametrów o typach generycznych [8]
    • Wprowadzenie nowych opcji kompilatora [8]
      • Wprowadzenie opcji kompilatora -refout [8]
      • Wprowadzenie opcji kompilatora -refonly [8]
  • Rozpoczęcie wydawania "point releases" języka C# [8]

2017-11

  • Wydanie wersji 7.2 języka C# [1]
    • Wprowadzenie "initializers on stackalloc arrays" [8]
    • "Use fixed statements with any type that supports a pattern" [8]
    • "Access fixed fields without pinning" [8]
    • Redesign "ref local variables" [8]
    • "Declare readonly struct types, to indicate that a struct is immutable and should be passed as an in parameter to its member methods" [8]
    • "Add the in modifier on parameters, to specify that an argument is passed by reference but not modified by the called method" [8]
    • "Use the ref readonly modifier on method returns, to indicate that a method returns its value by reference but doesn't allow writes to that object" [8]
    • "Declare ref struct types, to indicate that a struct type accesses managed memory directly and must always be stack allocated" [8]
    • "Use additional generic constraints" [8]
    • "Named arguments can be followed by positional arguments" [8]
    • "Numeric literals can now have leading underscores before any printed digits" [8]
    • "Private protected access modifier" [8]
    • Wprowadzenie warunkowych wyrażeń ref (ang. conditional ref expressions) [8]

2017-12

  • Przyjęcie piątego wydania standardu ECMA-334 (wersja 5.0 języka C#) [1] [27]

2018 lub wcześniej

  • Wycofanie standardu ISO/IEC 23270:2006 [1]
  • Przyjęcie standardu ISO/IEC 23270:2018 [1]

2018

  • Przyjęcie standardu ISO/IEC dla wersji 5.0 języka C# [1]
  • Wydanie wersji 7.3 języka C# [1]
    • "You can access fixed fields without pinning" [8]
    • "You can reassign ref local variables" [8]
      • Wprowadzenie operatora = ref? [32]
    • Umożliwienie zmiennej iteracyjnej w instrukcji foreach bycia "ref local" lub "ref readonly local" [31]
    • "You can use initializers on stackalloc arrays" [8]
    • "You can use fixed statements with any type that supports a pattern" [8]
    • "You can use more generic constraints" [8]
    • "You can test == and != with tuple types" [8]
    • "You can use expression variables in more locations" [8]
    • "You may attach attributes to the backing field of auto-implemented properties" [8]
    • "Method resolution when arguments differ by in has been improved" [8]
    • "Overload resolution now has fewer ambiguous cases" [8]
    • Wprowadzenie nowych opcji kompilatora [8]
      • Wprowadzenie opcji kompilatora -publicsign [8]
      • Wprowadzenie opcji kompilatora -pathmap [8]
    • Wprowadzenie nowych ograniczeń
      • Wprowadzenie ograniczenia unmanaged [10] [18] [30]
      • Wprowadzenie ograniczeń System.Delegate i System.MulticastDelegate [18] [30]
      • Wprowadzenie ograniczenia System.Enum [18] [30]

2018-07-19 lub wcześniej

  • Wprowadzenie wsparcia dla C# 7.3 w wersji EAP oprogramowania ReSharper 2018.2 [30]
  • Wprowadzenie wsparcia dla C# 7.3 w wersji EAP oprogramowania Rider 2018.2 [30]

2018-12

  • Opublikowanie standardu ISO/IEC 23270:2018 [28]

2019-09

  • Wydanie wersji 8.0 języka C# ("first major C# release that specifically targets .NET Core") [1] [8]
    • Umożliwienie deklarowania składowych struktury jako "tylko do odczytu" (readonly) [8] [9]
    • Wprowadzenie "default interface methods" [8]
    • Wprowadzenie wyrażeń switch? [8] [9] [15]
      • Odwrotna kolejność: zmienna przed słowem kluczowym switch? [9]
      • Operator? => zamiast case i :? [9]
      • _ zamiast default? [9]
      • Ciało? wyrażenia switch jest wyrażeniem, nie instrukcją? [9?]
    • Rozwinięcie dopasowania do wzorca ("more patterns in more places" [9]) [9]
      • Wprowadzenie "tuple patterns"? [8]
      • Wprowadzenie "discard patterns" (_) [15]
      • Wprowadzenie wzorców rekursywnych (ang. recursive patterns) [9] [15]
        • Wprowadzenie "positional patterns" [8] [9] [15]
        • Wprowadzenie "property patterns" [8] [9] [15]
    • Wprowadzenie deklaracji using [8]
    • Wprowadzenie statycznych funkcji lokalnych [8]
    • Umożliwienie zwolnienia (ang. dispose) struktur deklarowanych przy użyciu słowa kluczowego ref [8]
    • "Nullable reference types"? [8] [9]
    • Umożliwienie asynchronicznych działań na strumieniach [8] [9]
    • Wprowadzenie asynchronicznych "disposable types" [9]
    • Wprowadzenie "indeksów" (ang. indices) i "zakresów" (ang. ranges) [8]
      • Wprowadzenie typu System.Index [9]
      • Wprowadzenie typu System.Range [9]
      • Wprowadzenie operatora ^ [9]
      • Wprowadzenie operatora .. (dwie kropki) [9]
    • Wprowadzenie przypisania "null-coalescing" [8]
      • Wprowadzenie operatora przypisania "null-coalescing" (??=) [9]
    • Określenie, że te typy strukturowe będące "constructed", które zawierają pola o typach będących "unmanaged", są "unmanaged" [8] [9] [10]
    • Umożliwienie użycia wyrażenia stackalloc w wyrażeniach zagnieżdżonych [8] [9]
    • Umożliwienie umieszczania tokenów $ i @ w dowolnej kolejności w interpolowanych dosłownych ciągach znaków (ang. interpolated verbatim strings), podczas gdy wcześniej trzeba było umieszczać token $ przed tokenem @ [8] [9] [22]
    • Rozwinięcie ograniczeń (ang. constraints) argumentów będących typem [18]
      • Wprowadzenie ograniczenia notnull? [18]
      • Zmiana ograniczeń class i <nazwa klasy bazowej> tak, że w kontekście "nullable" dany typ musi być typem referencyjnym, który jest "non-nullable" [18]
      • Zmiana ograniczenia <nazwa interfejsu> tak, że w kontekście "nullable" dany typ musi być typem, który jest "non-nullable" [18]
      • Zmiana ograniczenia <base class name>? tak, że w kontekście "nullable" dany typ może być albo "nullable", albo "non-nullable" [18]
      • Zmiana ograniczenia <interface name>? tak, że w kontekście "nullable" dany typ może być albo typem referencyjnym, który jest "nullable", albo typem referencyjnym, który jest "non-nullable", albo nie "nullable" typem wartościowym ("T may not be a nullable value type" [18]) [18]
      • Zmiana ograniczenia default? [18]

2020-11

  • Wydanie wersji 9.0 języka C# [1]
    • Wprowadzenie setterów "init-only" [3] [8] [14]
      • Wprowadzenie słowa kluczowego init? [3]
    • Wprowadzenie "record types" [4] [8] [14]
      • Wprowadzenie słowa kluczowego record? [14]
    • Wprowadzenie wyrażeń with [1]
    • Wprowadzenie "top-level statements" [1] [8]
    • Rozwinięcie dopasowania do wzorca [1]
      • Wprowadzenie nowych wzorców [15]
        • Wprowadzenie "type patterns" [15]
        • Wprowadzenie "relational patterns" [15]
        • Wprowadzenie "logical patterns" (not, and, or) [15]
      • Umożliwienie obejmowania wzorców w nawiasy [15]
    • Poprawa wydajności i "interop" [8]
      • Wprowadzenie "native sized integers" [8]
        • Wprowadzenie typu nint [14]
        • Wprowadzenie typu nuint [14]
      • Wprowadzenie "function pointers" [8]
      • Wprowadzenie możliwości wyłączenia emitowania flagi localsinit przez kompilator (przez dodanie atrybutu System.Runtime.CompilerServices.SkipLocalsInitAttribute) [8]
    • "Fit and finish features"? [8]
      • Zmiana? wyrażeń new na "target-typed" (tj. umożliwienie pominięcia typu w wyrażeniu new) [1] [8] [16]
      • Umożliwienie deklarowania wyrażeń lambda oraz metod anonimowych jako statyczne [14] ("static anonymous functions"? [8])
      • Zmiana wyrażeń warunkowych na "target-typed" (tj. zniesienie wymogu niejawnej konwersji danych dwóch wyrażeń między sobą? [14], a wprowadzenie wymogu konwertowalności do "target type", jeśli ów jest znany? [17]) [8]
      • Wprowadzenie "covariant return types" [1] [8]
      • Umożliwienie pętli foreach rozpoznawania metody GetEnumerator()? ("(…) the foreach loop will recognize and use an extension method GetEnumerator that otherwise satisfies the foreach pattern" [14]) [8] [14]
      • Umożliwienie wykorzystania "discards" jako parametrów wejściowych wyrażenia lambda [8] [24]
      • Umożliwienie nadawania atrybutów funkcjom lokalnym [8]
    • Rozwinięcie "code generators" [8]
      • Wprowadzenie "module initializers" [8] [14]
        • Wprowadzenie atrybutu ModuleInitializerAttribute? [14]
      • Zniesienie części ograniczeń metod częściowych [8] [14]
    • Bycie przez wersję 9.0 języka C# "the default language version for any assembly that targets the .NET 5 release" [8]

2021-11-08

  • Wydanie wersji 10.0 języka C# [1]
    • Wprowadzenie typów record struct ("record structs") [8] [20]
    • Rozwinięcie struktur [8]
      • Umożliwienie deklaracji bezparametrowego konstruktora instancji (ang. instance parameterless constructor) w strukturze i inicjalizacji pola lub właściwości instancji przy tej deklaracji [19]
    • Rozwinięcie wyrażeń with
      • Umożliwienie lewemu operandowi wyrażenia with bycia typu strukturowego lub anonimowego [21]
    • Wprowadzenie "interpolated string handlers"? ("(…) when an interpolated string is used, the compiler checks if the interpolated string is assigned to a type that satisfies the interpolated string handler pattern" [22]) [8] [22]
    • Wprowadzenie "global using directives" [8]
    • Wprowadzenie deklaracji przestrzeni nazw o zasięgu pliku [8] [23]
      • Wprowadzenie składni namespace <nazwa przestrzeni nazw>; [19]
    • "Extended property patterns" [8]
      • "(…) you can reference nested properties or fields within a property pattern"? [15]
      • Wprowadzenie składni { <właściwość>.<właściwość zagnieżdżona>: <wzorzec> }? [19]
    • Rozwinięcie wyrażeń lambda [8]
      • Umożliwienie typowi wyrażenia lambda bycia "natural type" [25]
      • Umożliwienie wyrażeniom lambda i ich parametrom posiadania atrybutów [25]
      • Umożliwienie deklaracji typu zwracanego w wyrażeniach lambda? [25]
    • Umożliwienie interpolacji stałych ciągów znaków [8] [19]
    • Umożliwienie zamknięcia (zapieczętowania, ang. seal) nadpisanej? metody ToString() w "record types" [8] [19]
    • Ulepszenie "definite assignment" [8]
    • Umożliwienie jednoczesnego przypisania i deklaracji podczas dekonstrukcji (ang. deconstruction) (np. (jakasZmienna1, int jakasZmienna2) = jakisObiekt;) [8] [19]
    • Umożliwienie metodom posiadania atrybutu AsyncMethodBuilder? [8]
    • Wprowadzenie atrybutu System.Runtime.CompilerServices.CallerArgumentExpression? [8]
    • Wprowadzenie nowej składni dyrektywy #line [8] [19]
    • "C# 10 also marks more of a shift to the yearly cadence for .NET releases"? [8]

2022-02-22

  • Wydanie preview wersji 11 języka C# [8?]
    • Umożliwienie deklaracji pochodnej klasy generycznej, której klasą bazową jest klasa System.Attribute [26]
    • Umożliwienie definicji statycznych abstrakcyjnych składowych interfejsu [26]
    • Umożliwienie wieloliniowego zapisu wyrażeń użytych do interpolacji ciągu znakowego [22] [26]
    • Umożliwienie kompilatorowi ponownego wykorzystania delegatu w przypadku "method group conversion" [26]
    • Wprowadzenie surowych ciągów znaków (ang. raw string literals) [26]

Źródła

  1. C Sharp (programming language)
  2. Auto-Implemented Properties (C# Programming Guide)
  3. init (C# Reference)
  4. C# 9.0 on the record
  5. DotGNU
  6. RemObjects Software
  7. Roslyn (compiler)
  8. The history of C#
  9. What's new in C# 8.0
  10. Unmanaged types (C# reference)
  11. Introducing the Microsoft “Roslyn” CTP
  12. Roslyn CTP Now Available
  13. Roslyn.Says("Hello World");
  14. What's new in C# 9.0
  15. Patterns (C# reference)
  16. C# 9.0: Target-typed New Expressions – Make Your Initialization Code Less Verbose
  17. ?: operator (C# reference)
  18. Constraints on type parameters (C# Programming Guide)
  19. What's new in C# 10
  20. Records (C# reference)
  21. with expression (C# reference)
  22. $ - string interpolation (C# reference)
  23. namespace
  24. Discards - C# Fundamentals
  25. Lambda expressions (C# reference)
  26. What's new in C# 11
  27. ECMA-334
  28. ISO/IEC 23270:2003
  29. Ref returns and ref locals
  30. Unmanaged, delegate and enum type constraints – C# 7.3 in Rider and ReSharper
  31. ref (C# Reference)
  32. Assignment operators (C# reference)
  33. Create Elegant Code With Anonymous Methods, Iterators, And Partial Classes

0 komentarzy