Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 25 май 2018, 17:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 17:35 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
Clang не находит GCC библиотеку libstdc++, но находит свою библиотеку libc++.

Это как-то, возможно, связано с множественными установками (gccgo, golang и мн.др.) и обновлениями системы (Mint 18.1 -> 18.3) ... возможно, с установками альтернатив...
Получается такая засада:
- в RPM-дистрибутиве Fedora всё с Clang замечательно, но не устанавливается Swift, потому что Apple подготовили его через задницу...
- в DEB-дистрибутиве Mint 18.3 Swift как исполняющая среда работает нормально, но компиляция не идёт из-за неполадок с Clang библиотек и путей

Чтобы не мудрить с поисками неисправности в Mint 18.3, ... :
1. устанавливаю чистую Mint 18.3, но в VirtualBox, см. Mint 18 и далее....
2. разворачиваю и выверяю там Clang и библиотеки...
3. разворачиваю там Swift...
4. тесты


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 19:16 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
2. разворачиваю и выверяю там Clang и библиотеки...

Всё, что касается корректной установки Clang и всего ему требующегося, с проверкой работоспособности, подробно описано здесь: Clang.
Повторите всё то же самое - и будет вам счастье! :lol:


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 19:56 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
Olej писал(а):
2. разворачиваю и выверяю там Clang и библиотеки...

Всё, что касается корректной установки Clang и всего ему требующегося, с проверкой работоспособности, подробно описано здесь: Clang.
Повторите всё то же самое - и будет вам счастье! :lol:

Переходим к 3-му пункту марлезонского балета ;-)
Olej писал(а):
3. разворачиваю там Swift...

Можно ли это сделать в RPM-дистрибутиве и как ... я теперь уже не знаю (пока не знаю?).
А в DEB-дистрибутиве начинаем с уточнения версии дистрибутива:
Код:
olej@olej-VirtualBox ~/2018_WORK $ uname -a
Linux olej-VirtualBox 4.10.0-38-generic #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Интерес здесь представляет 16.04.1 - это кодовая база, хотя это и не Ubuntu.
Скачиваем соответствующий архив:
Цитата:
Releases
Swift 4.0.3
Ubuntu 16.10 December 5, 2017
Ubuntu 16.04 December 5, 2017
Ubuntu 14.04 December 5, 2017

Альтернатив там совсем немного... как я предполагаю, с развитием версии Swift - 3 последних релиза Ubuntu. Или, может кому повезёт, и это заработает в другой версии...
Код:
[olej@dell Language]$ ls -l swift-4.0.3-RELEASE-ubuntu16.04.tar.gz
-rw-rw-r-- 1 olej olej 167297070 фев  1 15:29 swift-4.0.3-RELEASE-ubuntu16.04.tar.gz

Архив так себе ... не маленький.
Разархивируем в любой каталог.
Код:
olej@olej-VirtualBox ~/Загрузки/Language $ tar -zxvf swift-4.0.3-RELEASE-ubuntu16.04.tar.gz
swift-4.0.3-RELEASE-ubuntu16.04/usr/
...

Код:
olej@olej-VirtualBox ~/Загрузки/Language $ 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

Переношу в рабочий каталог с коротким именем:
Код:
olej@olej-VirtualBox ~/Загрузки/Language $ mv swift-4.0.3-RELEASE-ubuntu16.04 ~/swift

Добавляем путь в $PATH ... любым способом, например, дописав в ~/.bashrc :
Код:
olej@olej-VirtualBox ~ $ tail -n2 .bashrc
export PATH=~/swift/usr/bin:$PATH

Запускаем новый терминал (вкладку):
Код:
olej@olej-VirtualBox ~ $ echo $PATH
/home/olej/swift/usr/bin:/home/olej/bin:/home/olej/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

olej@olej-VirtualBox ~ $ which swift
/home/olej/swift/usr/bin/swift

olej@olej-VirtualBox ~ $ swift --version
Swift version 4.0.3 (swift-4.0.3-RELEASE)
Target: x86_64-unknown-linux-gnu


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 20:33 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Проверяем, в любом рабочем каталоге:
Код:
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ swift hello.swift
Hello, world!

А теперь компиляция автономного приложения:
Код:
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc hello.swift -o hellosw

olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ ls -l hellosw
-rwxrwxr-x 1 olej olej 10816 Фев  4 15:50 hellosw

olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ file hellosw
hellosw: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, not stripped

olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./hellosw
Hello, world!


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 22:51 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):

Clang не находит GCC библиотеку libstdc++, но находит свою библиотеку libc++.

Удалось ... с большим трудом! :-( разобраться что здесь происходит! Фу-у-у-ух! ;-)
1. При экспериментах с языком Go apt-get установил последнюю версию 6.0 gccgo:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ gccgo --version
gccgo (Ubuntu 6.0.1-0ubuntu1) 6.0.0 20160414 (experimental) [trunk revision 234994]
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2. При том, что основной компилятор GCC установлен в версии 5.4:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

И как-то эти 2 версии почти одного и того же - намудрячили с путями и библиотеками...


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 22:56 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
И как-то эти 2 версии почти одного и того же - намудрячили с путями и библиотеками...

Как лечим?
1. Удаляю gccgo 6.0 :
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ apt remove gccgo
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  gccgo-6 libgo9
Для их удаления используйте «sudo apt autoremove».
Пакеты, которые будут УДАЛЕНЫ:
  gccgo
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 1 пакетов, и 0 пакетов не обновлено.
После данной операции, объём занятого дискового пространства уменьшится на 13,3 kB.
Хотите продолжить? [Д/н] y
(Чтение базы данных … на данный момент установлено 674363 файла и каталога.)
Удаляется gccgo (4:6-20160210-1ubuntu1) …
Обрабатываются триггеры для man-db (2.7.5-1) …

2. Устанавливаю (он мне таки нужен! ;-) ) gccgo согласованной версии 5.4:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ apt install gccgo-5
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  gccgo-6 libgo9
Для их удаления используйте «sudo apt autoremove».
Будут установлены следующие дополнительные пакеты:
  libgo7
Предлагаемые пакеты:
  gccgo-5-doc libgo7-dbg
НОВЫЕ пакеты, которые будут установлены:
  gccgo-5 libgo7
обновлено 0, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 19,5 MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 107 MB.
Хотите продолжить? [Д/н] y
Пол:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgo7 amd64 5.4.0-6ubuntu1~16.04.6 [6.401 kB]
Пол:2 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 gccgo-5 amd64 5.4.0-6ubuntu1~16.04.6 [13,1 MB]
Получено 19,5 MБ за 7с (2.577 kБ/c)                                                                                                     
Выбор ранее не выбранного пакета libgo7:amd64.
(Чтение базы данных … на данный момент установлено 674359 файлов и каталогов.)
Подготовка к распаковке …/libgo7_5.4.0-6ubuntu1~16.04.6_amd64.deb …
Распаковывается libgo7:amd64 (5.4.0-6ubuntu1~16.04.6) …
Выбор ранее не выбранного пакета gccgo-5.
Подготовка к распаковке …/gccgo-5_5.4.0-6ubuntu1~16.04.6_amd64.deb …
Распаковывается gccgo-5 (5.4.0-6ubuntu1~16.04.6) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu10) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Настраивается пакет libgo7:amd64 (5.4.0-6ubuntu1~16.04.6) …
Настраивается пакет gccgo-5 (5.4.0-6ubuntu1~16.04.6) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu10) …

3. Переустанавливаю (обновляю) GCC:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ apt reinstall g++
Следующие пакеты будут ПЕРЕУСТАНОВЛЕНЫ:         
  g++
Следующие пакеты будут УДАЛЕНЫ:
  gccgo-6{u} libgo9{u}
0 пакетов обновлено, 0 установлено новых, 1 переустановлено, 2 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 1.504 Б архивов. После распаковки освободится 336 MБ.
Хотите продолжить? [Y/n/?] y
Получено: 1 http://archive.ubuntu.com/ubuntu xenial/main amd64 g++ amd64 4:5.3.1-1ubuntu1 [1.504 B]
Получено 1.504 Б в 0с (6.403 Б/с)
(Чтение базы данных … на данный момент установлено 674547 файлов и каталогов.)
Удаляется gccgo-6 (6.0.1-0ubuntu1) …
Удаляется libgo9:amd64 (6.0.1-0ubuntu1) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu10) …
(Чтение базы данных … на данный момент установлено 674196 файлов и каталогов.)
Подготовка к распаковке …/g++_4%3a5.3.1-1ubuntu1_amd64.deb …
Распаковывается g++ (4:5.3.1-1ubuntu1) на замену (4:5.3.1-1ubuntu1) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Настраивается пакет g++ (4:5.3.1-1ubuntu1) …                                           

4. Убеждаемся:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ clang++ -xc++ -stdlib=libstdc++ hello.cc -o hellocc

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swift hello.swift -o hellosw
Hello, world!

Фу-у-ух ... камень с души! ;-)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 04 фев 2018, 23:04 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Компиляция Swift:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc hello.swift -o hellosw

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ls -l hello* | grep x
-rwxrwxr-x 1 olej olej  8392 Фев  4 21:33 hellocc
-rwxrwxr-x 1 olej olej 10816 Фев  4 21:34 hellosw

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./hellosw
Hello, world!

