Історія мов програмування: C# — попереду планети всієї



З# живе за принципом «будь-яка сутність є об'єкт». Його зараховують до об'єктно-орієнтованим, а точніше об'єктним, мов програмування. «Мова заснований на строгій компонентній архітектурі і реалізує передові механізми забезпечення безпеки коду» – так прийнято характеризувати його. Однак скептики сумніваються як мінімум в його безпеки.

Прихильники C# називають його найбільш мультипарадигменным, універсальним, сучасним і зручним у використанні мовою програмування. Враховуючи той факт, що за ним стоїть платформа Microsoft .NET, число таких прихильників досить велика.

Предки
Далекі предки C# з'явилися ще в 60-х роках. Все почалося з появи мови B, який у 1969 році був створений колективом розробників з Технологічного інституту Массачусетсу (MIT). Головним автором B є Кен Томпсон. Тоді команда працювала над операційною системою UNIX. Вже існував мову PL/I, застосовувався у той час для мейнфреймів виробництва компанії IBM, був досить громіздким і менше підходив для поставленої задачі. Тому вчені вирішили створити нову мову, який і отримав назву B. Він є типовим представником ранніх імперативних мов програмування.

Після B, як це ні дивно, пішов З, який був винайдений в 1972 році. Основою для нової мови послужив сам B.

Творцями C були Кен Томпсон і Денис Рітчі, які працювали в дослідницькій лабораторії компанії AT&T (AT&T Bell Telephone Laboratories). У 1971 році Рітчі почав створювати розширену версію B. Спочатку він назвав її NB (New B), але коли мова стала сильно відрізнятися від B, назву змінили на C. B розширився за рахунок явного використання типів, структур та низки нових операцій.

З приводу виникнення мови Сі Пітер Мойлан у своїй книзі «The case against C» писав: «Потрібен був мову, здатний обійти деякі жорсткі правила, вбудовані в більшість мов високого рівня і забезпечують їх надійність. Потрібен був такий язик, який дозволив би робити те, що до нього можна було реалізувати тільки на асемблері або на рівні машинного коду».


Изображение з книги «Мова Сі»: M. Уейт, С. Прата, Д. Мартін

У 1984 році Б'ярні Страуструп (Bell Labs) виступив з проектом мови С++. Коли Страуструп займався дослідженнями у фірмі, йому треба було написати кілька імітаційних програм для моделювання розподілених обчислень. SIMULA-67 — об'єктно-орієнтована мова – міг би стати ідеальним інструментом для вирішення подібних завдань, якби не його порівняно низька швидкість виконання програм.

Якщо вам доводиться вибирати між написанням «хорошого» і «швидкого» коду, значить, тут щось не так. Тому що «хороший» код повинен бути «швидким», – пояснює Страуструп свою позицію в інтерв'ю.
Так був створений мова програмування С++, спочатку отримав назву «Сі з класами» (З with classes). Назва «С++» придумав Рік Мэсчитти. "++" — це оператор инкремента в С, що як би натякає на те, що мова С++, щось більше, ніж просто С.

C#
Microsoft вирішила відзначити Міленіум випуском нових програмних продуктів. До 2000 року компанія підготувала промислові версії нових компонентних технологій і рішень в області обміну повідомленнями і даними, а також створення Internet-додатків (COM+, ASP+, ADO+, SOAP, Biztalk Framework). У підтримку цих нововведень Microsoft випустила інструментарій для розробки додатків – платформу .NET. Вона також об'єднувала під одним дахом кілька мов програмування, що було в новинку для того часу.

Ще одним нововведенням платформи .NET була технологія активних серверних сторінок ASP.NET (Active Server Page). З її допомогою можна було відносно швидко розробити веб-додатків, взаємодіючих з базами даних.

Мова програмування C# був створений спеціально для ASP.NET. На C# повністю була написана і сама ASP.NET.



Назва «Сі шарп» (від англ. sharp — дієз) несе «сакральний» сенс. Знак «#» (музичної нотації читається як «дієз») означає підвищення висоти звуку на півтону. З іншого боку, назва «C#» виходить шляхом наступної «еволюційної ланцюга»: C → C++ → C++++(C#), так як символ «#» можна скласти з 4-х знаків «+».
Внаслідок технічних обмежень на відображення (стандартні шрифти, браузери тощо) і того, що знак дієз ♯ не представлений на стандартній клавіатурі, знак # був обраний для представлення знака дієз при запису імені мови програмування. Це угода відображено в Специфікації Мови C# ECMA-334. Назви мов програмування не прийнято переводити, тому мову слід називати по-англійськи «Сі шарп».
Авторами цієї мови програмування стали Скотт Вилтамут і Андерс Хейльсберг — творець Турбо Паскаля і Дельфи, який перейшов в 1996 році в Microsoft.
За однією з версій, він виношував задум нової мови і навіть нової платформи (яка зараз носить назву .NET), ще працюючи в компанії Borland.
C# підтримує всі три «стовпи» об'єктно-орієнтованого програмування: інкапсуляцію, успадкування і поліморфізм. Крім того, в ньому була реалізована автоматична «збірка сміття», обробки винятків, динамічне зв'язування.

Порівняння з Java
Як і Java, C# спочатку призначався для веб-розробки, і приблизно 75% його синтаксичних можливостей аналогічні мові програмування Java. Його також називають «очищеної версією Java». 10% запозичене з C++, а 5% – з Visual Basic. І близько 10% C# – це реалізація власних ідей розробників.



Незважаючи на досить суттєві відмінності між компонентної об'єктної моделлю COM (основного стандарту Microsoft для компонентного проектування та реалізації програмного забезпечення) і моделлю Java, мови програмування має досить багато спільного.

Єдина середовище виконання програм заснована на використанні проміжного мови IL (Intermediate Language — проміжний мова), виконуючого майже ту ж роль, що і байт-код віртуальної машини Java. Використовувані в рамках технології .NET компілятори з різних мов транслюють програми в IL-код. Так само, як і байт-код Java, IL-код являє собою команди гіпотетичної стекової обчислювальної машини. Але є і різниця в пристрої і використанні IL.

По-перше, на відміну від JVM, IL не прив'язаний до одного мові програмування. В складі попередніх версій Microsoft.NET є компілятори мов Сі++, Сі#, Visual Basic. Незалежні розробники можуть додавати інші мови, створюючи свої компілятори у IL-код.

По-друге, IL призначений не для програмної інтерпретації, а для подальшої компіляції в машинний код. Це дозволяє досягти значно більшої швидкодії програм. Містять IL-код файли несуть достатньо інформації для роботи оптимізуючого компілятора.

Кік Рэдек з Microsoft вважає С# більш складною мовою, ніж Java. На його думку, «мова Java був побудований таким чином, щоб уберегти розробника від пострілу в ногу» (англ. «Java was built to keep a developer from shooting himself in the foot»), а «З# був побудований так, щоб дати розробнику пістолет, але залишити його на запобіжнику» (англ. «C# was built to give the developer a gun but leave the safety turned on»).

Версії
Робота над C# почалася в грудні 1998 року. Проект отримав кодову назву COOL (C-style Object Oriented Language).

Перша бета-версія C# 1.0 побачила світ влітку 2000 року, а в лютому 2002 разом з Microsoft Visual Studio вийшла остаточна версія мови. Так як C# поєднує кращі сторони передують їй популярних мов програмування у вигляді C, Java і C++, програмістам легко здійснити перехід на C#, грунтуючись на знаннях будь-якого з перерахованих мов.

Головною відмінністю від попередників стала можливість написання компонентів. В C# з'явилися такі засоби, як події, методи і властивості.

У 2005 році вийшов остаточний реліз версії C# 2.0. Це зміцнило його позиції на ринку. Додавання нових можливостей, таких як анонімні методи, узагальнення, часткові і параметризрвані типи значно розширили можливості застосування C#.

У другій версії була додана підтримка 64-х розрядних обчислень, що відкрило можливість збільшення адресного простору. Також було реалізовано створення тригерів, збережених процедур і типів даних .NET мовами.

Версія 3.0, що вийшла в 2008 році, дозволила C# вирватися вперед в «гонці озброєнь» мов програмування. Серед нововведень C# 3.0 – мова інтегрованих запитів (LINQ), дозволив здійснювати запити з XML з SQL; не явно ввели змінні і методи розширення; Лямбда-вирази, які призначають реалізацію коду делегатам за допомогою нового, більш простого синтаксису. Особливо «відзначилися» Лямбда-вирази разом з мовою інтегрованих запитів.

Анонімні типи змінних дозволили уникнути громіздкості і відвертого незручності при описі змінних, давши можливість оголошувати новий тип безпосередньо при її створенні. Новинкою в C# 3.0 також стали так звані «ледачі обчислення», які виробляють необхідні обчислення лише при запиті потрібних відповідних даних.

У 2010 році була випущена версія C# 4.0. Її головним доповненням до попередніх версій стали іменовані і необов'язкові аргументи. Перші дають можливість прив'язки аргументу і параметра по імені, а другі дозволяють вказати аргумент, який використовується за умовчанням, для кожного параметра. Не менш важливе нововведення – тип dynamic. Він дозволяє здійснювати перевірку на відповідність типів об'єктів не на етапі компіляції, а безпосередньо під час виконання програми.

