LINUX.ORG.RU
ФорумTalks

Лёгкие иррациональные радости использования Swift вместо C++

 , ,


1

3

В Swift 6, помимо всего прочего, была добавлена официальная поддержка Debian, Fedora и Ubuntu. Стало интересно. :)
Что ж, пробуем, следуя инструкциям:

$ mkdir hello
$ cd hello
$ swift package init --type executable
$ cat Sources/main.swift
// The Swift Programming Language
// https://docs.swift.org/swift-book

print("Hello, world!")
$ swift build --swift-sdk x86_64-swift-linux-musl -c release
$ stat .build/release/hello

Size: 42517368

$ ldd .build/release/hello

not a dynamic executable

$ strip .build/release/hello
$ stat .build/release/hello

Size: 6667136

$ .build/release/hello

Hello, world!

Продолжаю наблюдения. :)


Пакеты:
https://swiftpackageindex.com
https://swiftinit.org


Документация:
https://www.swift.org/documentation
https://swiftdoc.org
https://www.swift.org/swift-evolution – эволюция языка

★★★★★

Последнее исправление: dataman (всего исправлений: 6)

Ответ на: комментарий от cobold

Попозже, нужно поужинать.
У одного уже бомбануло. :)

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от cobold

Где размер плюсового бинаря?

#include <print>
int main ()
{
    std::println("Hello, world!");
}
$ clang++-20 -std=c++23 -stdlib=libc++ -fuse-ld=lld -static -Os hello_print.cpp -o hello
$ stat hello

Size: 2059816

$ strip hello
$ stat hello

Size: 1689408

$ clang++-20 -std=c++23 -stdlib=libc++ -fuse-ld=lld -static -lllvmlibc -Os hello_print.cpp -o hello
$ stat hello

Size: 2246024

$ strip hello
$ stat hello

Size: 1864000

Наверняка в ключах напутал, но пока так, без musl.

dataman ★★★★★
() автор топика
Ответ на: комментарий от static_lab

Спасибо, упустил. Результат был с этим ключом.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

-static

Нереалистичное сравнение, потому что мало кто линкует стандартную библиотеку C++ статически в бинарник. Chrome и Firefox, например, не линкуют. Если уже пошло по нестандартным путям, залинкуй к helloworld’у какого-нибудь мусора на пару гигов, чтобы прям вообще до абсурда довести.

Это не говоря о том, что сравнивать helloworld’ы изначально глупо.

i-rinat ★★★★★
()
apt install musl-dev musl-tools
curl https://www.lua.org/ftp/lua-5.4.7.tar.gz -o lua.tar.gz
tar -xvzf lua.tar.gz && cd lua-5.4.7
make -j6 CC=musl-gcc
touch hello.c
#include "../lua-5.4.7/src/lua.h"
#include "../lua-5.4.7/src/lualib.h"
#include "../lua-5.4.7/src/lauxlib.h"
int main(int argc, char **argv)
{
    const char *  src = "print('Hello, World!')";
    lua_State  * L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dostring(L,src);
    return 0;
}
musl-gcc -static hello.c -L./src/ -llua -I./src -lm
stat ./a.out

Размер: 395584

ldd ./a.out

не является динамическим исполняемым файлом

strip ./a.out
stat ./a.out

Размер: 346016

./a.out

Hello, World!

В 19 раз меньше.




#include <stdio.h>
int main(int argc, char **argv)
{
    printf("Hello, World!\n");
    return 0;
}
musl-gcc -static hello.c 
stat ./a.out 

Размер: 24672

strip ./a.out 
stat ./a.out 

Размер: 17800

ldd ./a.out

не является динамическим исполняемым файлом

./a.out 

Hello, World!

В 347 раз меньше


💞C³⁴⁷🕺💃Lua¹⁹💞

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от dataman

Нет, когда впервые «щупаешь» язык.

Тогда, диалекты Ассемблера - впереди планеты всей. С ними, возможно, могут посоревноваться только реализации напрямую в машинных кодах…

QsUPt7S ★★
()
Ответ на: комментарий от QsUPt7S

Ассемблер уже был, ещё в MS-DOS. Больше не хочу. :)

dataman ★★★★★
() автор топика

Мне вот интересно что же там в 6 Мб располагается такого необходимого для запуска «Hello, world» и почему это нельзя вырезать?

Ну т.е. казалось бы всё это в конечном счёте всё равно системный вызов write, ничего сверхъестественного. Так какими такими окольными путями надо вызывать этот write чтобы инфраструктура для этого заняла 6 Мб?

И другой вопрос как она умудряется если эта инфраструктура действительно задействована в этом коде не тормозить в 1000 раз больше?

unDEFER ★★★★★
()

свифт прекрасен! По следам вот этого моего топика taskwarrior tray application для macos решил я не искать легких путей и запилить свой костыль с блекджеком и мамзелями. Собственно вот так оно выглядит https://i.postimg.cc/m2K9dYBc/Screenshot-2024-09-27-at-10-02-04.png - страшненько, конечно, но это ровно 150 строк кода. Что меня удивило, это то что SwiftUI практически один-в-один это Android Jetpack. Полез в википедию, оказалось что SwiftUI вышел раньше, получается, что гугл не стесняясь скопировали эппловский фреймворк.

FishHook
()
Ответ на: комментарий от LINUX-ORG-RU

За всю свою историю apple не родила ни одного продукта, пригодного к использованию нормальным человеком. Схрена ли эта поделка должна быть лучше?

P.S. Клоуны-яблодрочеры, отмечаемся, не стесняемся.

quwy
()
Последнее исправление: quwy (всего исправлений: 1)
Ответ на: комментарий от quwy

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

FishHook
()
Ответ на: комментарий от FishHook

Странная логика. Непригодное для использования не означает, что любой, кому приходится, – ненормальный.

Винда 11 тоже не пригодна для использования нормальным человеком, но мне приходится ее использовать по работе.

А вот по отношению к тем, кто добровольно в это влез, действительно есть некоторые подозрения.

quwy
()
Ответ на: комментарий от bender

ассемблер - это человекочитаемая запись машинного кода

Не совсем. Ассемблер - это мнемоники машинных команд, совмещённые с «калькулятором» адресов. Сами команды, как правило, имеют большее число возможных выражений, сохраняющих исходную семантику, чем допускает конкретный диалект Ассемблера, при его «стандартном использовании». Хотя, стоит отметить, многие диалекты Ассемблера позволяют использовать вставки непосредственно слов машинного языка, выраженных в шестнадцатеричных кодах.

QsUPt7S ★★
()
Последнее исправление: QsUPt7S (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Размер: 17800

Что ж, побей это :) «Перспективные» и малоизвестные проекты ЯП (комментарий)

// $ wisnia hello.wsn
// $ strip не нужен :)
// $ stat a.out
// $ wisnia hello.wsn -d ir

fn main() {
    print("Hello, world!\n");
}

Size: 252

Чуток ужал таблицу ir:

              Target          |    Op    |               Arg1                 |     Arg2
------------------------------+----------+------------------------------------+-----------------
                 %%           |   push   |         RDX          %% REGISTER   |      %%
                 %%           |   push   |         RSI          %% REGISTER   |      %%
      RDX        %% REGISTER  |    <-    |         14           %% LIT_INT    |      %%
      RSI        %% REGISTER  |    <-    | "Hello, world!\n\0"  %% LIT_STR    |      %%
                 %%           |   push   |         RAX          %% REGISTER   |      %%
                 %%           |   push   |         RCX          %% REGISTER   |      %%
                 %%           |   push   |         R11          %% REGISTER   |      %%
                 %%           |   push   |         RDI          %% REGISTER   |      %%
      RAX        %% REGISTER  |    <-    |          1           %% LIT_INT    |      %%
      RDI        %% REGISTER  |    <-    |          1           %% LIT_INT    |      %%
                 %%           |  syscall |                      %%            |      %%
                 %%           |   pop    |         RDI          %% REGISTER   |      %%
                 %%           |   pop    |         R11          %% REGISTER   |      %%
                 %%           |   pop    |         RCX          %% REGISTER   |      %%
                 %%           |   pop    |         RAX          %% REGISTER   |      %%
                 %%           |   pop    |         RSI          %% REGISTER   |      %%
                 %%           |   pop    |         RDX          %% REGISTER   |      %%
 __builtin_exit  %% IDENT_VOID|   call   |                      %%            |      %%
                 %%           |   label  |   __builtin_exit     %% IDENT_VOID |      %%
                 %%           |   xor    |         RDI          %% REGISTER   | RDI  %% REGISTER
      RAX        %% REGISTER  |    <-    |         60           %% LIT_INT    |      %%
                 %%           |  syscall |                      %%            |      %%

Правда, на большее он почти не годится. :)
Ему бы добавить больше разных int’ов, указатели, функцию syscall(int, ...)
Надо написать автору. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от FishHook

Так и есть. Любой, носящий яблоко - мужеложец изначально, либо таковым становится

DumLemming ★★
()
Ответ на: комментарий от quwy

Непригодное для использования не означает, что любой, кому приходится, – ненормальный.

С яблоком не всё так однозначно. У них есть мастера психологических операций, у любого пользователя яблока поражается мозг

DumLemming ★★
()
Ответ на: комментарий от C

На свифте красивый и быстрый код получается, но что с лицензией?

Вся «красота» и «быстрота» swift хорошо видна в крашлогах какого-нибудь Xcode или в родных Apple Notes, Reminder при, казалось бы, стандартных операциях.

andreyu ★★★★★
()
Ответ на: комментарий от quwy

P.S. Клоуны-яблодрочеры, отмечаемся, не стесняемся.

Ну так девиз эплодурней «пусть кривое и неудобное говно, зато не как у всех».

p.s. На правах эплопользователя со стажем.

andreyu ★★★★★
()
Ответ на: комментарий от quwy

Я не яблодрочер, и у меня никогда не было продукции Эппл, и не планирую. Но вот объясните мне, если сами яблопользователи говорят, как удобно им в маках, и как всё хреново в винде, как так получается? Конечно, можно сказать, что они все за зомбированы, но это аргумент сектантов, мол все, кто не с нами, слуги сатаны.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)

раз уж пьянка про свифт

не могу не рассказать про мелкий ембедабл язычек с синтаксисом похожим на свифт, но написанном на настолько голом Си без зависимостей, что даже собирается с -static на обскурщине типа опенбсд или эльбрусовским закрытым коньпелятором, гонять на нем CGI - ЯИЫ!

https://github.com/marcobambini/gravity

nerfur ★★★
()
Ответ на: комментарий от seiken

Это действительно удобно. Реально. Если деактивировать мозг и тупо потреблять сервисы экосистемы, напрочь отключив собственные потребности, это удобно. Все эти эйртаги, эйрдропы, аппсторы и далее по списку.

Но не всем подходит. Точнее, подходит только тем, кто вовремя отключил мозг и нырнул в пучину. У остальных же вызывает сильнейшее отторжение, как у иммунной системы, в зону контроля которой попал чуждый организм. Все просто.

quwy
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.