Pull to refresh

Comments 83

Swift быстр (скорость реализации некоторых алгоритмов в 3,9 раза больше, чем на Python)

Почему здесь приведено сравнение скорости с питоном, а не С, objective-C или хотя бы с Java? Питон же интепретируемый. Или Swift не настолько быстрый, чтобы сравнивать с компилируемыми языками?

Скорее всего это отсылка к оригинальной презентации, что-то вроде «писать на свифте так же просто как на питоне, а результат в 3.9 раз лучше»
image

time go build -o test-go go/test.go
        0.55 real         0.57 user         0.12 sys
time swiftc -O -o test-swift swift/test.swift
        0.35 real         0.30 user         0.03 sys
time c++ -O3 -o test-c cplusplus/test.cc
        0.56 real         0.51 user         0.04 sys
time ghc -O3 -o test-hask haskell/test.hs
Linking test-hask ...
        0.46 real         0.34 user         0.10 sys
Согласен. Но, swift можно использовать и как интепретируемый язык по аналоги с питоном.
Например, «swift script.swift»
Как вообще можно говорить о скорости работы языка программирования?? Ведь в результате компиляции получается машинный код.
По-моему это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».
это все равно что: «Русский язык быстр (скорость говорения некоторых предложений в 3,9 раза больше, чем на английском)».


Некоторых. Так как и в русском и в англ. всё можно выразить словом (или его аналогом) из четырёх букв, то в среднем практически одинаково.
Переименуйте статью в «история Objective C и маркетинговый буллщит про Swift».
Вот это самое прекрасное: «Он стал самым быстрорастущим языком программирования в истории.»

Быстрорастущим куда? В сравнении с чем? По каким критериям?
В рейтинге TIOBE, скорее всего.

Давайте по-честному: единственная причина успеха и вообще существования Swift — это необходимость иметь обратную совместимость с неимоверно вырвиглазным и отсталым Objective-C (см. ваш же скриншот из начала статьи). Если бы не жёсткие рамки обратной совместимости вкупе с ущербностью Objective-C, никакого Swift не было бы. Был бы Objectve-C нормальным — никто бы с него не переходил из-за смутных плюсов; не было бы обратной совместимости — никто не стал бы выкидывать тонны написанного кода. Просто Swift дал возможность огромному числу программистов писать на нормальном языке.


Вот когда Swift кому-то понадобится за рамками яблочных платформ, можете начинать заливать про революционность, стимулы и далее по списку и сравнивать с Java, которая отжала огромный кусок от C++ именно за счёт новых подходов; ну или хотя бы с C#, который как Java, только нормальнее. Пока же этот Swift со всеми своими "стимулами" никому не нужен за рамками яблочных платформ.


Скорость с питоном они сравнивают, ох...

Про кросслпатофрменность сейчас явно кто-нибудь вам ответит что Hello world можно запустить на андроиде! и на Windows через новый встроенный линукс. Про сравнение с питоном — чуть чай не пролил от смеха :-).

А что-нибудь кроме Hello World? Есть ли у Swift реальная область применения за пределами яблочных платформ?
а как же слухи про android и swift?

хотя какие комменты можно ожидать от работника Xamarin… :) боитесь потенциального конкурента.

Ну когда свифт на андроиде сможет легко интеропаться с кучей уже написанных 3rd party на джаве, включая UI контролы и дизайнер (т.е. предоставит красивый языковой враппер) и когда IDE будет поддерживать такие же возможности рефакторинга как idea/android studio тогда поговорим :-). И я молчу уже о Windows и UI фраемворках для него.

fyi: https://habrahabr.ru/company/bitrix/blog/309000/#comment_9785312

Ничего не понял — как это решает проблему "подключить быстро любую нативную 3rd party на java в мой Android Swift проект".

это инфа к вашему твердому «нет» на вопрос «Есть ли у Swift реальная область применения за пределами яблочных платформ?»

Ну ок, репозиторий с 4 звездочками, вижу действительно нужно.

Так это скорее для поддержания яблочной платформы в tarantool'e сделано, а не потому что swift такой модный, удобный и молодежный. А клиентам tarantool'a за пределами яблочной платформы скорее всего будет удобнее писать хранимые процедуры на lua.
А что слухи, вот: http://elementscompiler.com/elements/silver/

Ждем от вас что-нибудь кроме helloworld и упреков в боязни конкурентов.
речь была о слухе:
Google is said to be considering Swift as a ‘first class’ language for Android

