WWDC 2014: Історія Swift

Головна подія прес-конференції з нагоди відкриття WWDC 2014 року сталася в самому її кінці. Йому приділили зовсім небагато часу. Кріс Латнер, який вміє захопити увагу аудиторії і робити з нею все що захоче, був скутий і несхожий на себе. І тим не менш, WWDC 2014 увійшла в історію як «WWDC на якій був представлений Swift». Нова мова програмування, назва якої перекладається просто і без затій як «Стриж», прийшла на зміну Objective-C.

26 років ця мова використовувалася в NeXTSTEP і в усіх спадкоємцях цієї системи (Mac OS X, iOS, GnuStep, tvOS), стала однією з найпопулярніших мов у світі, а на мою думку вона була (є?) найкращою з кращих. Я не можу бути об'єктивним, з 2001 по 2016 Objective-C був моєю основною мовою програмування. До нього були ObjectPascal і C++.


Все інше, оголошене і представлене на тій прес-конференції (нові версії OS X, iOS і Xcode, і навіть Metal) справило значно слабший ефект.

Це продовження серії про WWDC 2014, попередні частини тут:

Перша частина: WWDC 2014: за версією Apple, 25-та WWDC;
Друга частина: WWDC 2014: Згадуючи QuickDraw 3D
; Третя частина: WWDC 2014: Metal - це дуже серйозно.

Розкол

Захват, який охопив різних людей, щирий і непідробний, я не поділяв. Мені було боляче і неприємно читати і чути вихваляння на адресу нової мови, яка несла в згуртовані ряди пишучих для «яблучних» систем розкол і плутанину.

У вихідних кодах бібліотек iOS і OS X десятки (якщо не сотні) мільйонів рядків коду на Objective-C. Переписати їх на Swift у найближчі років десять-двадцять було нереально, тим більше переписати по-розумному, щоб не втратити щось важливе і придбати щось дуже важливе і потрібне.

Навіть якби Apple вдалося ідеально надбудувати істотно іншу за своєю природою мову над усіма цими мільйонами рядків, проблеми були б неминучі. А складне ніхто і ніколи не робить ідеально.


Що до самої мови, то спочатку він мені дуже не сподобався. Завантаживши книгу про Swift (це шедевр технічної документації, без краплі іронії), і відкривши її в перший раз, я побачив щось на зразок let aNumber = 42. Як у найдавніших варіантах Basic'a! Відсталих вже тоді, коли я їх вивчав, років за 20 до кінця попереднього тисячоліття. Оператор присвоювання в них виглядав саме так, майже в точності (приблизно так: LET ANUMBER = 42).

Я плюнув і закрив цю електронну книгу. Повернувшись з роботи і подолавши себе, я приступив до читання. Виявилося що «let» в Swift має цілком гідне призначення, але мова мені активно не подобалася.

Суворий контроль за типами даних, суцільні «не можна» і «обов'язково» - це ж кошмар, правда? Ідея з optionals цікава, але якось все незвично. Не по-людськи! А мені з ним жити.

Мова мені не подобалася дуже довго. Цілу епоху. Тиждень або два. Через місяць мене охопив захват.

Сміливі обіцянки

Публіці Swift представили як Objective-C без C. Ніби через це освоїти його буде легше. Молодь до нього потягнеться, і напише шедеври неймовірної потужності. Стоп...

Людина, яка не здатна освоїти C, може бути генієм в будь-якій області, але шедевр програмістського мистецтва він не напише ніколи. Це не його.

На щастя, це всього лише маркетингове гасло. C в Swift'e присутній на кожному кроці, це C-подібна мова. Хоча власне C, як окремої сутності, в ньому дійсно немає.


Swift сконструйований по-розумному, в ньому передбачено багато чого з того про що раніше ніхто не дбав. Мова дуже передбачувана, безпечна, багато з найбільш типових помилок у ній фізично неможливі - але взагалі-то вона складніша ніж C. У ній дуже багато правил про які треба звідкись дізнатися.

Сучасний, швидкий, компактний, продуманий, безпечний - мабуть, ці обіцянки в новій мові були виконані, з самого початку.

Але в те що Swift, з першого його дня, стане «громадянином першого сорту» в iOS і OS X я не повірив. У цьому напрямку Apple їм команда Латнера зробили дуже багато чого, можливе і неможливе, і навіть (забігаючи вперед, в 2014 році про це ще ніхто не знав) кілька разів все це переробили, поліпшивши і вуглУбів.

Деякі з цих поліпшень сподобалися мені навіть більше ніж сам Swift. Ви бачили CoreGraphics у варіанті для Swift, та інші бібліотеки в оригіналі написані на C?

Коли системи хоча б наполовину будуть написані на Swift, тоді ця обіцянка буде виконана.


Порадувало що ніхто не пообіцяв що навіть самі-самі альтернативно обдаровані товариші зможуть без зусиль писати в Swift відмінний «софт». На жаль. Жодна мова у світі не гарантує від жахливих програм.

Обіцянки (їх було дюжини півтори) були «придумані» в маркетинговій службі, зі слів інженерів і менеджерів знали про Swift і мови програмування не з чуток. Їхнє спілкування, швидше за все, було нервовим - але продуктивним.

Маркетологи майже не збрехали. Так, трохи, в рамках пристойностей. І тільки так, щоб їх неможливо було зловити на обмані і переконливо довести це.

Swift 1.0

При всіх його дивовижних якостях, перший Swift був дуже сирим, багато чого в ньому поводилося не так як обіцяла Книга (безкоштовна, відмінно написана, книга про Swift).

Згідно теорії Жана-Поля Гассé, будь-який складний технічний виріб (комп'ютер, програма, операційна система, графічний або центральний процесор) не може «відбутися» раніше ніж у третій його версії.


Теорія працює не завжди: процесори від Apple «відбулися» вже в першій їх версії, в тій яка називалася Swift (це Apple A6 і Apple A6X), а Cyclone (центральний процесор в Apple A7) вже просто громив конкурентів. Були й зворотні приклади (але про сумне не буду).

Swift-яка-мова відбулася саме в третій версії.

Коли Кріс пішов з Apple, найголовнішим у проекті Swift став Тед Кременек, один з тих хто придумав, продумав і зробив реальністю цю мову. Мені здалося що диву прийшов кінець - але, судячи з нинішньої версії мови, я помилявся.

А яка мова краще - Swift або Kotlin або сучасний C++?

Джеф Раскін говорив що порівнювати складні сутності на краще/гірше також безглуздо як порівнювати точки на площині на більше/менше. Джеф говорив багато різних речей. З дуже багатьма його твердженнями я не згоден - але не з цим.


Про саму мову не пишу - про нього стільки всього вже написано.

Продовження слід

Пропонуємо підписатися на наш канал в «Яндекс.Дзен». Там ви зможете знайти ексклюзивні матеріали, яких немає на сайті.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND