Новый язык программирования Swift стал самой неожиданной новинкой на WWDC 2014. Аудитория была в таком восторге, будто им только что представили новый iPhone. Дискуссии о возможностях и полезности свежего инструментария ещё долго не утихнут. Интересно, что сам проект находился в разработке с 2010 года, но только в 2013-м он стал одним из ключевых в планах компании на ближайшее будущее.
Не все сотрудники Apple связаны соглашениями о неразглашении по рукам и ногам. Крис Латтер, глава отдела инструментов разработки, открыто делится историей Swift в своем личном блоге на TechCrunch. Начало работы над языком было положено в середине 2010-го года, а в 2011-ом он начал обретать единую форму. Постепенно Swift стал одним из главных направлений работы отдела, которым руководил Крис.
Язык Swift является плодом усилий команды экспертов по языкам программирования, гуру справочных документаций, ниндзя компьютерной оптимизации и невероятно значимого внутреннего кружка тестеров, члены которого обеспечивали обратную связь для улучшения и тестирования идей в боевых условиях. Конечно, опыт работы с многими другими языками также существенно помог – с идеями, взятыми из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многими другими по списку.
Функция мгновенной компиляции кода и отображения результата – Xcode Playground – вкупе с REPL являлась моей личной страстью, основанной на желании сделать программирование более отзывчивым и доступным. Команды, работающие над Xcode и LLDB, выполнили феноменальную работу, реализовав сумасшедшие идеи во что-то по-настоящему отличное.
Крис Латтер надеется, что с помощью Swift программирование станет более доступным и интересным. Для этого Apple выпустила объемную и бесплатную книгу-документацию по новому языку, которая доступна в iBooks уже несколько дней. Ради интереса можете попробовать прочесть её сами, даже если не знаете ничего по этой теме. [macrumors]
30 комментариев
Форум →Стриж конечно снизит порог входа в разработку для яблок, и это позитив. С другой стороны, мне, как любителю Смоллтока, обидно, что последний бастион его идеологии, похоже, сдаётся… Симулаподобные языки окончательно побеждают, увы…
Грустный язык… Возможность прямого доступа к свойствам объекта, что может быть страшнее. А как элегантно Objective-C работает с нулевым указателем, никаких segfaults при передаче сообщений.
Возможность прямого доступа к свойствам объекта? Что имеется в виду?
Насчет элегантности нулевого указателя — ничего элегантного тут нет. Никогда не ясно, полагается ли кусок кода на то, что значение может быть nil, или нет. Потом из-за этого сюрпризы.
@Enlightened, скажем так – это философия.
Смотрим пример:
«class SurveyQuestion {
var text: String
var response: String?
init(text: String) {
self.text = text
}
func ask() {
println(text)
}
}
let cheeseQuestion = SurveyQuestion(text: “Do you like cheese?”)
cheeseQuestion.ask()
// prints “Do you like cheese?”
cheeseQuestion.response = “Yes, I do like cheese.»
Отрывок из книги: Inc, Apple. «The Swift Programming Language.» Apple Inc., 2014-05-27T07:00:00Z. iBooks.
Этот материал может быть защищен авторским правом.
Посмотрите эту книгу в iBooks Store: (null)
response – прямой доступ, а в obj-c четко через методы было.
Ну и гораздо удобнее:
[someObj sendMsg:xxx];
которое никогда не даст вылета, нежели все на nil проверять (? в свифте ставить).
Ох и пойдет глючных прогв в аппсторе.
@cd_racer, что касается неограниченного доступа – инженеры Эппл вроде как пообещали добавить механизм контроля: http://stackoverflow.com/questions/24003918/does-swift-have-access-modifiers
@WhyN0t, видел, но это на усмотрение программиста. Зачем огород городить, когда в getter-setter это можно делать сразу? Ну и в генерируемых по-умолчанию нечто подобное делалось. В общем, настороженно я к таким штукам отношусь.
@cd_racer,
>Ох и пойдет глючных прогв в аппсторе.
из-за слабой типизации и низкоуровневости в ObjC куда больше глюков. В программе ждешь NSNumber, а в следствии ошибки допустим серевера в JSON прилетает NSString. Хотелось бы чтобы сразу, на этапе инициализации объекта была ошибка, а не где-то в глубине программы, в другом потоке (так что стектрейс ничего тебе на даст) вывалилось исключение – нет такого метода.
Да и по поводу nil в objc не все так просто. При попытке вставить nil в словарь вывалется исключение. При попытке сравнения isEqualToNumber с аргументом nil тоже
@progn, JSON – это в первую очередь вопрос к библиотеке: как сделана, так и работает. Тут просто получилась доп. прокладка, в некотором смысле квазибиблиотека. Уж не уверен, хорошо ли это. Так можно явно проверять перед преобразованием. Ну да, на этапе выполнения ошибка вылезет сразу рядом. Так, по-хорошему, всегда стоит заранее проверку делать на корретность получаемых данных – это хороший стиль.
@progn, по поводу nil соглашусь: не все идеально, но будет еще хуже.
@cd_racer, да, проверять на nil. “?” это как раз очень элегантная синтаксическая обертка для maybe монада. А глючные программы как раз и глючные из-за того, что программа входит в неопределенное состояние, а не крашится сразу. И разработчик даже не знает, с какого момента она стала неправильно работать.
@Enlightened, я боюсь, что в половине программ про такую проверку не подумают
@cd_racer, программа будет падать в этом месте, и это отлично, даже неопытный программист поймет по пришедшему стрекрейсу что он не учел этот момент, и или поставит проверку или поменяет код так чтобы этой ситуации не возникало. Это лучше странных ошибок которые могут произойти намного позже.
@cd_racer, вообще-то, это properties. в той же книге, которую вы процитировали, пишут что они могут быть stored и computed.
фактически, это аналог synthesize, но без него. и правильно сделали, избавились от лишнего.
пример из книги:
var origin = Point() // stored
var size = Size() // stored
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter {
origin.x = newCenter.x – (size.width / 2)
origin.y = newCenter.y – (size.height / 2)
}
}
@jabbarish, я так понял, что не совсем. Опять же, пример из книжки привел
Изобретен велосипед и Apple этим гордится.
@Astraport, только этот велосипед ездит быстрее в 2 раза. при одинаковых усилиях кручения педалей.
@mitim, вопрос: почему быстрее. Потому что статическое связывание и порямой доступ к данным объекта? Сомнительный плюс. А если все по-уму сделать (с методами, проверками и тп), то скорость, навреное, будет той же.
@cd_racer, да, по текущим тестам Swift выходит значительно медленнее (иногда просто медленнее) Objective-C.
@Astraport, какой жутко недалекий комментарий…
По вашему все что вышло после Plankalkül не стоило изобретать?
@Dmitrii, После ознакомления с синтаксисом сделал вывод,, что Apple сделала очередной Flappy Bird.
@iGeek, ну так чем проще тем проще. Мне синтаксис понравился – во многом схож с Python. Многое стало удобнее в разы. Ну это опять же личное мнение, но мне приятней стало кодить)
@Dmitrii, да я не против, пусть что хотят изобретают. Просто Свифт выходит самое значимое событие выставки, миллионы людей бъются в экстазе, революционное событие, переворот в сознании.
А в результате обыденное событие, аналоги которому возникают по несколько штук в год.
@Astraport, Это эволюционная ступень развития Obj-C – и очень не плохая, и чтобы тут не писали в комментах – я нашел его для себя в разы удобнее.
Аналоги не возникают по несколько штук в год. Не нужно преувеличивать. В действительности для нас был по большому счету только Objective-C.
А давайте скинесмся и переведем эту книженцую с описанием на русский язык?
@plazmatex, думаю, уже переводят. Подожди пару недель.
@plazmatex, https://hexlet.org/course/swift/
Или вот даже видео уроки на русском.
@plazmatex, не хочу никого задеть, но как можно кодить не зная английского? Я не про «Hello, world!» говорю )
@Dmitrii, вот и у меня тот же самый вопрос возник.
Кто-то кричал (то ли тут, то ли на другом сайте), что типа без Джобса Эппл начал и язык свой создали, при этом назвав этот язык выкидышом. Так вот, кто сказал это, если ты читаешь это то, уткнись! Язык еще при Джобсе разрабатывался и было глупо думать, что они его за год написали. Что за тенденция пошла, все думают, что они за год все делают. Ну возьмите и сделайте сами все за год.
что в Эппл и язык свой создали*
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Как запретить установку и удаление приложений на iPhone или iPad
Как передать контакт с Android на iPhone. Без приложений, почты и мессенджеров
Как обойти ограничение на загрузку приложений по LTE
Как восстановить заметки на iPhone без iCloud
Почему вылетают стандартные приложения на iPhone
Как отменить подписку, если уже удалил приложение с iPhone
Что делать, если к Mac не подключается Bluetooth клавиатура, мышь или трекпад
Что делать, если один наушник AirPods часто отключается