About the time Swift was going open source, representatives for three major brands — Google, Facebook and Uber — were at a meeting in London discussing the new language. Sources tell The Next Web that Google is considering making Swift a “first class” language for Android, while Facebook and Uber are also looking to make Swift more central to their operations.

http://thenextweb.com/dd/2016/04/07/google-facebook-uber-swift/

.net-у такое и не снилось :)

.net по идее мог быть из коробки в Андроиде ;-) Есть историческое гугловое письмо на это туему. Ну а swift first class это не более чем слух, тем более после того, как суд недавно отказал Ораклу гуглу вообще не имеет смысл вводить новый язык забивая на огромную тучу существующего кода комьюнити.

а что за письмо? что-то не гуглится

http://www.fosspatents.com/2011/07/judge-orders-overhaul-of-oracles.html


One of the most interesting passages in today's order quotes from an October 2005 email by Google's Android boss Andy Rubin:
"If Sun doesn't want to work with us, we have two options: 1) Abandon our work and adopt MSFT CLR VM and C# language — or — 2) Do Java anyway and defend our decision, perhaps making enemies along the way"

fyi: https://habrahabr.ru/company/bitrix/blog/309000/#comment_9785312
UFO just landed and posted this here

Это как-то опровергает мою мысль? Я не ругаю свифт, мне он нравится :) Вон недавно сказали что введут async/await в него в 4ой версии. Но на андроиде написано огромное количество библиотек, костылей и т.п. На это нельзя забить и сделать язык со своим гуёвым фраемворком или кривым интеропом. PS: ой, я подумал вы из ветки про андроид.

Киллер-фича свифта — обратная совместимость с обж-с. К сожалению, это приводит к некоторым странным фичам: повсеместное позднее связывание, странная логика попадания имён аргументов в сигнатуры, многословные названия методов… И эти странности идут в компании с ломанием обратной совместимости (во второй версии просто взяли и поменяли смысл ключевого слова), сыростью компилятора (припоминаю статью с экспоненциальным ростом времени компиляции при использовании литералов словаря), кросс-платформенности как таковой нет… За рамками яблок смысла в свифте примерно ноль. Свифт пытается догнать современные языки, а не совершает революции.

Третья версия свифта тоже имеет необратимые изменения.
Большинство этих проблем пофиксили в Swift 3
Очень интересно, как вы себе представляете реализацию раннего связывания при поддержке совместимости с Objective-C, в котором все методы виртуальны.
UFO just landed and posted this here
ibm дружит со swift. не?
ObjC — отличный язык, на котором приятно писать, после определённой практики. Во всяком случае, не слышал массовых жалоб от тех, кто постоянно на нём пишет.
И что такого особенного в Swift для обратной совместимости с ним? Чем это мешает языку?
Возможности у Obj-C хорошие, но синтаксис вырвиглазный и трудночитаемый. Хотя когда они сделали синтаксический сахар для декларации массивов и объектов, стало намного лучше.

А свифт выглядит как снтаксический сахар для Obj-C из-за вот таких моментов:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell


Для примера, тот же код на C#
var cell = tableView.DequeueReusableCellWithIdentifier("Cell", indexPath);

Из-за совместимости с Obj-C в плане семантики методов, которой несколько пожертвовали в Xamarin, язык получился многословный.
Не понимаю зачем надо было убирать const и делать за место него let?
Это что было сделано для удобства? Ох уж эти смалталки…
Вообще const и let семантически должны быть разными (не в objc или swift, а вообще). const это истинная константа (т.е. времени компиляции), а let по сути — переменная с «однократной записью» (или константа времени выполнения).
Читаемость ObjC — дело привычки и стиля кода. Конечно, можно написать нечитаемые конструкции с кучей скобок и большой вложенностью. Но подобные конструкции и в других языках читаются плохо.

По Swift — если вы про именованный аргумент, то я ниже ответил.
Obj-C провоцирует вложенность там, где в C -подобных языках будет точка либо стрелка. А вложенность читается труднее. спорить тут особо не о чем.
Честно говоря, не вижу разницы между точкой и квадратной скобкой в плане читаемости.
Под вложенностью я имел ввиду результат вызова метода, передаваемый как параметр для вызова другого метода. Что-то вроде:
[view animateWithDuration: [obj2 gimmeDuration] animation:[obj2 gimmeAnimation]] Что лично для меня не читается труднее чем: view.animateWithDuration(obj2.gimmeDuration(), obj2.gimmeAnimation())