Смотрю скорость (время) выполнения нагруженной программы в исполняющей системе и автономно компилированное приложение:
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc -O fibo_sw.swift -o fibo_sw

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ time ./fibo_sw 40
165580141
real   0m1.787s
user   0m1.781s
sys   0m0.004s

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ time swift fibo_sw.swift 40
165580141
real   0m1.937s
user   0m1.866s
sys   0m0.068s

Разницы почти нет ... небольшая разница - это дополнительная загрузка исполняющей системы + загрузка исходного кода + время компиляции перед запуском.


Вложения:
fibo_sw.swift [423 байт]
Скачиваний: 7
Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 09 фев 2018, 13:03 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
Фу-у-ух ... камень с души! ;-)

Теперь можно перейти к разбирательством с кодом на Swift...
Но, поскольку это тема "Swift под Linux", то тут будут некоторые отличительные особенности (сложности) ... которые я уже ощутил ... "на шкуре" ;-) :
- в Linux нас не должно интересовать ничто, относящееся в Swift к MacOS, iOS ... к их среде Xcode ... вообще ничто, относящееся к инфрасреде Apple...
- 70% обсуждений, ответов на вопросы, форумных тем и т.д. относительно Swift - будут нас отсылать к средам Apple ... для нас это - флуд, это не соответствует нашим целям, и должно быстро фильтроваться...
- ещё 10-15% обсуждений и примеров кода будут увязывать код Swift с кодом Objective-C - это тоже всё для нас мусор.
- в Linux многие вещи в Swift будут специфичнее, чем они задумывались Apple: ввод-вывод с терминала, бесполезность той большой части Swift, которая касается представлений UTF-16 для Unicode (это делалось, думаю, в угоду Microsoft ... "и Огород, на случай если Крот придёт") и др. (я ещё не всё осмотрел)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 09 фев 2018, 13:10 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
Теперь можно перейти к разбирательством с кодом на Swift...

Онлайн справочные руководства по языку, библиотекам и API для написания кода Swift (необходимые и, кажется, достаточные):

Документация языка программирования Swift на русском языке

Руководство по языку программирования Swift

Swift Standard Library
- вот этот последний, 3-й источник - это оригинальная англоязычная документация от Apple по библиотеке Swift.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: Swift под Linux
Непрочитанное сообщениеДобавлено: 09 фев 2018, 13:31 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10719
Откуда: Харьков
Olej писал(а):
Olej писал(а):
Фу-у-ух ... камень с души! ;-)

Теперь можно перейти к разбирательством с кодом на Swift...

1-я интересующая меня задача:
- ввод с терминала последовательности вещественных чисел...
- и занесение их в массив...
- с контролем ошибок ввода (не числовое значение)...
- с отработкой конца ввода, EOF - ^D ... по крайней не вываливаться на этом
Код:
/* вложенный многострочный комментарий
   /* https://developer.apple.com/documentation/swift/1641199-readline */
   /* var arr = readLine()!.characters.split(" ").map(String.init)     */
*/
while true {
   let line : String! = readLine()
   if nil == line { break } // EOF
   if line.count == 0 { break }
   let подстроки = line.split( whereSeparator: { $0 == " " } )
   var числа = [Double]()
   for элемент in подстроки {
      let x = Double( элемент )
      if x != nil {
         print( x!, terminator: " | " )
         числа.append( x! )
      }
      else {
         print( "Ups!", terminator: " | " )
      }
   }
   print()
   print( "\(числа.count) => \(числа)" )
}
print( "завершение ввода" )

Попутно проверил некоторые любопытные вещи:
- вложенные многострочные комментарии /* ... /* ... */ ... */ - что недопустимо в C/C++
- имена переменных и все другие идентификаторы - на любом языке, хоть на русском, хоть на китайском, хоть общепонятные греческие математические обозначения: ΩπμλωΨΣθαβγεϒ - как в языке Go
Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ make ad
swiftc -O ad.swift -o ad

Код:
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./ad
1 2 3 4
1.0 | 2.0 | 3.0 | 4.0 |
4 => [1.0, 2.0, 3.0, 4.0]
1 a 2 b 3 c 4 d
1.0 | Ups! | 2.0 | Ups! | 3.0 | Ups! | 4.0 | Ups! |
4 => [1.0, 2.0, 3.0, 4.0]
1234
1234.0 |
1 => [1234.0]
завершение ввода


Вложения:
ad.swift [804 байт]
Скачиваний: 7
Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.123s | 16 Queries | GZIP : On ]