Паралельно з'явилися нововведення .NET Framework 4.0 – бібліотека розпаралелювання завдань (TPL) і паралельний варіант мови інтегрованих запитів (PLNQ). Їх підтримка дозволяє здійснити паралельність виконання коду в комп'ютерах з багатоядерними процесорами або кількома одноядерними.

Версія C# 5.0 з'явилася в 2012 році. В ній було реалізовано зовсім трохи нововведень:

• Асинхронні методи
• Операція отримання відомостей про зухвалу об'єкті



Версія C# 6.0
Ця версія була випущена через три роки після виходу п'ятої версії — 2015. Її основні нововведення:

• Ініціалізація властивостей зі значеннями

В C# 6.0 можна ініціалізувати властивості значеннями. Це допоможе уникнути помилки null і порожніми значеннями властивості.

• Інтерполяція рядків

Кожен день нам доводиться стикатися з конкатенацией рядків. Хто-то в основному використовує оператор "+", хтось- метод string.Format(). Але проблеми з них всім відомі: при занадто великій кількості параметрів важко розуміти, що означає кожне число– {1}, {2}, {3}. В C# 6.0 придумали нову можливість, яка повинна об'єднати переваги обох методів.

• Використання лямбда-виразів

В C# 6.0 властивості і методи можна визначати через лямбда-вирази. Це сильно зменшує кількість коду.

• Імпорт статичних класів

Всі статичні члени класу можуть бути визначені за допомогою іншого статичного класу. Але нам доводиться постійно повторювати ім'я даного статичного класу. При великій кількості властивостей доводиться багато разів повторювати одне і те ж.

В C# 6.0 з'явилася можливість імпортувати з допомогою ключового слова using статичні класи.

• Null-умовний оператор

C# 6.0 вводить новий так званий Null-умовний оператор (?.), який буде працювати поверх умовного оператора?:). Він покликаний полегшити перевірку на значення NULL.
Він повертає значення null, якщо об'єкт класу, до якого застосовано оператор, дорівнює null.

• nameof оператор

В C# 6.0 оператор nameof буде використовуватися, щоб уникнути появи в коді строкових літералів властивостей. Цей оператор повертає рядковий літерал переданого в нього елемента. В якості параметра можна передати будь-член класу або сам клас.

• Await в catch і finally блоках

До C# 6.0 можна було використовувати в блоках catch і final оператор await. Її можна застосовувати для звільнення ресурсів або для ведення логів помилок.

• Фільтри винятків

Фільтри винятків були в CLR, але тільки в VB. Тепер ця можливість з'явилася в C#, і можна накладати додатковий фільтр на винятку.

• Ініціалізація Dictionary

В C# 6.0 додана можливість ініціалізації Dictionary по ключу значення. Це повинно спростити ініціалізацію словників.

Також Microsoft поліпшила новий компілятор в плані продуктивності.



C# 7.0
У 2016 році стало відомо про нововведення підготовку версії З# 7.0:

• Бінарні літерали

• Локальні функції

Вони дозволяють структурувати код, наприклад, в стилі JavaScript.

• Зіставлення зі зразком (Pattern matching)

Тепер можна використовувати різноманітні засоби для зіставлення.

• Умови та використання об'єктів в перемикачах

Маленька революція для розробників. Тепер switch майже нічим не обмежений. Можна використовувати зіставлення.

• Записи

Автоматичне створення простих класів з довільними полями.

• Кортежі

Іноді хочеться повернути кілька значень методу. Для спрощення цієї задачі в C# 7 додано кортежі та літерали кортежів.

Перспективи#
«Все більше компаній для великих проектів вибирає платформу Microsoft .NET, пише у своєму блозі Михайло Фленов. – Та тут все просто, Java втратив свободу, коли пішов під крило Oracle. До цього переходу Sun витрачав величезні ресурси на цю мову і багато робилося заради свободи, відкритого коду і просто Java. З переходом під крило Oracle мова все ж втратив, став розвиватися повільніше.

У випадку з .NET, Microsoft робить набагато більше зусиль. Мова розвивається все ще досить серйозно, компанія випустила безкоштовний редактор коду під всі платформи, і якраз починає вкладатися в відкритість, робить все, що звільняє .NET.

Важко зараз сказати, що буде з Windows в майбутньому, але поки що ця платформа залишиться самою популярною. А тут C# набирає популярність. Microsoft продовжує вкладатися і в свою мобільну платформу і якщо у них ці дії принесуть плоди, то C# може ще більш серйозно вистрілити», підсумовує він.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.