в случае языка с пропертями, на которые похожи ваши геттеры это было бы


view.animateWithDuration(obj2.gimmeDuration, obj2.gimmeAnimation)

по-моему, разница тут существенная в восприятии

В ObjC свойства тоже есть.

Спасибо, я в курсе. Квадратных скобок меньше не станет в примере.

В примере приведены методы, а не свойства. Если бы там были свойства, как в вашей строке выше, то квадратных скобок было бы меньше. Странно что вы этого не понимаете, если в курсе.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

UIApplication.SharedApplication(new NSUrl(urlString));

Это еще для NSUrl не надо делать [[NSUrl alloc] init]
OpenUrl потерял
UIApplication.SharedApplication.OpenUrl(new NSUrl(urlString));
<про OpenUrl автор уже поправил>.

Опять-таки, лично для меня код на ObjC читается легко и приятно. Не хуже чем нижний пример, во всяком случае. А вот если нужно [[NSUrl alloc] init] делать, тогда конструкцию пора разбивать на две строки. Читаемость только выиграет, кстати.
Ёжики плакали, кололись
Все, кто постоянно пишет на Obj-C «легко» читают его. Более того, я даже лисп легко читал, когда писал на нем. Но трудно передать тот кайф, когда я с Obj-C вернулся на C#. Не единственной, но довольно значимой причиной этого кайфа было отсутствие необходимости постоянно считать скобки.
У меня другой опыт. Никакого облегчения при переключении на Swift, Java или JS в связи с отсутствием скобок не испытываю. Хотя приходится немного привыкнуть к точкам, а потом к скобкам, когда возвращаешься обратно.

Но писать надо по-другому, что есть, то есть. Выше вы написали, что ObjC провоцирует вложенность. По-моему, наоборот. Провоцирует выносить в отдельные переменные, особенно конструкции типа [[Class alloc] init] Код длиннее получается, зато каждая отдельная строка — проще.
Я лично являюсь сторонников подхода obj-c и swift, когда имена параметров являются частью сигнатуры метода. Читается как книга, особенно когда передается несколько параметров одного типа или большое кол-во. Править код значительно проще, особенно если автор не слишком задумывается над именованием переменных. Кроме того dequeueReusableCellWithIdentifier уже возвращает объект типа UITableViewCell, так что приведение типа избыточно.

Почему в c# "WithIdentifier" является частью метода, а не называется просто "GetDequeueReusableCell"?
Почему в c# «WithIdentifier» является частью метода, а не называется просто «GetDequeueReusableCell»?

Потому что я неправильно написал, а метод таки GetDequeueReusableCell

А про приведение типа, ф вот тоже удивился, но в первом попавшемся примере было так.
ObjC — жуткая химера, создававшаяся изначально как препроцессор для C и эволюционировавшая затем во что-то совершенно непотребно. В XXI веке существование подобных пережитков не может имееть никаких оправданий.
Ну если сравнивать с современным метапрограммированием на C++ — то не такая уж и химера. А вообще конечно хорошо что появился Swift, так или иначе развитие языков программирования должно быть, и ошибки дизайна ранних языков (которые конечно же были) должны исправляться.
Чем вам Objective C не нравится?
Objective-C более чем нормален и удобен, а прямая совместимость с C и C++ — вообще подарок богов.
А мне ObjC как-то сразу понравился, хотя реальных проектов я на нем не делал.
Не синтаксис (он действительно вырвиглазный), а именно семантика. Возможность отправлять сообщения вместо вызова методов, динамика, рефлексия, возможность отправлять сообщения null-у. Всего этого мне очень не хватало в C++.
А Swift… он конечно аккуратный такой, но меня пугает, что в последней редакции они выкинули из языка даже такие основы основ как операции инкремента и декремента (++ и --). И не то чтобы сложно написать i=i+1, но вот для кого это было сделано? Как будто не для программеров, а для каких-то домохозяек, которых пугают непонятные символы.

Ну почему, вариент i += 1 еще доступен :)

Синтаксис ObjC вырвиглазным кажется только по началу. Через несколько месяцев привыкаешь и остаётся только бонус в виде именованных аргументов. Потом языки с привычным С синтаксисом кажутся неудобными из-за отсутствия этой фичи.

Что до Swift и изъятия ++ и --, это неоднозначное на первый взгляд решение. Разработчики в результате обсуждения решили убрать по нескольким причинам.
1) Реальной пользы мало, i += 1 не намного длиннее, так что конструкция была добавлена скорее по привычке
2) Наиболее частое использование — увеличение индекса при итерации коллекций. Итерация в Swift делается другими, более безопасными и изящными способами.
3) Часто использовались в запутанных конструкциях, усложняющих понимание кода.

там и другие аргументы были, но менее убедительные, на мой взгляд.
> остаётся только бонус в виде именованных аргументов
такой уж и бонус. Придумывать название для каждого аргумента.
Код пишется один раз, а читается много. Даже если это проект одной команды, не говоря уже о фреймворках и просто публично доступном коде. Поэтому лучше один раз чуть больше времени потратить на описание, зато экономить каждый раз при чтении на необходимости лезть в тело метода или документацию, чтобы понять за что отвечает тот или иной аргумент.
нормально методы можно называть и без именованных аргументов.
Именованные аргументы в Swift не обязательны, но их наличие частенько помогает

В js, кстати, можно что-то аналогичное делать теперь:
function fnc({a, b, c, d}) {
	return a + b - c + d
}

let rr = fnc({a: 1, b: 2, c: 3, d: 4})
В C# тоже можно явно указывать имена аргументов. Ещё и в произвольном порядке (но не всегда стоит)
Назвать метод — мало. Надо ещё указать смысл аргументов и порядок их передачи. Что без именованных параметров будет монструознее, чем с ними.
не, ну когда аргументов 100-500, это конечно да.
уже с 2-3 будет хуже
Inplace increment (`i++`) сейчас не в моде, потому что он обманывает читателя: нумерики фактически везде иммутабельны, поэтому `i++` синтаксически неверно. Домохозяйкам это, может быть и непонятно, правда.

UFO just landed and posted this here
Простите, а что в этом синтаксисе инкремента и декремента такого полезного по сравнению с i=i+1, чтобы его вообще нужно было вводить в языки? Он на 3-7 символов (в зависимости от того как форматировать выражение) короче? Или просто не как у всех?
Да просто после стольких лет использования практически во всех языках взять и выкинуть… странно. Вроде никому не мешали эти операторы. А у профессиональных программистов эти операторы уже в подсознании заложены — думаю многие будут чертыхаться, написав инкремент на автомате а затем вспоминая, что в swift же его нет.
Ещё одно важное нововведение — это возможность писать код и видеть результаты в режиме реального времени.

Вы имеете ввиду playgrounds?
REPL как таковой вообще должен быть у современных языков, и не только скриптовых. Думаю со временем это станет неотъемлемой частью IDE, как сейчас подсветка синтаксиса.
Я не совсем понял, где в «продакшн» разработке в Xcode есть место результатам в режиме реального времени. Playground это песочница для изучение синтаксиса, ну пусть еще черновик отдельной функции и её отладка. Но в разработке приложений я не заметил никаких результатов в реальном времени. Или я не понял, что имеет в виду автор?
Swift не взлетел. В нём нет того шарма, что был в 1995 при рождении Java.
А был шарм?
Или скорее тогда ничего кроме С/С++ не было, и тут новый язык. Сейчас-то есть и C#, и Go, и Rust, и скриптовых немеряно.
Помню, когда я впервые прочитал про Java, первая реакция была — ну С++ без указателей, ну и что? :) К C# помню был какой-то интерес, потому что там появилась новая концепция «атрибутов», сразу «вау, что-то новенькое, интересно что же это».
А был шарм?
Или скорее тогда ничего кроме С/С++ не было, и тут новый язык.

Был шарм. И были Паскаль и Дельфи и С++ и Ada и Prolog.

когда я впервые прочитал про Java, первая реакция была — ну С++ без указателей, ну и что?

Чисто стилистически это иной язык.
А мне кажется Swift УГ, и вот почему:
1. В первую очередь потому-что я его не изучал!
2. Есть Kotlin со всеми своим блекджеком и Java инфраструктурой.
3. Хочешь LLVM, есть GO в 100500 раз лучше Swift.
4. И, как не печально это осознавать, но ни какой новый язык не исправит убогое iOS SDK.
5. Если ты хочешь зарабатывать бабло на приложениях с максимальной выгодой ReactNative + Objective-C наше все!!!

Ну все а я пойду подожду что из этого всего выйдет и на сколько я на шутил про Swift правды.
UFO just landed and posted this here

А что котлин можно в iOS? :-)

Ну несерьезная шутка :)

Давайте теперь дополнение спустя годы)
Sign up to leave a comment.

Articles

Change theme settings