Swift под Linux

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Swift под Linux

Непрочитанное сообщение Olej » 02 фев 2018, 16:40

Язык программирования Swift уже упоминался в форуме несколько раз:
производительность языков программирования
Swift — язык программирования от Apple.
В 2015г. Apple анонсировала Swift как открытый язык программирования (с открытым исходным кодом) и теперь Swift доступен на Linux.
Swift
Swift — это надёжный и интуитивно понятный язык программирования от Apple, при помощи которого можно создавать приложения для iOS, Mac, Apple TV и Apple Watch. Он предоставляет разработчикам небывалую свободу творчества. Благодаря этому простому и удобному языку с открытым кодом вам достаточно просто интересной идеи, чтобы создать нечто невероятное.
Смысл здесь (в разборках с языком Swift) в том, что ... многие программисты хотели бы осваивать iOS, но далеко не у всех есть под рукой iPad или iPhone. Под Linux можно а). разобраться с языком Swift и научиться ним пользоваться и, возможно, б). разрабатывать некоторые приложения под Apple оборудование.
Сам Swift, собственно, под Linux никакого смысла не имеет - IMHO ... но может кто-то в этом и видит смысл, которого я не вижу.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 02 фев 2018, 16:43

Olej писал(а):Смысл здесь (в разборках с языком Swift) в том, что ... многие программисты хотели бы осваивать iOS, но далеко не у всех есть под рукой iPad или iPhone. Под Linux можно а). разобраться с языком Swift и научиться ним пользоваться и, возможно, б). разрабатывать некоторые приложения под Apple оборудование.
К счастью (это сильно ускорит начало освоения) есть вот такой русскоязычный сайт с документацией по языку:
Изображение
Документация на сайте на Swift 3.0

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 01:04

Берём здесь: Download Swift.
Там есть только:
Ubuntu 16.10 December 5, 2017
Ubuntu 16.04 December 5, 2017
Ubuntu 14.04 December 5, 2017
Но! Там не какие-то DEB-пакеты для установки, а архив от корня, то, как распространялись UNIX бинарные пакеты ... лет 20 назад.
Поэтому есть у меня подозрение, что это можно разархивировать с равным успехом (или неуспехом) в любом Linux.
Архивы не маленькие ... чуть поболее 150Mb:

Код: Выделить всё

[olej@dell Langs]$ ls -l swift-4.0.3-RELEASE-ubuntu16.10.tar.gz 
-rw-rw-r-- 1 olej olej 167162654 фев  2 23:58 swift-4.0.3-RELEASE-ubuntu16.10.tar.gz
Если это хозяйство разархивировать (как они пишут - в любое место), то будем иметь:

Код: Выделить всё

[olej@dell Langs]$ tree -L 2 swift-4.0.3-RELEASE-ubuntu16.10 
swift-4.0.3-RELEASE-ubuntu16.10
└── usr
    ├── bin
    ├── include
    ├── lib
    ├── libexec
    ├── local
    └── share

7 directories, 0 files
Что и подсказывает, что это "архив от корня".

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 11:00

Установка...
Как они пишут (раздел Linux пониже), для установки достаточно:

1. Проверить что установлены 2 пакета, требуемые по зависимостям:

Код: Выделить всё

olej@nvidia ~ $ apt search clang libicu-dev | grep 'i '
i   clang                                             - C, C++ and Objective-C compiler (LLVM based)               
i A clang-3.8                                         - C, C++ and Objective-C compiler (LLVM based)               
i A libclang-common-3.8-dev                           - clang library - Common development package                 
i A libclang1-3.8                                     - C interface to the clang library                           
i   libicu-dev                                        - Development files for International Components for Unicode 

Или доустановить.

(пропускаю проверку GPG сигнатур!)

2. Разархивировать .tar.gz в любой каталог /path/to ...

Код: Выделить всё

[olej@dell ~]$ tree -L 2 swift-4.0.3-RELEASE-ubuntu16.04
swift-4.0.3-RELEASE-ubuntu16.04
└── usr
    ├── bin
    ├── include
    ├── lib
    ├── libexec
    ├── local
    └── share

7 directories, 0 files
3. Установить (можно в ~/.bashrc ... или командой в терминале) путь:

Код: Выделить всё

$ export PATH=/path/to/usr/bin:"${PATH}"
После чего:
You can now execute the swift command to run the REPL or build Swift projects.
P.S. На сегодня последней актуальной stable версией является 4.03. Обращайте внимание на версию, версии 2.Х, 3.Х, 4.Х - слабо совместимы.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 12:19

Olej писал(а): После чего:
You can now execute the swift command to run the REPL or build Swift projects.
REPL - это их такая консольная IDE:
REPL (Read-Eval-Print-Loop)
В ней можно диалогово набирать код, выполнять, отлаживать...
Вложения
r1.png

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 12:36

Olej писал(а): 2. Разархивировать .tar.gz в любой каталог /path/to ...

Код: Выделить всё

[olej@dell ~]$ tree -L 2 swift-4.0.3-RELEASE-ubuntu16.04
swift-4.0.3-RELEASE-ubuntu16.04
└── usr
    ├── bin
    ├── include
    ├── lib
    ├── libexec
    ├── local
    └── share
 
7 directories, 0 files
3. Установить (можно в ~/.bashrc ... или командой в терминале) путь:
Есть другой вариант: как и требует UNIX "разархивирование от корня", из каталога в который разархивировали, копировать в корень файловой системы:

Код: Выделить всё

olej@nvidia ~/swift-4.0.3-RELEASE-ubuntu16.04 $ sudo cp usr /usr -R
Это лучше в смысле простоты использования (никаких переменных PATH, LD_LIBRARY_PATH, никаких несоответствия путей), но это хуже в смысле удаления.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 13:22

Olej писал(а):В ней можно диалогово набирать код, выполнять, отлаживать...
Как можно видеть и из картинки, простейшее приложение на Swift может выглядеть так:

Код: Выделить всё

print( "Hello, world!" )

Вот его (файл hello.swift) и станем использовать в качестве тестового пробника.
Ещё одно приложение - вычисление чисел Фибоначчи, используемое и для сравнения скоростей выполнения:

Код: Выделить всё

func fibo( n: Int ) -> Int {
    if n < 2 {
        return 1
    }
    else {
        return fibo( n: n - 1 ) + fibo( n: n - 2 )
    }
}

if CommandLine.arguments.count < 2 {
    print( "Ups!" )
} else {
    let arg = CommandLine.arguments[ 1 ]
    let argstr: Int? = Int( arg )
    if argstr != nil {
       let argint: Int! = Int( arg )
       print( fibo( n: argint ) )
    }
    else {
       print( "Ups!" )
    }
}

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swift fibo_sw.swift 
Ups!

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swift fibo_sw.swift 30
1346269
Вложения
hello.swift
(25 байт) 88 скачиваний
fibo_sw.swift
(423 байт) 92 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 14:40

Ещё один способ проверять и исполнять код Swift - это онлайн ресурс
Изображение

Здесь, как видно, представлена версия Swift 3.0.1.
Вложения
r2.png

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 14:56

Olej писал(а): Поэтому есть у меня подозрение, что это можно разархивировать с равным успехом (или неуспехом) в любом Linux.
Как оказалось, это не так...

Код: Выделить всё

[olej@dell ~]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 25 (Twenty Five)
Release:	25
Codename:	TwentyFive

Код: Выделить всё

[olej@dell ~]$ swift --help
swift: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
Это будет происходить после любого запуска swift с любыми ключами.
После установки:

Код: Выделить всё

[olej@dell speed.10]$ dnf provides '*/libatomic.so*'
Последняя проверка окончания срока действия метаданных: 13 days, 0:50:04 назад, Sat Jan 20 23:36:15 2018.
gcc-6.4.1-1.fc25.x86_64 : Various compilers (C, C++, Objective-C, Java, ...)
Источник: @System
gcc-6.4.1-1.fc25.i686 : Various compilers (C, C++, Objective-C, Java, ...)
Источник: updates
gcc-6.4.1-1.fc25.x86_64 : Various compilers (C, C++, Objective-C, Java, ...)
Источник: updates
libatomic-6.4.1-1.fc25.i686 : The GNU Atomic library
Источник: updates
libatomic-6.4.1-1.fc25.x86_64 : The GNU Atomic library
Источник: updates
gcc-6.2.1-2.fc25.i686 : Various compilers (C, C++, Objective-C, Java, ...)
Источник: fedora
gcc-6.2.1-2.fc25.x86_64 : Various compilers (C, C++, Objective-C, Java, ...)
Источник: fedora
libatomic-6.2.1-2.fc25.i686 : The GNU Atomic library
Источник: fedora
libatomic-6.2.1-2.fc25.x86_64 : The GNU Atomic library
Источник: fedora

Код: Выделить всё

[olej@dell speed.10]$ sudo dnf install libatomic
[sudo] пароль для olej: 
Последняя проверка окончания срока действия метаданных: 1:18:17 назад, Sat Feb  3 00:00:36 2018.
Зависимости разрешены.
=========================================================================================================================
 Package                      Архитектура               Версия                          Репозиторий                Размер
=========================================================================================================================
Установка:
 libatomic                    x86_64                    6.4.1-1.fc25                    updates                     42 k

Результат операции
=========================================================================================================================
Установка  1 Пакет

Объем загрузки: 42 k
Объем изменений: 26 k
Продолжить? [д/Н]: y
Загрузка пакетов:
libatomic-6.4.1-1.fc25.x86_64.rpm                                                        186 kB/s |  42 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                              37 kB/s |  42 kB     00:01     
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Установка    : libatomic-6.4.1-1.fc25.x86_64                                                                       1/1 
  Проверка     : libatomic-6.4.1-1.fc25.x86_64                                                                       1/1 

Установлено:
  libatomic.x86_64 6.4.1-1.fc25                                                                                          

Выполнено!
После этого:

Код: Выделить всё

[olej@dell ~]$ swift --help
swift: error while loading shared libraries: libedit.so.2: cannot open shared object file: No such file or directory
Теперь ему не хватает ещё одной библиотеки: libedit.so.2

Конечно, по опыту установки многих других проектов, можно последовательными приближениями установить все библиотеки, что ему надо...
Только это занудной занятие.
И это говорит о том, что обещанная реализация Swift for Linux собрана через задницу, "абы було" :evil:
Насколько хорошо Oracle, для сравнения, собирает установочные пакеты VirtualBox, под Linux, который для них тоже является не основной средой - настолько же здесь Apple делает это говённо!

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Swift под Linux

Непрочитанное сообщение Olej » 03 фев 2018, 15:29

Olej писал(а): Вот его (файл hello.swift) и станем использовать в качестве тестового пробника.
Как показано на картинке, запускать любой файл .swift (после установки Swift, естественно) - так:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swift hello.swift 
Hello, world!
Но! к сожалению, компиляция в автономное приложение завершается с ошибкой:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc -v -ohello hello.swift 
Swift version 4.0.3 (swift-4.0.3-RELEASE)
Target: x86_64-unknown-linux-gnu
/usr/local/bin/swift -frontend -c -primary-file hello.swift -target x86_64-unknown-linux-gnu -disable-objc-interop -color-diagnostics -module-name hello -o /tmp/hello-bbdefd.o
/usr/local/bin/swift-autolink-extract /tmp/hello-bbdefd.o -o /tmp/hello-d6a867.autolink
/usr/bin/clang++ -fuse-ld=gold -target x86_64-unknown-linux-gnu -Xlinker -rpath -Xlinker /usr/local/lib/swift/linux /usr/local/lib/swift/linux/x86_64/swift_begin.o /tmp/hello-bbdefd.o -L /usr/local/lib/swift/linux -lswiftCore --target=x86_64-unknown-linux-gnu @/tmp/hello-d6a867.autolink /usr/local/lib/swift/linux/x86_64/swift_end.o -o hello
/usr/bin/ld.gold: error: невозможно найти -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
Во-первых, это замечательно срабатывало в версиях Swift 2.X !
Во-вторых, это ошибка последней фазы компиляции - Clang++, и ld.gold не находит Clang библиотеки libstdc++.so - это стандартная библиотека C++, но не Clang, а GCC...
И далее ... проверяем:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ cat hello.cc 
#include <iostream>
using namespace std;

int main( int argc, char **argv ) {
   cout << "Hello Clang!" << endl;
} 

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ clang++ -xc++ -stdlib=libstdc++ hello.cc -o hellocc
hello.cc:3:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ clang++ -xc++ -stdlib=libc++ hello.cc -o hellocc

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./hellocc 
Hello Clang!
Clang не находит GCC библиотеку libstdc++, но находит свою библиотеку libc++.
Правда, это после того, как я установил раньше:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ apt install libc++-dev
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  libc++-helpers libc++1
НОВЫЕ пакеты, которые будут установлены:
  libc++-dev libc++-helpers libc++1
обновлено 0, установлено 3 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 786 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 6.881 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 libc++1 amd64 3.7.0-1ubuntu0.1 [225 kB]
Пол:2 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 libc++-helpers all 3.7.0-1ubuntu0.1 [5.308 B]
Пол:3 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 libc++-dev amd64 3.7.0-1ubuntu0.1 [555 kB]
Получено 786 kБ за 0с (1.008 kБ/c)
Выбор ранее не выбранного пакета libc++1:amd64.
(Чтение базы данных … на данный момент установлено 673666 файлов и каталогов.)
Подготовка к распаковке …/libc++1_3.7.0-1ubuntu0.1_amd64.deb …
Распаковывается libc++1:amd64 (3.7.0-1ubuntu0.1) …
Выбор ранее не выбранного пакета libc++-helpers.
Подготовка к распаковке …/libc++-helpers_3.7.0-1ubuntu0.1_all.deb …
Распаковывается libc++-helpers (3.7.0-1ubuntu0.1) …
Выбор ранее не выбранного пакета libc++-dev:amd64.
Подготовка к распаковке …/libc++-dev_3.7.0-1ubuntu0.1_amd64.deb …
Распаковывается libc++-dev:amd64 (3.7.0-1ubuntu0.1) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu10) …
Настраивается пакет libc++1:amd64 (3.7.0-1ubuntu0.1) …
Настраивается пакет libc++-helpers (3.7.0-1ubuntu0.1) …
Настраивается пакет libc++-dev:amd64 (3.7.0-1ubuntu0.1) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu10) …

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей