Опубликован релиз языка программирования общего назначения Rust 1.60, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки)...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=56984
Все таки использование ini-подобных структур файлов (что toml в конфигах карго, что конфигов systemd) всегда фиговая идея. Они нормально работают только для двухуровневых структур данных. Чтобы прикрутить большие уровни, начинаются пляски с костылями. И понаплодили 100500 немного различающихся синтаксисов, несовместимых между собой.Любой другой формат (ямл, джейсон, да даже многословный xml) лучше по большинству параметров.
Так TOML тоже многоуровневый как и YAML.
А ты писал TOML на 3+ уровня, чтобы еще и с массивами? Я писал, и никому не желаю.
Так а что тут такого?[first.second.third]
value = []
Я иногда делаю связки по имени что бы развернуть в одноуровневый структуры для совместимости с INI, но сейчас TOML уже повсеместно стандартом стал, так что это все уже LEGACY какой-то.```
[service]
nodes = ['node-a', 'node-b', 'node-c'][node-a]
host=127.0.0.1
port=10000[node-b]
host=127.0.0.1
port=10001[node-c]
host=127.0.0.1
port=10001
```А в YAML так выше двух уровней не возникает.
Да, правда нужно знание по файлу и его настройкам, но тут возможна помощь в виде комментариев.
Да ладно, ямл - худший формат для чтения и для написания человеком. Томл на его фоне - подарок от бога.Джейсон - вообще не для людей.
Лучший же формат из тех что я видел - хокон.
Чего еще за "хокон"?
hocon тоже немного не для людей, имхо если для задачи подходит hocon - то подойдёт и jsonnetСинтаксис там похожий, но ближе к json, + есть куча полезных вещей вроде функций и миксинов (mixin в jsonnet - не просто сложение объектов)
> Джейсон - вообще не для людей.Правильно — для людей есть HJSON: https://hjson.github.io/syntax.html
> Чтобы прикрутить большие уровни, начинаются пляски с костылямиКривоголовым не дают переусложнять сущности на ровном месте, удар в спину.
А на Lua можно и математику в конфигах B-)
key=value - лучший формат.
Другой лучший формат - s-выражения.
> под покровительством независимой некоммерческой организации Rust FoundationAmazon, Google, Microsoft... Хоть бы честно писали, кто там в эту фаюндэшын входит.
>> под покровительством независимой некоммерческой организации Rust Foundation
> Amazon, Google, Microsoft... Хоть бы честно писали, кто там в эту фаюндэшын входит.Надеюсь, ты написал этот коммент из под Hurd/HaikuOS/OpenBSD?
А что такое, зайка?OS: OpenBSD 7.1 amd64
Host: SAMSUNG ELECTRONICS CO., LTD. DP700A3D/DM700A3D/DB701A3D/DP700A7D
Uptime: 1 hour, 44 mins
Packages: 420 (pkg_info)
Shell: ksh v5.2.14 99/07/13.2
Resolution: 1920x1080
DE: MATE 1.26.0
WM: Metacity (Marco)
Theme: Menta [GTK2/3]
Icons: menta [GTK2/3]
Terminal: mate-terminal
Terminal Font: Monospace 10
CPU: Intel i5-3470T (4) @ 1.600GHz
GPU: AMD TURKS (DRM 2.50.0 / 7.1, LLVM 13.0.0)
Memory: 1166MiB / 8127MiB
> SAMSUNGЭто УберСмартТВ или планшет? Если планшет, то как работает тачскрин?
>> SAMSUNG
> Это УберСмартТВ или планшет? Если планшет, то как работает тачскрин?Моноблок.
Хороший вопрос, сейчас проверил. Тачскрин на любое нажатие тыкает в правый нижний угол :) В linux он работает из коробки без калибровки.
wsconsctl
...
mouse2.type=touch-panel
mouse2.rawmode=1
mouse2.scale=0,11388,0,6272,0,0,0
mouse2.reverse_scrolling=0
mouse3.type=touch-panel
mouse3.rawmode=1
mouse3.scale=0,11388,0,6272,0,0,0
mouse3.reverse_scrolling=0
...dmesg
...
uhidev4 at uhub5 port 6 configuration 1 interface 0 "ILITEK ILITEK Multi-Touch" rev 1.10/0.02 addr 3
uhidev4: iclass 3/0, 6 report ids
uhid4 at uhidev4 reportid 2: input=0, output=0, feature=1
uhid5 at uhidev4 reportid 3: input=63, output=63, feature=0
ums2 at uhidev4 reportid 4: 1 button, tip
wsmouse2 at ums2 mux 0
ums3 at uhidev4 reportid 6: 0 buttons
wsmouse3 at ums3 mux 0
...
>>> SAMSUNG
>> Это УберСмартТВ или планшет? Если планшет, то как работает тачскрин?
> Моноблок.
> Хороший вопрос, сейчас проверил. Тачскрин на любое нажатие тыкает в правый нижний
> угол :) В linux он работает из коробки без калибровки.Ага, это с правами был затуп. Дал доступ всем /dev/wsmouse и /dev/wskbd, сейчас тачскрин нормально работает.
> Дал доступ всем /dev/wsmouse и /dev/wskbdчтоб легче было телеметрировать? :)
Продолжая троллинг: это потому что systemd нету, который даст любому нужные права, в том числе Xorg
>> Дал доступ всем /dev/wsmouse и /dev/wskbd
> чтоб легче было телеметрировать? :)
> Продолжая троллинг: это потому что systemd нету, который даст любому нужные права,
> в том числе XorgНе знаю, но если набрать wsconsctl от юзера, то видит только первую мышь, а на три остальные не хватает прав. Видимо, чтобы 4 мыши поддерживались, нужно OpenBSD Enterprise покупать. Но я грязным хаком получил доступ ко всем 4-м мышам.
> А что такое, зайка?То, что у пянгвинчико-фаундейшона - все то же самое, пративный.
> Shell: ksh v5.2.14 99/07/13.2Не пались так больше.
>> Shell: ksh v5.2.14 99/07/13.2
> Не пались так больше.Ну, спалился здесь только ты. :)
> Хороший вопрос, сейчас проверил. Тачскрин на любое нажатие тыкает в правый нижний угол :) В linux он работает из коробки без калибровки.
> Ну, спалился здесь только ты. :)Ну-да, ну-да.
>> Хороший вопрос, сейчас проверил. Тачскрин на любое нажатие тыкает в правый нижний угол :) В linux он работает из коробки без калибровки.
>> Ну, спалился здесь только ты. :)
> Ну-да, ну-да.парусски переведи
>>> Хороший вопрос, сейчас проверил. Тачскрин на любое нажатие тыкает в правый нижний угол :) В linux он работает из коробки без калибровки.
>>> Ну, спалился здесь только ты. :)
>> Ну-да, ну-да.
> парусски переведиНе делай вид, что ты такой крутой опенбздшник, что не знал, работает ли тачскрин в твоем _моноблоке_. Все равно никто не поверит.
> Не делай вид, что ты такой крутой опенбздшник, что не знал, работает
> ли тачскрин в твоем _моноблоке_. Все равно никто не поверит.Первое. Как "ты написал этот комментарий из OpenBSD" доросло до "делай вид, что ты такой крутой OpenBSD-шник"?
Второе. А зачем мне знать, если я до него руками не дотягиваюсь? :) Только если пяткой комментарии дизлайкать, но там ещё попасть надо.
>> Не делай вид, что ты такой крутой опенбздшник, что не знал, работает
>> ли тачскрин в твоем _моноблоке_. Все равно никто не поверит.
> Первое. Как "ты написал этот комментарий из OpenBSD" доросло до "делай вид,
> что ты такой крутой OpenBSD-шник"?Наверное так же, как ты стал тем самым комментатором, к которому обращались?
Если уж посчитал, что подразумевалсь под "написал из под ..." не использование в качестве основной ОСи, а лишь "смотрите-смотрите как я могу!".> Второе. А зачем мне знать, если я до него руками не дотягиваюсь?
> :) Только если пяткой комментарии дизлайкать, но там ещё попасть надо.Но то, что в пингвиниксе оно "работает из коробки без калибровки", ты почему-то знаешь ...
>> Второе. А зачем мне знать, если я до него руками не дотягиваюсь?
>> :) Только если пяткой комментарии дизлайкать, но там ещё попасть надо.
> Но то, что в пингвиниксе оно "работает из коробки без калибровки", ты почему-то знаешь ...оно даже в винде работает, я тоже знаю :) то ли 8.0, то ли 8.1, уже не помню, такая фигня с плитками, кстати я так и не понял, как там меню с помощью тачскрина вызвать :)
А ещё Mozilla и HuaweiОни же в linux foundation, кроме mozilla
Мозила тут номинально, из неё их как раз и выгнали, чтобы FF меньше портили.
> чтобы FF меньше портили.Занятная опеннетная оналитека. Расскажи поподробнее, чем именно развитие/написание компилятора "портит FF".
> Мозила тут номинально, из неё их как раз и выгнали,
А ты явно не бедствуешь, если для тебя полляма на старте и (минимум) $300 000 в год за платиновый статус - "номинальность".
Странно, с такими-то "оналитическими" способностями.
> А ещё Mozilla и Huawei
> Они же в linux foundation, кроме mozillaВот взял и всю интригу испортил!
> кроме mozillaIBM c ораклем за нее. Впрочем, достаточно было бы уже и Сары из МС в списке директоров.
Самокомпилируемый компилятор это очень круто и вообще все молодцы.
Паскаль, например 😏
Паскаль, Модула, Модула-2 (Нью Паскаль) , Оберон-2 (Супер Паскаль) , Оберон-7 (Ультра Паскаль). И всё это один человек, и всё это методом самораскрутки.
Медаль Тьюринга (которая раз в жизни вручается), почётный доктор половины универов мира (и в России тоже), всемирное признание. Что он сделал не так? Или ты умнее его?
Товарищ, на ваш оберон-7 есть современные компиляторы и критичные либы?
> Товарищ, на ваш оберон-7 есть современные компиляторы и критичные либы?Скажем так: графика под Линуксом и на stm32 работает. Сеть -- это большой вопрос, но если использовать сисколы от линукса -- вопрос вполне решаем. Есть компилятор multioberon (используется в атомной промышленности, исходники открыты) -- там с высокой вероятностью есть всё минимально-необходимое.
А современными компиляторами -- дело обстоит не дурно:
https://github.com/lboasso/oberonc -- Oberon to Java
https://github.com/kekcleader/FreeOberon -- native Oberon for Win/Lin
https://github.com/bbcb/bbcp -- BlackBox Component Builder for Windows, GNU/Linux, OpenBSD, FreeBSD (ready production)
https://github.com/AntKrotov/oberon-07-compiler -- Oberon-07 compiler for x64 (Windows, Linux), x86 (Windows, Linux, KolibriOS), MSP430x{1,2}xx, STM32 Cortex-M3 (ready production)https://github.com/Vostok-space/vostok -- The translator is written in its own input language - Oberon. Generates code for:
A common subset of C and C++ compatible with gcc, clang, tcc and CompCert.
Java 1.7
JavaScript compatible with ECMAScript 5
Oberon-07, Active Oberon and Component Pascal
License is LGPL for translator's code and Apache for libraries, tests and examples.https://github.com/aixp/O7 -- Oberon → ARMv{6,7E}-M compiler, based on N. Wirth Project Oberon Oberon → RISC compiler (ready production)
https://github.com/dvdagaev/Mob -- MultiOberon is an Oberon Compiler with 3 different backends:
BlackBox Native x86 code Generator (1.7, version 1.6 with partial support)
Ofront Generated C-Language Code Translator;
LLVM representation Generator.
MultiOberon is Cross-Platform Compiler with supported platforms:Windows X86;
Windows X64;
Linux X86;
Linux X64;
Raspberry Pi OS ArmV71;
Linux Ubuntu Arm64.Ready production (with requerements nuclear power)
Хватит, или ещё погуглить в пользу забанненого в гугле?
Т.е. готовой инфраструктуры нет и нужно дёргать вызовы каждый раз руками и писать обёртки самому?
Хорошо, а детям хоть преподавать можно? Хотя бы некий условный GraphABC (или что там в паскале было) есть?
> Т.е. готовой инфраструктуры нет и нужно дёргать вызовы каждый раз руками и
> писать обёртки самому?Т.е. вы читать не умеете. Берёте BlackBox Component Builder -- там всё есть.
> Хорошо, а детям хоть преподавать можно? Хотя бы некий условный GraphABC (или
> что там в паскале было) есть?Ещё раз внимательно читайте выше. Если вам действительно нужно преподавать детям -- давно бы уже нагуглили BlackBox Component Builder Школьный. Там вам и черепашка, и готовая программа обучения, и задания для проверки пройденного материала. В подмосковном Троицке и в Новосибирске учебная программа обкатана и более чем успешно преподаётся уже с десяток лет. Если вы не в курсе, то в Троицке расположен Всеросийский ядерный научный центр. И такая научная проблема, как "дефект массы нейтрино" была решена именно на Обероне. Целый пакет символьной математики, если вы понимаете что это такое. Это есть инфраструктура или её нету?))
Нужен пакет для работы? Качаете BlackBox Component Bulder для Win/Lin/FreeBSD и работаете. Не хватает компонентов? Идёте на oberon.org и качаете что вам надо. Хотите работать с мобильного телефона? Идёте на тот же oberon.org, регистриуетесь и прям в браузере пишете код, тут же видите результат.
Что вам ещё не хватает для полного счастья?
Хорошо, чем blackbox.oberon.org отличается от blackboxframework.org и на что лучше ориентироваться?
Go рассматривают как "идеологического наследника".
Убрали самое одиозное (BEGIN, END, PROCEDURE) и развили работу с типами.
> Го
> Типы
Если бы убрать каналы (травят производительность), выполнение в пулах потоков,
то выйдет современный и удобный C, а не то что там сейчас получилось.Вся надежда на то что кто-то может допилит или стандартную библиотеку расширив до нормальных современных типов (Map, BTree, List и т.д.), базовых функций (поиск, сортировки и т.д.), кросплатформенных часов, потоков и т.д.
А то современные приемники в виде Rust и Golang это какие-то комбайны жалеко ушедшие в свою философию.
Так и выходит, что Си устарел, а Rust и Golang слишком раздутые. А место между ними занимает сейчас динмическая Java которая из-за своего JVM многим очень не по вкусу.
> Если бы убрать каналы (травят производительность), выполнение в пулах потоков,
> то выйдет современный и удобный C, а не то что там сейчас
> получилось.Нет. Это получится классический Оберон в нотации Си.
> Вся надежда на то что кто-то может допилит или стандартную библиотеку расширив
> до нормальных современных типов (Map, BTree, List и т.д.), базовых функций
> (поиск, сортировки и т.д.), кросплатформенных часов, потоков и т.д.В си такого не будет. Си был сочинён для PDP-11. И это первородный грех.
> А то современные приемники в виде Rust и Golang это какие-то комбайны
> жалеко ушедшие в свою философию.Rust нечитаем. Go -- инженерный компромисс. Далеко не идеален, но явно лучше потому что явно проще.
> Так и выходит, что Си устарел, а Rust и Golang слишком
> раздутые. А место между ними занимает сейчас динмическая Java которая из-за
> своего JVM многим очень не по вкусу.Golang по сравнению с Rust -- проще раза в три. Не выдумывайте.
Как ты сетью работать собрался из go? С raw сокетами, tcp пакетами?
> Как ты сетью работать собрался из go? С raw сокетами, tcp пакетами?Не совсем понял в чём трагедия?
Для tcp/udp есть вполне рабочая библиотека "net". Битовая арифметика — считается не хуже чем с C. Вот например обработка кусочка сетевого пакета:
"""
crc32_bytes := BUFFER.data[length-4 :]
crc32_frame := uint32(crc32_bytes[0])
crc32_frame |= uint32(crc32_bytes[1]) << 8
crc32_frame |= uint32(crc32_bytes[2]) << 16
crc32_frame |= uint32(crc32_bytes[3]) << 24
if crc32.ChecksumIEEE(BUFFER.data[:length - 4]) != crc32_frame { // Invalid CRC
if *DEBUG { xl.Debug("Invalid CRC") }
return
}
"""
* Как видим, "в лоб" (как на C) у меня перекастовать не вышло и пришлось "запинать ногами".
Но это как раз наименее удачное место обработчика (зато пример хороший). И я не специализируюсь как программист (есть же варианты пролезть через unsafe).Для raw нету готового? А вот уже́ и есть https://github.com/golang/net/blob/master/internal/socket/ra...
Поддержу троллинг.Тем временем компилятор Си в лице gcc уже так не умеет.
Что он не умеет? GCC можно собрать предыдущей версией собранного GCC.
Ну, он уже как бы написал, что поддерживает троллинг. Поэтому отвечать на его вброс не нужно.
Ладно, разжую троллинг. Для сборки gcc нужен С++.
, который есть в пакете GCC. Проблемы нет, и C, и C++ поставляются вместе одним пакетом.
Но компилятор C не собрать компилятором C.
Так, погодите, а RUST разве можно без LLVM (C++) собрать самим RUST-ом?
> Так, погодите, а RUST разве можно без LLVM (C++) собрать самим RUST-ом?Можно, разрешаю!
https://github.com/bjorn3/rustc_codegen_cranelift/blob/53bfc...https://github.com/rust-lang/rust/pull/81594
> When the LLVM backend is disabled, the llvm-project submodule is not checked out by default. This breaks the bootstrap test for cg_clif. As cg_clif doesn't support split debuginfo anyway llvm-dwp is not necessary. Other backends would likely not want to build LLVM just for llvm-dwp either.
> В пакетном менеджере cargo стабилизирована поддержка флага "--timings", включающего формирование детального отчёта о ходе сборки и времени выполнения каждого шага. Отчёт может оказаться полезен для оптимизации производительности сборочного процесса.Телеметрия - наше всё, да.
Надо бороться, но не с rust что кгб не освоила и кидает в массы чттоб вы раньше их этим не занимались.
Это плохо что cargo формирует детальный отчёт о сборке?
Чем?
Если ты не сказал явно это делать - всем.
Чем конкретно? Перечисляйте
>> В пакетном менеджере cargo стабилизирована поддержка флага "--timings", включающего формирование детального отчёта о ходе сборки и времени выполнения каждого шага. Отчёт может оказаться полезен для оптимизации производительности сборочного процесса.
> Телеметрия - наше всё, да.Где именно там телеметрия?
Тебе в рифму ответить или сам поймёшь?
>> Cargo has stabilized support for collecting information on build with the --timings flag.
>> The report is also copied to target/cargo-timings/cargo-timing.html
> Тебе в рифму ответить или сам поймёшь?Т.е. конкретики не будет, будут попукивания "в рифму" и заверения, что "это не лужа! Это такая грязевая ванна"?
Боже мой, докатились... Уже по названию флага понятно, что это такое. Для обделённых природой: это не телеметрия, а ровно то, что написано в описании флага. Отчёт сохраняется в HTML файл, а не отправляется рептилоидам на Нибиру. Такое ощущение, что местных хейтерков набирают принципиально только из детсада и реабилитационного центра для инсультников.
>> В пакетном менеджере cargo предложен новый синтаксисИграть синтаксисом у них модно?
>>> You can now use the dep: prefix in the [features] table to explicitly refer to an optional dependency without implicitly exposing it as a feature.
> Играть синтаксисом у них модно?— Вы любите Битлз?
— Да ничего особенного! Фальшивят, голоса противные...
— А что вы слушали?
— Я — ничего, но мне Рабинович напел!
Я понимаю, что сейчас просто добавили возможностей— Вы любите Битлз?
— Да, потрясающе! При каждом исполнении к песне добавляется куплет!
>> Я понимаю, что сейчас просто добавили возможностей
> — Вы любите Битлз?
> — Да, потрясающе! При каждом исполнении к песне добавляется куплет!А если кто-то вставил песню в свое произведение не расчитывая на этот куплет?
>>> Я понимаю, что сейчас просто добавили возможностей
>> — Вы любите Битлз?
>> — Да, потрясающе! При каждом исполнении к песне добавляется куплет!
> А если кто-то вставил песню в свое произведение не расчитывая на этот
> куплет?Расскажи поподробнее, что именно (и зачем) этот кто-то вставил, что оно теперь конфликтует с префиксом?
> — Вы любите Битлз?
> — Да, потрясающе! При каждом исполнении к песне добавляется куплет!Сейчас в тренде Пинк Флойд.
> Играть синтаксисом у них модно?Получается, что да.
Стоит ли учить сабж как хобби, для написания небольших утилит и программирования микроконтроллеров? Имею опыт только с Си. Или лучше в сторону Zig смотреть? Не знаю, что легче/приятнее использовать?
Написал несколько тысяч строк кода на Zig (пишу базу данных).Zig - это лучшее что случалось в системном программировании за много лет. Намного лучше С и C++.
Опыта на Rust не имею, кроме чтения критики / хвальбы и туториалов. Но он мне совсем не понравился (но лучше С и С++).
Rust скорее замена С++, Zig - замена С.
Поделитесь в чем прелесть zig?
В принципе в том как позиционируется язык всё уже описано.1. No hidden control flow. Т.е. нет exception. Нет переопределения методов. Нет конструкторов и деструкторов.
2. Error это отдельный тип и ошибки обрабатывать придётся (что-то типа Maybe / Optional, но в процедурном стиле), иначе не скомпилипуется.
3. В тестах и дебаге тебе выдадут дательный пошаговый путь где возникла ошибка и весь её путь - это ОЧЕНЬ круто, такого нигде не видел. И это не stacktrace, а error trace.
4. Тесты пишутся прямо в файле как test {...zig code...} и сразу запускаются командной zig test - ничего делать не надо. Очень поощряет test-driven программирование. Я ещё ни разу не собирал проект и не разбирался как это делать детально, а уже несколько тысяч строк работающего кода с тестами.
5. Тесты можно дебажить и все breakpoint работают в VS Code.
6. Билд система тоже на Zig, не надо учить отдельный язык синтаксис (cmake/Gradle).
7. Максимальная безопасность - все значения по умолчанию const (настоящий, а не как константная ссылка), проверки выхода за границы, и т.д. и т.п. Т.е. в отличие от Rust много проверок в runtime в Debug режиме, вместо статического доказывания системе типов, как в Rust - притом что многие проверки можно реально выполнить только в runtime.
8. Аллокатор передаётся как параметр - никаких скрытых аллокаций памяти.
9. Аллокатор std.testing.allocator отлавливает утечки - очень круто, использую в тестах
10. Отличная интероперабельность с С (не тестировал сам)defer / errdefer - крутейшая фича.
Вообще ощущение что пишешь на высокоуровневом языке, хотя Zig самый низкоуровневый из всех.
Я очень доволен. Скажу честно, расчитывал что он быстро начнёт разваливаться и я его выкину как "не смогла".
Но он превзошёл все мои ожидания даже в версии 0.10.0-dev.
Ребята очень заточены на безопасность, но в меру, без фанатизма, и на performance.
Уже добавили переносимые SIMD в язык (тип @Vector())
Это только часть, не рассказал про дженерики и вычисления в compile time.Язык очень самобытный.
Спасибо за описание!
Если по уровню обработки ошибок, их детальность и понятности, то лучше раста ничего нет. Только Elm может сравниться.Блин, да он даже в большинстве случаев показывает как исправить ошибку.
> Zig самый низкоуровневый из всех.Я не понял, это фронтенд над LLVM?
Это действительно круто. Потому что + на типе "вектор" или "массив" может быть в тысячу / миллион раз медленее чем + над обычным integer.По сути это тот самый hidden control flow, когда стоимость операции предполагается такой же или сопоставимой.
Тут ты точно знаешь что + это дёшево и только для integer и float с аппаратной поддержкой.
И потом это переопределение операторов. Его тоже нет.
А как быстро делать + на массиве, например? Не троллю, просто не разбираюсь.
Быстро не сделать. Лучшее что можно сделать - использовать SIMD инструкции. В зависимости от разрядности элементов массива от 2х до 8х можно получить.Но всё равно O(N).
Да, использует backend LLVM для оптимизации и генерации кода.
Эх! Но все равно круто, надо пристальней изучить
>Нет переопределения методов.Т.е., нельзя определить операции "+", "-", "=" для своего типа? Ну "круто", чё.
Ну как тебе сказать. Оверлоад операторов хитрож@пым програмером - даст фору любому obfuscated C code contest'у. И это вовсе даже и не фича когда охота вдуплить в логику чужого кода.
интересно, что большая часть этих пунктов есть и в rust
Много чего в Rust нет и неизвестно когда будет.Zig опережает Rust по многим пунктам. Просто не стал касаться этой темы.
В Rust основное преимущество, и оно же - недостаток, их система типов с borrow checking.
Про её ограниченность можно почитать в интернете, неплохо разбиралось. Там что-то про слабость и ограниченность аффинной системы типов.
Именно поэтому сравнивая языки, я выбрал Zig. Он более низкоуровневый. Это то что нужно для системного программирования.
Rust тоже хороший язык, по сравнению с C++. Он он как раз замена С++, и какие концепции оттуда стащили - Clone, Copy, конструкторы, деструкторы и вот это вот всё.
В Zig этого нет и не нужно. В Zig даже нет типа "строка".
> Zig опережает Rust по многим пунктам. Просто не стал касаться этой темы.А было бы интересно, если бы коснулся. Согласен с предыдущим комментатором, почти все плюсы Zig ты расписываешь, как будто Раст расхваливаешь.
>> Zig опережает Rust по многим пунктам. Просто не стал касаться этой темы.
> А было бы интересно, если бы коснулся. Согласен с предыдущим комментатором, почти
> все плюсы Zig ты расписываешь, как будто Раст расхваливаешь.А меня позабавило как он в одном пункте пишет что Зиг самый низкоуровневый из всех, когда в пункте выше написал что у Зиг больше проверок времени исполнения чем в Раст.
> А меня позабавило как он в одном пункте пишет что Зиг самый
> низкоуровневый из всех, когда в пункте выше написал что у Зиг
> больше проверок времени исполнения чем в Раст.А чего там забавного? "Сложная" система типов, те же владения, как раз позволяет более продвинутые проверки времени компиляции.
Это в теории, притом гипотетической. На практике самый быстрый код генерирует C, а не Rust.
>> больше проверок времени исполнения чем в Раст.
> Это в теории, притом гипотетической.Ты хочешь сказать, что на самом деле владения и ссылки не проверяются? От оно че ...
> На практике самый быстрый код генерирует C, а не Rust.Разве что код для очередного микробенча (что не факт https://benchmarksgame-team.pages.debian.net/benchmarksgame/... )
с гарантиями и проверками вида "Соколиный глаз посмотрел код" и "зуб даю".
Я хочу сказать то, что сказал.Эквивалентный код на С работает быстрее чем на Rust. Оптимизируется современными компиляторами лучше, ассемблерный код генерирует лучше.
Но Zig это же делает лучше C.
Все просто поверили в мантру чёрного ящика "оптимизирующего компилятора". Однако современные компиляторы достаточно слабы.
Ну умеют даже SIMD использовать, нужно ручками.
Поэтому "вот сейчас компилятор проверит всё в compile-time" и сгенерирует оптимальный код - лучше чем С - сказки это всё. Практика и куча тестов показала что это не так.
Обещали "Rust быстрее С", но не случилось.
Это факт, который глупо отрицать.
Насчёт проверок - я хочу сказать что система типов очень ограниченна.
Это круто, это лучше чем ничего, это значительно лучше чем было "до".
Zig пошёл другим путём - он делает максимальное количество проверок в runtime. Система типов значительно проще (но всё равно очень продвинутая по сравнению с С и С++). Код читать и понимать значительно легче.
И как на системе типов Rust ты докажешь что нет утечек памяти? Или что вектор содержит ровно N элементов? Или ...
> Я хочу сказать то, что сказал.
> Эквивалентный код на С работает быстрее чем на Rust. Оптимизируется современными компиляторами
> лучше, ассемблерный код генерирует лучше.Ты просто смешал в кучу _проверки_ времени компиляции и оптимизацию - и оспорил какие-то, выдуманные тобой же, якобы мои "утверждения".
> Но Zig это же делает лучше C.
> Все просто поверили в мантру чёрного ящика "оптимизирующего компилятора". Однако современные
> компиляторы достаточно слабы.Опять сам придумал, сам опроверг. Попробуй использовать gcc 3.x и потом порассуждать еще раз про "слабость".
> Ну умеют даже SIMD использовать, нужно ручками.
> Поэтому "вот сейчас компилятор проверит всё в compile-time" и сгенерирует оптимальный код
> - лучше чем С - сказки это всё. Практика и куча тестов показала что это не так....
Я ж говорю - "смешались в кучу кони, люди". Извини, но мне лень спорить с твоими фантазиями и додумками.
> Но Zig это же делает лучше C.Нельзя ли примеры с конкретными асмовыми листингами?
> Все просто поверили в мантру чёрного ящика "оптимизирующего компилятора". Однако современные
> компиляторы достаточно слабы.Вообще-то с LTO он довольно крут. Иногда например умудряется выпилить довольно навернутое вычисление и проверки, заменив солидный кусок парой регистровых операций.
> Ну умеют даже SIMD использовать, нужно ручками.
А он не у всех таргетов есть, увеличивает в разы контекст, использование стэка и времена переключений, так что в системном программировании, где зачастую надо работать с минимальными допущениями это скорее дурной тон. Или premature optimization, который root of all evil. К тому же там все не так просто и у simd обычно есть специфичные требования (например выравнивание). Их выполнения и подготовка окружения к соответствю им не бесплатны: больше RAM жрется и если то что есть сразу в требования не лезло надо дополнительный код, жирнее и медленнее оригинала. Сетап этого может иногда отыграть взад. А настоящие гуру - те кто без всякого SIMD может в скорость железа упереться, как LZ4 например.
Есть вещи на которые это не распостраняется. Но их немного. Типа memcpy в стандартной либе. Но даже там переросточный glibc в сях например - да, быстрый, но если размер кода интересовал, эта быстрота дорого обходится: большая платформозависимая функция. Много кода разом. А если было много мелких операций оно еще и проиграть более простым может.
> Обещали "Rust быстрее С", но не случилось.
В идеале си может код который даже на голом асме не обставишь из-за глобальных оптимизаций. Реально компилятор иногда глупит, очевидно имея свои взгляды на косты операций. Поэтому вот тут мы вам критичный кусок испортим в разы, зато вон там (куда менее критичный) код гораздо лучше из-за этого. В этом случае если это было важно кодер может выругаться и написать кусок на асме. Втопив в разы.
> Это факт, который глупо отрицать.
А они что, волшебники?
> Насчёт проверок - я хочу сказать что система типов очень ограниченна.
> Это круто, это лучше чем ничего, это значительно лучше чем было "до".Тут можно поспорить. Хруст пытается рыбку съесть и на ... сесть ценой заставления кодера все нудно аннотировать. Это не имеет костов в ран тайм но не дает кодеру забить на явный баг.
> Zig пошёл другим путём - он делает максимальное количество проверок в runtime.
К сожалению в отличие от того что делает Rust это отливается в более жирный и медленный код. А без этого - отпадают гарантии.
> Система типов значительно проще (но всё равно очень продвинутая по сравнению
> с С и С++). Код читать и понимать значительно легче.
> И как на системе типов Rust ты докажешь что нет утечек памяти?
> Или что вектор содержит ровно N элементов? Или ...Они решая одни проблемы изобрели много новых. А си хорош тем что проблем относительно немного и они хорошо известны.
>> Ну умеют даже SIMD использовать, нужно ручками.
> А он не у всех таргетов есть, увеличивает в разы контекст, использованиеНе, это конечно забавно, когда один любитель приписывания своих фантазий решил поспорить с другим (надо было запастись попкорном). Но лично у меня еще gcc5 -O3 для amd64 разворачивал
int vec1[100];
int vec2[100];
...
for(int i=0;i<100;i++) vec2[i]=vec1[i]+vec2[i];
в
.L3:
movdqa xmm0, XMMWORD PTR [rbp+0+rax]
paddd xmm0, XMMWORD PTR [rbx+rax]
movaps XMMWORD PTR [rbx+rax], xmm0
add rax, 16
cmp rax, 400
jne .L3И это, подписывайся как нибудь, если уж тоже влезаешь в обсуждение с таким же ником.
Да, только все библиотеки высокопроизводительные используют ручные компиляторно-специфичные интрисинки.Так почему же? Может потому что SIMD он впихнет в самых примитивных случаях? И шаг вправо, шаг влево и компилятор уже того... сложил ручки.
Ваш пример тому не опровержение, а доказательство. Это всё на просторах интернета неплохо разобрано.
Увы, магией, компиляторы не обладают.
>> А он не у всех таргетов есть, увеличивает в разы контекст, использование
> Не, это конечно забавно, когда один любитель приписывания своих фантазий решил поспорить
> с другим (надо было запастись попкорном). Но лично у меня еще
> gcc5 -O3 для amd64 разворачивалА теперь смотрим во что разворачивается сохранение подобных контекстов при случае. При переключении задач тоже придется. Как и регистры FPU еще. Посмотрим на размер контекста задачи и подхоренеем. А если захочется low latency кернел - тыщу раз в секунду такие блоки таскать уже и не нулевой оверхед. Это же актуально при вызове множества функций и т.п..
Не забываем включить мозги. Код бывает разный. И там удобны и хороши разные вещи, серебряных пуль не бывает. Аксиома: чем больше регистров задействуеися - тем жирнее контекст. И в зависимости от кода и алгоритма результат - очень варьируется. Может быть и профит и пролет.
А тот код - прям так может и работать, а попробуйте это указателем сделать (вы же не собираетесь int[100] передавать дальше значением, задвигая про эффективность?!) - и узнаете много нового и интересного про simd, alignment и в чем там прикол. У simd есть довольно специфичные требования к выравниванию адресов и веселые приколы если это не выполняется.
>
> int vec1[100];
> int vec2[100];
> ...
> for(int i=0;i<100;i++) vec2[i]=vec1[i]+vec2[i];
>Ну да, ну да, только отложенных грабель в этом коде около дюжины разложено. На всех уровнях. Шажок в сторону и бомбанет этот код, там или тут. И с точки зрения статического анализа и декларации намерений такой код - дно. Начиная прямо с (signed) индекса массива.
> И это, подписывайся как нибудь, если уж тоже влезаешь в обсуждение с таким же ником.
А нафига? Есть некие мысли, их и обсуждаем.
> А теперь смотрим во что разворачивается сохранение подобных контекстов при случае. При
> переключении задач тоже придется. Как и регистры FPU еще. Посмотрим наОпять оспорил свои фатназии. Тезис был "компилятор не умеет, нужно ручками", а не "оно может быть не эффективным".
> А тот код - прям так может и работать, а попробуйте это
> указателем сделать (вы же не собираетесь int[100] передавать дальше значением, задвигая
> про эффективность?!) - и узнаете много нового и интересного про simd,
> alignment и в чем там прикол. У simd есть довольно специфичные
> требования к выравниванию адресов и веселые приколы если это не выполняется.Особо забавно оспаривание своих же фантазий анонимом в контексте опыта написания нехилых кусков SIMD еще ручками, в асме ...
>> И это, подписывайся как нибудь, если уж тоже влезаешь в обсуждение с таким же ником.
> А нафига? Есть некие мысли, их и обсуждаем.А то, что до #215 Аноним(-) был другой ... ну да, я и забыл - 294й считает нетикет глупым предрассудком.
Все листинги есть в GitHub Issues, и их довольно много. "Навскидку" я их не приведу, они мне попадались случайно.Одна из заявленных главных целей - быть быстрее С. Поэтому performance на втором месте.
Например, все значения по умолчанию константы - это позволяет производить дополнительные оптимизации.
Параметры функции могут быть значениями или ссылками - это выбирает оптимизирующий компилятор компилятор.
@Vector для SIMD, а если SIMD не поддерживаются то будет fallback на обычный вектор, т.е. поэлементное сравнение.
inline for, calling conventions можно выбирать для каждой функции.
Там куча всего есть, что делает его именно системным низкоуровневым, чего С и в помине не может.
Про то что SIMD что-то там увеличивает...это конечно требует серьезных пруфов. Жду.
Но никто не заставляет их использовать. Не хочешь - не используй.
И нет, конструкции языка переводятся в инструкции процессору. Если у процессора есть SIMD, который может делать до 8х ускорения, а язык программирования не знает об этом без хаков, для конкретного компилятора... скажем мягко...нет, это не преимущество.
Архитектур которые поддерживает Zig куча. Спасибо LLVM. И нет, это не делает язык более "системным", как вы сказали.
Может для какого-то embedded, и плат нужны отдельные подархитектуры и компиляторы, которых нет в LLVM. Возможно, не знаю. Я не железячник.
Но это либо совсем никому не нужно, либо вопросы к вендору. Архитектуру в LLVM можно добавить, и это делали не раз.
Про то что Rust не имеет якобы костов в runtime из-за якобы крутых проверок - я хотел бы увидеть доказательства. Например, как он делает проверки выхода за границы массива? Вы опять это пишите, а доказательства где?
Rust проверяет корректность некоторых конструкций, довольно ограниченную. Просто из "у Rust такая крутая система типов, что он теоретически МОЖЕТ делать более продвинутые оптимизации" это превратилось на просторах интернета в факт, бездоказательный.
Или Rust умеет проверять переполнение float?
> Все листинги есть в GitHub Issues, и их довольно много. "Навскидку" я
> их не приведу, они мне попадались случайно.И даже ссылки на гитхаб не дадите? А так - алгоритмов и процовых архитектур много и вот так огульно утверждать что X быстрее Y и это цель - ну, так себе затея. Разве что чисто статистически в совсем явных случаях, типа сказав что "си быстрее питона" вы врядли особо соврете. И то ярый питонист в пику накопает краевые случаи, они ничего не доказывают, но все же так бывает.
> Одна из заявленных главных целей - быть быстрее С. Поэтому performance на втором месте.
Быстрее чем си - ну, очень абстрактно. Особенно когда кодеген у обоих на одном и том же LLVM, а если параллельность хотелось и проч, сишники нынче могут OpenMP поюзать одной pragma-ой, например.
> Например, все значения по умолчанию константы - это позволяет производить дополнительные
> оптимизации.В принципе да, но у хорошего сишника тоже все что может быть констифицировано - константа, для борьбы с багами. При том это в компилтайме достаточно неплохо энфорсится и _может_ быть оптимизировано.
> Параметры функции могут быть значениями или ссылками - это выбирает оптимизирующий
> компилятор компилятор.Он также может заинлайнить все нахрен, если явно не запрошено экспортировать вон то наружу для других под стандарнтым ABI. И там вообще не будет ни параметров, ни функции, лишь несколько команд делающих
> @Vector для SIMD, а если SIMD не поддерживаются то будет fallback на
> обычный вектор, т.е. поэлементное сравнение.Да так то на самом деле неплохо, но у simd есть не совсем очевидные но отличные от ноля требования и side effects. И чем больше таких грабель тем хуже оно как именно системный тул.
> inline for, calling conventions можно выбирать для каждой функции.
Инлайн и в сях можно выбирать для каждой функции есчо.
> Там куча всего есть, что делает его именно системным низкоуровневым, чего С
> и в помине не может.Например, чего?
> Про то что SIMD что-то там увеличивает...это конечно требует серьезных пруфов. Жду.
Чем больше регистров используется тем больше регистров сохранять. Особенно при полном переключении контекста, типа переключения задачи/сохранения состояния потока и проч. А, представляете, си достаточно низкоуровневый для того чтобы на нем например корутины самому сделать было?!
> Но никто не заставляет их использовать. Не хочешь - не используй.
Вопрос не в том - а в количестве грабель которые вылезут. И в реюзабельности кода, особенно, вот именно в системных вещах. У сей очень удобно что многий код можно оттестить на писюке а потом в какой мелкий мк запихнуть. Где с инструментацией все же хуже и кривее (супротив perf/gdb/asan/ubsan/etc). Хотя, знаете, по минимуму сделать ubsan можно даже на мк. Только ваши любимые проверки индексов и математики не халявные. А в ubsan таки сделали ультралайт версию, когда при завале проверки случается всего лишь bad opcode например. Дешево, сердито, и вот именно системный обработчик исключения в мелочи таки заметит что шит произошел. А в этом зигхайле так вообще можно в системные вещи вклиниться?
> И нет, конструкции языка переводятся в инструкции процессору. Если у процессора есть
> SIMD, который может делать до 8х ускорения, а язык программирования не
> знает об этом без хаков, для конкретного компилятора... скажем мягко...нет, это
> не преимущество.Он может дать до 8x ускорения. А может дать до нескольких раз торможения. Характерный пример будет glibc'шный memcpy. Да, он на вот этом вот выезжает в разы - если условия подошли. А если caller его абы как на куче мелочи дернет с абы какими указателями, копируя по 10 байтов за вызов, оно там будет в рантайме дольше одуплять - можно ли с данным адресом SIMD вообще, или это нарушает constraints. Единственный вариант как-то это гарантировать - прибить форсированый align все и вся на гвозди, но будет другая проблема: RAM и стэка больше жрать будет. Чисто на округление адресации.
> Архитектур которые поддерживает Zig куча. Спасибо LLVM. И нет, это не делает
> язык более "системным", как вы сказали.Вообще-то LLVM поддерживает не так уж и много архитектур. По сравнению с тем же GCC например. И оптимизация у него хороша только под 1-2, на остальные они просто положили.
> Может для какого-то embedded, и плат нужны отдельные подархитектуры и компиляторы, которых
> нет в LLVM. Возможно, не знаю. Я не железячник.Если вы не это - тогда какого фига про системность рассказывать? Системность языка все эти вещи подразумевает. Ну ладно, может там хоть стандартный способ положить "эту функцию в вон ту секцию" сделали? Если уж более системное? А то в си вот это подбешивает, нестандартно и в разных компилерах по разному. И без этого фиг фирмвару или бутлоадер какой сделаешь.
> Но это либо совсем никому не нужно, либо вопросы к вендору. Архитектуру
> в LLVM можно добавить, и это делали не раз.Да как-то не особо эффективно делали. Реально живое там x86-64. Ну ARM'ы еще слегка. Остальное постольку-поскольку, спущено на тормозах. Да даже с ARM оно прикалываться умеет если тематически форумы именно системной направленности почитать.
> Про то что Rust не имеет якобы костов в runtime из-за якобы
> крутых проверок - я хотел бы увидеть доказательства.Я так понимаю что он с своим borrow checker ухитряется часть проверок доказать в компил тайме и тогда выкинуть их все из кода с чистой совестью. Да что там, оптимизеры типа LTO и сами этим грешат, только уровнем пониже и наружу интерфейс в случае си не вывешивают. Но выпилить к черту проверки, доказав "always true" может на раз. Торвальдс очень ругался - в кернеле компилятор некоторые использования не видит :). И если кто заикается про системность - ему потом эти оптимизации с другого бока очень жестко вылезут так то.
> Например, как он делает проверки выхода за границы массива? Вы опять это пишите, а
> доказательства где?Как я понимаю - таки в compile time просчитывает большую часть этого. Хотя рантайм panic() у него таки тоже есть. И можете зазырить в рассялке ядра что Торвальдс про такие вещи в СИСТЕМНЫХ вещах думает.
> Rust проверяет корректность некоторых конструкций, довольно ограниченную. Просто из "у
> Rust такая крутая система типов, что он теоретически МОЖЕТ делать более
> продвинутые оптимизации" это превратилось на просторах интернета в факт, бездоказательный.И как я понял - это заодно и делает синтаксис довольно закорючным.
> Или Rust умеет проверять переполнение float?
Да без понятия, я не растаман так то. Но float вообще большая проблема с точки зрения надежности и предсказуемости всего этого. Более того - чтобы все это было, надо хотя-бы какие-то жесткие стандарты определить, для всех краевых случаев, гарантированной точности и проч. Что начинает клещиться с умениями разнообразного железа. С точки зрения системщины и надежности плавучка проблемный топик. Ряд стандартов безопасности типа MISRA прямым текстом запрещает использование таковой по этим причиным.
Как это связано с низкоуровневостью?Можно собрать с отключенными проверками, есть Release и Release Safe.
Низкоуровневый он по совершенно другим причинам.
> Можно собрать с отключенными проверками, есть Release и Release Safe.К сожалению оно дает риск про@#$ться - или оверхед в рантайм.
> Низкоуровневый он по совершенно другим причинам.
Из которых ни 1 не перечислена...
А зачем?
> А зачем?Правильно, кого сейчас интересуют пруфы громких заявлений...
Меня выше спросили - я ответил.
А распинаться и пытаться что-то доказать непонятно зачем анониму...Всё есть в Issue на GitHub, и коммитах.
А ты умеешь делать проверки выхода за границы массива не в runtime? Или так умеет делать Rust? Может он умеет доказывать в compile time?
Шанс про...ться всегда есть. Только это сразу же отлавливается примитивными тестами.
Если код корректен - проверка выхода за границы не нужна. Это по сути только для дебага, чтобы отловить все такие случаи.
Какие книги почитать чтобы понять что ты написал? Про хидден флоу итд
Вот этого достаточно https://ziglang.org/learn/why_zig_rust_d_cpp
> 1. No hidden control flow. Т.е. нет exception. Нет переопределения методов. Нет
> конструкторов и деструкторов.А как же panic содраный из хруста и вычисления в compile time?
> 2. Error это отдельный тип и ошибки обрабатывать придётся (что-то типа Maybe
> / Optional, но в процедурном стиле), иначе не скомпилипуется.При том вот именно это - вызывает вопросы какими веществами они пользовались. Хотя выглядит забавно.
> 4. Тесты пишутся прямо в файле как test {...zig code...} и сразу
> запускаются командной zig test - ничего делать не надо. Очень поощряет
> test-driven программирование.С другой стороны, прелесть сей в отсутствии hardwired допущений прибитых на гвозди. Нравится тестить так - берем то. Эдак - берем это. Либ для тестов - есть.
> 5. Тесты можно дебажить и все breakpoint работают в VS Code.
Вы перепутали вебмакак с системщиками.
> 6. Билд система тоже на Zig, не надо учить отдельный язык синтаксис
> (cmake/Gradle).С другой стороны - см выше про прибито на гвозди. Единственный Правильный Путь - это не путь сишника.
> 7. Максимальная безопасность - все значения по умолчанию const (настоящий, а не
> как константная ссылка), проверки выхода за границы, и т.д. и т.п.Только стоит уточнить что оно либо с пеналти в рантайме - либо без некоторых проверок.
> Т.е. в отличие от Rust много проверок в runtime в Debug
> режиме, вместо статического доказывания системе типов, как в Rust -ЧСХ спорный вопрос что это фича. Хруст в этом пожалуй имеет преимущество: с одной стороны хоть какие-то проверки-гарантии, с другой - это не портит код в ран тайм.
> притом что многие проверки можно реально выполнить только в runtime.
Оно как бы не бесплатно по размеру кода и его скорости.
> 8. Аллокатор передаётся как параметр - никаких скрытых аллокаций памяти.
А вот это прикольно придумано. С другой стороны - кодить аллокатор в bare metal ну так себе, знаете ли. А без аллокатора оно вообще способно жить?
> 10. Отличная интероперабельность с С (не тестировал сам)
И вообще вроде можно постепенно сишный сорц до этого заапгрейдить.
> defer / errdefer - крутейшая фича.
Вообще забавно сделано.
> Вообще ощущение что пишешь на высокоуровневом языке, хотя Zig самый низкоуровневый из всех.
Да ну ща. Си низкоуровнее некуда. А как на этом оформить помещение числа 0x20 в адрес 0x80000?
> Я очень доволен. Скажу честно, расчитывал что он быстро начнёт разваливаться и
> я его выкину как "не смогла".На самом деле забавная штука. Более логичный чем хруст на вид.
> Но он превзошёл все мои ожидания даже в версии 0.10.0-dev.
Да? А как насчет поддержки в GCC? Надоели уже с шлангом гребаным, половину архитектур он тупо не умеет, что как бы аргумент если вы что-то там про системное программирование :P
> Ребята очень заточены на безопасность, но в меру, без фанатизма, и на performance.
Вообще они адекватнее раста с их оголтелым маркетинговым булшитом и пиханием во все дыры на кривой козе. И с сями оно менее дурно стыкуется на вид.
> Уже добавили переносимые SIMD в язык (тип @Vector())
Пошли по пути хруста загаживать синтаксис новыми закорюками чтобы впихнуть все и вся? Си приколен тем что всем этим не занимается. Даже стандартная либа - опциональна напрочь. Поэтому напрогать на сях бутлоадер или фирмвару какую - ну, взял и напрогал. А на этом так вообще получится? Это такой джентльменский минимум чтобы что-то там пищать про системность.
Никакого panic в Zig нет.Вычисления в comptime - это одна из ключевых фич и особенностей языка.
Врядли оно взято из Rust, потому что сделано гораздо, на порядок лучше.
В Rust это какой-то язык макросов над AST, который несколько раз переписывался и был unstable.
В Zig - это обычный код на Zig.
comptime {
...zig code
}Что может быть проще.
> Вычисления в comptime - это одна из ключевых фич и особенностей языка.
> В Rust это какой-то язык макросов над AST, который несколько раз переписывался и был unstable.Ну-ну.
const fn foo()
https://doc.rust-lang.org/reference/const_eval.html
Ну-ну. А println как там имплементирован?)))
А, так вы вообще не понимаете и не разбираетесь о чём пишете.comptime используется гораздо шире, чем вычисление констант. Вы вообще не о том.
Сравнивать надо с этим убожеством в виде макросов https://doc.rust-lang.org/src/std/macros.rs.html#96-101.
Что-то на нормальный Rust совсем не похоже.
Вот это сделать на Rust слабо?
https://github.com/ziglang/zig/blob/master/lib/std/comptime_...
Да, все generic, и comptime полиморфизм сделано в Zig гораздо лучше чем в Rust.
> А, так вы вообще не понимаете и не разбираетесь о чём пишете.
> comptime используется гораздо шире, чем вычисление констант. Вы вообще не о том.
> вычисление констант"Свои недостатки мы очень любим приписывать другим"(с)
> Сравнивать надо с этим убожеством в виде макросов https://doc.rust-lang.org/src/std/macros.rs.html#96-101.
> Что-то на нормальный Rust совсем не похоже.Опять что-то придумал и оспорил. Молодец, так держать!
> Вот это сделать на Rust слабо?
> https://github.com/ziglang/zig/blob/master/lib/std/comptime_...Надул щечки, будто сам лично писал.
Погоди, шнурки поглажу ...
#![allow(unused)]
#![feature(const_for)]
#![feature(const_fn_trait_bound)]
#![feature(const_mut_refs)]
struct KV<'a,T> {key:&'a str,val:T}
struct MyMap<'a,T> {kvs:&'a [KV<'a,T>]}const fn get<T:Copy>(key:&'static str, map:MyMap<T>) -> Option<T> {
for kv in map.kvs.into_iter() {
if (kv.key == key) {return Some(kv.val)}
}
return None;
}
fn main() {
const a:KV<i32> = KV {key: "hello", val: 1};
const b:KV<i32> = KV {key: "foo", val: 2};
const c:KV<i32> = KV {key: "bar", val:100500};
const map:MyMap<i32> = MyMap{kvs: &[a,b,c]};
println!("foo = {}, bar = {}", get("foo",map).unwrap(), get("bar",map).unwrap_or(42));
}
Да, оно проверяет все _полностью_ в компайлтайме.
% rustc -O -Zunleash-the-miri-inside-of-you=yes const.rs
% ./const
foo = 2, bar = 100500_ZN5const4main17hf11e025cf5259379E:
.cfi_startproc
sub rsp, 88
.cfi_def_cfa_offset 96
mov dword ptr [rsp], 2
mov dword ptr [rsp + 4], 100500
mov rax, rsp
mov qword ptr [rsp + 8], rax
mov rax, qword ptr [rip + _ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h3319aa4b4b98306eE@GOTPCREL]
mov qword ptr [rsp + 16], rax
lea rcx, [rsp + 4]
mov qword ptr [rsp + 24], rcx
mov qword ptr [rsp + 32], rax
lea rax, [rip + .L__unnamed_1]
mov qword ptr [rsp + 40], rax
mov qword ptr [rsp + 48], 3
mov qword ptr [rsp + 56], 0
lea rax, [rsp + 8]
mov qword ptr [rsp + 72], rax
mov qword ptr [rsp + 80], 2
lea rdi, [rsp + 40]
call qword ptr [rip + _ZN3std2io5stdio6_print17h07b90b286b5e6a91E@GOTPCREL]
add rsp, 88
.cfi_def_cfa_offset 8
ret
Код делает немного не то, что по ссылке. Точнее совсем не то.Предположу что ещё с парой включенных фич можно сделать что нужно.
Неплохо для языка, в который влили тонну бабла. Правда в 1.0 это не вошло, как я понял.
Через 5 лет после появления умеет то что сделал бывший студент-программист из Орегона, по вечерам после работы в версии 0.6.0.
А теперь мы подошли к главной фиче Zig. Как из const fn вернуть тип? Например для параметра 1 (Mac OS) я хочу получить одну структуру (с одними полями и их типами), а для 2 (Linux) другую структуру (другие поля. Ну и пусть методы будут одинаковыми.
О! Это то что я давно хотел получить от растоманов. Но они какой-то хней отмазывались.Может я не туда смотрел. Можно ли пример, как подобное делается в zig?
Достаточно ссылочку и пару поясняющих фраз.
Из интересного - alignment вшит в систему типов (указателя), поэтому туда-сюда указатели с разными alignment таскать не получится, только в безопасную сторону.Я работаю с Direct I/O и там специальные требования к памяти.
Минус целый класс ошибок.
Нет, выходные бинарники разгромные по размеру, а сборка ужасно медленная
> Нет, выходные бинарники разгромные по размеру, а сборка ужасно медленнаяА еще волосы на ладошках вырастут!
% rustc -O -C prefer-dynamic -C strip=symbols hello.rs && ll hello
-rwxr-x--- 1 аноним аноним 6,4K 8 Apr. 07:26 hello
Жырнота-то какая... это чтобы одну функцию вызвать?!
А сборка точно статическая, со всем необходимым растохламом под капотом ?А то ведь прошивка под мк - штука такая. И места немного и памяти немного и полноценной оси где бы можно было раскидать те либы - тоже часто нет
Да и 6 кб для вывода фразы в консоль в отсутствие либ под капотом - это тоже очень много
В былые времена когда тестировал раст, статическая сборка хэллоуворда весила сотни килобайт и это при максимальных оптимизациях и вырезании всевозможного мусора. А как только требовалось что-то бОльшее вывода в консоль - сборка жирела в разы
Что.. едва ли похоже на «суперЯП без издержек»
> А сборка точно статическая, со всем необходимым растохламом под капотом ?Glibc умеет в статическую сборку? Разве что musl.
Умеет, чего ему не?
Года два назад, вроде, прекратили поддержку статической сборки glibc.
Из-за лицензии и некоторых библиотек (libnss и тп).
> А сборка точно статическая, со всем необходимым растохламом под капотом ?А ты давно собирал статический хелловрот с стандартной либой?
% gcc -static -O2 -s helloc.c && ls -lh a.out
-rwxr-x--- 1 анон анон 566K 8 Apr. 12:34 a.out
> А то ведь прошивка под мк - штука такая. И места немного
> и памяти немного и полноценной оси где бы можно было раскидать
> те либы - тоже часто нет
> Да и 6 кб для вывода фразы в консоль в отсутствие либ
> под капотом - это тоже очень многоСтандартный бинарь под амд64, с pie и кучей секций по умолчанию-то? Не смеши мои тапки. Нолики выравнивания там, по большей части.
Idx Name Size VMA LMA File off Algn
12 .text 000003c6 00000000002017b0 00000000002017b0 000007b0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .init 00000013 0000000000201b78 0000000000201b78 00000b78 2**2% rustc -O -C prefer-dynamic -C strip=symbols -C relocation-model=static -C opt-level=s hello.rs && ll hello
-rwxr-x--- 1 анон анон 5,6K 8 Apr. 12:34 hello*
% gcc -O2 -s helloc.c && ls -lh a.out
-rwxr-x--- 1 анон анон 4,8K 8 Apr. 12:34 a.out*> В былые времена когда тестировал раст, статическая сборка хэллоуворда весила сотни килобайт
Плохо набрас^W тестировал.
https://www.opennet.dev/openforum/vsluhforumID3/124921.html#322
$ ll hello
-rwxr-x--- 496B 30 Jul. 12:41 hello*
так сколько в итоге весит хеллоуворд со статической типизацией ?
ну так, к слову о микроконтроллерах..
> типизациейне типизацией разумеется
> так сколько в итоге весит хеллоуворд со статической типизацией ?
> ну так, к слову о микроконтроллерах..Какие цифры в 496B тебе не понятны? B=Byte, если что.
RUSTFLAGS="-O -C relocation-model=static -C strip=symbols -C linker=ld.bfd" cargo build --release && ll target/release/hello
Finished release [optimized] target(s) in 0.03s
-rwxr-x--- 2 анон анон 504B 8 Apr. 15:52 target/release/hello*
% RUSTFLAGS="-O -C relocation-model=static -C strip=symbols -C linker=ld.bfd" cargo build
--release && ll target/release/hello
Finished release [optimized] target(s) in 0.03s
-rwxr-x--- 2 анон анон 504B 8 Apr.
15:52 target/release/hello*% ldd target/release/hello ; target/release/hello
ldd: target/release/hello: not a dynamic ELF executable
Hello World
> Какие цифры в 496B тебе не понятны? B=Byte, если что.
>
> RUSTFLAGS="-O -C relocation-model=static -C strip=symbols -C linker=ld.bfd" cargo build
> --release && ll target/release/hello
> Finished release [optimized] target(s) in 0.03s
> -rwxr-x--- 2 анон анон 504B 8 Apr.
> 15:52 target/release/hello*
>Если итог статической столько - то уже весьма годно, да
> микроконтроллеровВот уж где раст не валялся.
Валялся, но не слишком успешно. Он даже в кернеле линукса кусок проблем и костыле, а там и подавно.
Бред сивой кобылы. Cortex M0 и M3 точно работают, и для кучи отладочных плат есть отдельные либы поверх базовых типа cortex-m. К слову, для STM32 либы генерятся автоматически по предоставляемым производителям файлам с описанием периферии. Но раз ты не слышал, как в лесу упало дерево, значит, дерева не существует, так ведь?
А зачем? Ардуина тоже поверх. А потом видим, как идиот крутит Cortex M7 для того, чтобы пошимить светодиодиком.
Учится же. Все же когда-то с азов начинали. Потом, глядишь, ЦОС на нём организует.
Это чтобы юному падавану наговнять что-то по-быстрому. А настоящий джедай использует Силу - RTIC, ранее известный как RTFM: https://crates.io/crates/cortex-m-rtic
С этой штукой можно быстро сделать ОСРВ под конкретную плату, но регистры периферии придётся дёргать самому. RTIC только проследит, чтобы ты дёргал без гонок и только те, которые требуются конкретной задаче (task).
> Бред сивой кобылы. Cortex M0 и M3 точно работают,Только столько нюансов прикольных в каждой дырке. И гарантии хруста оказывается на систему без MMU не распостраняются. Более того - переполнение стэка в нем поймать так еще и посложнее чем на сях буде - рантайм окружение сложнее, компоновать кастомную арену гиморнее
> Но раз ты не слышал, как в лесу упало дерево, значит, дерева не существует, так ведь?
side-effects отсутствуют - optimized out.
С учётом того, что по ходу миру потреб..дства приходит конец, идите в пень со своими NodeMCU, всрастами и прочими микропитонами в школу, тут все на Си и будет на Си, кроме как у любителей светодиодных лент и прочих пятиминутных ютубоваупоказалок.
Приходит, разве что, только в Скрепной. И то, по причине санкций со всех сторон.
Когда заводы остановятся, тогда увидим.
Ну опять же, остановятся у нас.
Если блеф перейдет в действия, то заводам не выгодно и не на чем будет работать. Вы не понимаете, что владельцы шведских столов готовы сократить бесконтрольное потребление ограниченных ресурсов планеты.
Так давно уже понятно, что самое действенное, чтобы сократить потребление ресурсов планеты - сократить скорость размножения потребителей ресурсов.
> Приходит, разве что, только в Скрепной. И то, по причине санкций со всех сторон.А что, у остальных память бесплатной стала и жирные микроконтроллеры раздают по ценам тощих? Невзирая на более крупный кристалл и меньший выход с вафли? А то при сколь-нибудь ощутимом тираже жаба таки задушит. Даже за 1 доллар.
> Стоит ли учить сабж как хобби, для написания небольших утилит и программирования
> микроконтроллеров? Имею опыт только с Си. Или лучше в сторону Zig
> смотреть? Не знаю, что легче/приятнее использовать?Смотрите в сторону Оберон-7. Учится за неделю. Многие вещи вам покажутся тупыми, но эта простота, которая даёт управляемость сложностью. А это выходит на первый план в текущей ситуации. Победят самые мелкие, А значит самые приспосабливаемые.
В конце-концов -- хелло ворлд на Оберон-7 имеет 2-6 кБ на больших железках и 2..3 сотни байт для микроконтроллеров. Переносимость софта снизу вверх абсолютная а задача бекпортирования на две платформы вниз практически никогда в чистом виде не возникает.
Интересно, на лекциях по языкам программирования нам Паскаль разжевывали.
Синтаксис Оберона, объявление модулей констант похожи..
Да какой-то он не такой активный. Вон Zig сначала один человек писал, затем двое. Проект с нативной компиляцией, поддерживает гораздо больше архитектур и ОС, чем у текущих рабочих реализаций Оберона. Более того, собирается отказываться от llvm, насколько знаю.
Нет, не собирается. LLVM останется, как я понял. Просто сейчас компилятор написан на C++, будет написан self-hosted компилятор на Zig.И как я понял можно будет отказаться / заменить LLVM. Но это для тестов или чего то ещё.
Для production отказываться от 15 лет инвестиций в оптимизации LLVM никто не собирается. Более того они активно пушат изменения обратно в LLVM, расширяя его границы и возможности.
> Да какой-то он не такой активный. Вон Zig сначала один человек писал,
> затем двое. Проект с нативной компиляцией, поддерживает гораздо больше архитектур и
> ОС, чем у текущих рабочих реализаций Оберона. Более того, собирается отказываться
> от llvm, насколько знаю.Если вы считаете, что Оберон представлен недостаточным числом платформ -- то я недоумеваю.
Если Zig только собирается отказываться от LLVM, то Оберон с самого начала мог собирать сам себя, а остальные компиляторы, трансляторы и траспиляторы прикручены были позже. Так что этого фатального недостатка - оберон точно лишён))Может ли Zig похвалиться тем, что сначала был написан он, а потом -- процессор под него? Как у Оберона?
> Если вы считаете, что Оберон представлен недостаточным числом платформ -- то я недоумеваю.Хочу прогать esp32. Подойдёт?
> Может ли Zig похвалиться тем, что сначала был написан он, а потом -- процессор под него?А где можно этот процессор получить/купить?
> Хочу прогать esp32. Подойдёт?
>> Может ли Zig похвалиться тем, что сначала был написан он, а потом -- процессор под него?На счёт esp32 -- не уверен. Надо смотреть бекэнды в компиляторе aix -- сам давно туда не лазил, может быть и есть. Также есть варианты написать прошивку на Обероне для транслятора "Восток" или SDCS. Оба умеют в Си.
> А где можно этот процессор получить/купить?
Покупаете плату FPGA Spartan-4 или старше (от 200 баксов), прошиваете схему (доступна на Project Oberon), подключаете клаву, мышу, VGA-монитор через штатные разъёмы и вуаля. Как вариант -- можете посмотреть на дальнего древнего родственника -- эмулятор "Кронос" (далеко не тупая машина была). Даёт хорошее представление о том, каким мог бы стать массовым 2х процессорный "ВоркСтейшн мейд ин ЮССаР" ещё в 1989 г. Если бы всё не пошло прахом.
Ну вы сравнили 200 баксовый спартан с ESP за десятку. К тому же мышь, клава и HDMI какой на одноплатнике за ту же десятку будут сильно лучше, если нужно было именно это и не хотелось именно самому, именно VGA реализовывать (очень нишевое удовольствие).> Если бы всё не пошло прахом.
Когда некто предлагает тул за 200 баксов вместо тула за 10 баксов, кто угодно прахом пойдет.
Тот, кто хочет -- ищет возможности.
Кто не хочет -- ищет причины.
Верно. Я хочу делать решения которые используются, с разумными параметрами на выходе. А вон то - очень узкоспециализированное. Самоцель "программить на чем-то" очень странная. Она не решает ни одной проблемы человечества, ни одной задачи. Ну карьера и заканчивается тремя странными конторами на выбор. А мир в целом пишет критичные системы, на сях, в многократно большем количестве. Конечно используя специфичные субдиалекты, правила и - главное - используя специфичные подходы к разработке. Вообще, там главное общие подходы, они от ЯП не сильно зависят. А верификаторы дополнительных критериев могут и внешними быть. В таком процессе все равно на каждое изменение гоняется куча верификаций, анализов и тестов чтобы любые отклонения от идеала ловить ДО того как что-то упадет, взорвется или въедет в стену.
Ты из секты Информатика-21. Бывал на вашем форуме, там пасутся скушные тошнотворные зануды. Если у пацана нет высшего образования, то он не человек. Все сидят на Виндовсе, о Линуксах никто не шарит. Потопахин всё рыщет по интернету, угрожая судом всем, кто будет бесплатно раздавать его книги. Там какой-то Денис есть который не может осилить GTK+ для Blackbox. Унылое зрелище.Посмотрел исходники на Обероне, ключевые слова языка пишутся ьлдбко большими буквами. Сам Никлаус даже не удосужился выпусть компилятор и библиотеки для GNU/Linux. Оберон создавался на платформа для OS Windows. ну он сейчас на пенсии, ему ничего не надо, благо когда-то полетал на российских МиГ-ах.
Скажи на бортовом оборудовании российских беспилотников и истребителей исходники на Обероне?
> Скажи на бортовом оборудовании российских беспилотников и истребителей исходники на Обероне?В одной Новосибирской конторе софт для спутников пишут на Модуле-2.
>> Скажи на бортовом оборудовании российских беспилотников и истребителей исходники на Обероне?
> В одной Новосибирской конторе софт для спутников пишут на Модуле-2.И в одной московской, если что. И эта московская контора -- прям контора контора.
https://ru.wikipedia.org/wiki/%D0%98%D0%...
Не спорю, я слышал только про новосибирцев.
Ещё знаю что на BBCB написана система управления каскадом ГЭС на Амазонке.
> Не спорю, я слышал только про новосибирцев.
> Ещё знаю что на BBCB написана система управления каскадом ГЭС на Амазонке.И процессинговый софт Дойче Банка. Тоже норм так нагрузка и требования к надёжности. А если немного погуглить -- можно найти сайт одной голландской компании которая делает заказные SCADA-системы со всеми требованиями критической надёжности.
О как!
Кстати, раз ты в теме.
Давно не был на форуме оберонкоре.
Как в ВВСВ обстоят дела с многопотоком?
> О как!
> Кстати, раз ты в теме.
> Давно не был на форуме оберонкоре.
> Как в ВВСВ обстоят дела с многопотоком?Прямо здесь и сейчас -- Дагаев реализовал очень грамотный кооперативный планировщик (в одном потоке). От орловской группы уже довольно давно есть компромисс в виде запуска нескольких BB в разных процессах с общением через шаред мемори. Есть решение однозначно рабочее от красноярцев с запуском ВВ на кластере.
В-общем, чистой многопоточности как в го нет, но вопрос решаемый. Возможно, я что-то упустил или не знаю. Активе Оберон со своими потоками и плоским адресным пространством стоит несколько особняком, но вариант вполне рабочий.
Ок, почти ничего не поменялось за 15+ лет.
Полазил по oberon.org, у bbcb какой-то разброд версий: чисто под винду - 1.7, кроссплатформ - 1.8, 2.0.
Какая из них является production ready ?
У кроссплатформ GUI на чем ?
> Ок, почти ничего не поменялось за 15+ лет.Когда я вижу комментарий в духе "Ок, почти ничего не поменялось за 15+ лет." -- я только рад. Это значит технологии совершенны, не требуют доработок, смузихлёбы не понабежали.
> Полазил по oberon.org, у bbcb какой-то разброд версий: чисто под винду -
> 1.7, кроссплатформ - 1.8, 2.0.
> Какая из них является production ready ?
> У кроссплатформ GUI на чем ?Берите свеженькую -- не ошибётесь. Практически все версии production ready -- в этом главный смысл. Смена номера версии вызвана изменениями в Kernel, которые разумеется -- несовместимы. Если бы вы знали как работают Обероны, то знали бы, что вообще всё на Оберонах стараются делать ни на чём. Т.е. на Обероне. BBCB, Active Oberon и т. п. -- это полноценные (мини) операционные системы, замыкающая всё необходимое на себя -- принцип герметизации (буквально, как на подводной лодке). Разумеется, есть выходы на внешнюю систему (лично довелось подключать виндовую DLL -- работает идеально), но в мире Оберонов не рекомендуется так делать по причине снятия почти всех гарантий. Именно так достигается максимальная переносимость и надёжность.
> Это значит технологии совершенныКооперативная многозадачность это совершенная технология?
> Если бы вы знали как работают Обероны, то знали бы, что вообще всё на Оберонах стараются делать ни на чём.
Я ими интересовался в 2005 +/- год.
Я имел ввиду как в Линукс версии BBCB отрисовывается графика - GTK, QT, SDL … ?
>> Это значит технологии совершенны
> Кооперативная многозадачность это совершенная технология?В ряде задач -- это идеальное решение. Я только не понял, какое это имеет отношение к Оберону?
>> Если бы вы знали как работают Обероны, то знали бы, что вообще всё на Оберонах стараются делать ни на чём.
> Я ими интересовался в 2005 +/- год.
> Я имел ввиду как в Линукс версии BBCB отрисовывается графика - GTK,
> QT, SDL … ?Признайтесь, вы мой ответ не читали. Я вроде ясно дал понять: никак. Если захотите -- есть вариант SDL, если захотите -- GTK. Но в мире Оберонов так не принято.
> В ряде задач -- это идеальное решение.Например?
> Я только не понял, какое это имеет отношение к Оберону?
Непосредственно к оберону никакого.
Мне интересно как писать многопоточку в ВВСВ.
А да, ещё забыл, х64 поддерживается или только х32?> Признайтесь, вы мой ответ не читали. Я вроде ясно дал понять: никак. Если захотите -- есть вариант SDL, если захотите -- GTK. Но в мире Оберонов так не принято.
Пардон, Вы дурачком прикидываетесь?
Повторю простой вопрос: как в Линукс версии ВВСВ выводится графика?
>> В ряде задач -- это идеальное решение.
> Например?Последовательный однотипный перебор входов датчиков.
>> Я только не понял, какое это имеет отношение к Оберону?
> Непосредственно к оберону никакого.
> Мне интересно как писать многопоточку в ВВСВ.
> А да, ещё забыл, х64 поддерживается или только х32?Берёте OpenMP (привязки есть) и пишите.
Я правильно понимаю, что вам лишь бы языком потрепаться? Потому что, если бы вы хотели, то давно бы знали, что существует компилятор х64 -- об этом на сайте написано большими буквами.>> Признайтесь, вы мой ответ не читали. Я вроде ясно дал понять: никак. Если захотите -- есть вариант SDL, если захотите -- GTK. Но в мире Оберонов так не принято.
> Пардон, Вы дурачком прикидываетесь?
> Повторю простой вопрос: как в Линукс версии ВВСВ выводится графика?Пардон, вы дурачок. Я вам третий раз пишу: в Обероне принято всё делать силами самого Оберона.
Не желаете герметизации, нет проблем: можете взять SDL 1/2, можете взять GTK, можете взять Cairo. Вариантов тонны. Как захотите -- так и будет.
Ок. Вы сами нифига не знаете.
А вот по поводу критической надежности.
В соседей теме чел про SPARK задвигает.
Сталкивался с этим языком?
> А вот по поводу критической надежности.
> В соседей теме чел про SPARK задвигает.
> Сталкивался с этим языком?Я даже могу предположить фамилию этого чела. Рыбин.
Всегда по СПАРКу два вопроса и на один из них ответ уже печальный:
1) Что будет, если вдруг запретят экспорт технологии в Россию?
2) Всё у вас сертифицированное и куча тестов. А кто сертифицировал gcc, в который вы транслируете код? Какие гарантии, что ваш танк надёжности не провалится сквозь тонкий лёд инфраструктуры?А так СПАРК сам по себе не дурён, толковые ребята делают. Но, политика, жирнючий всё такое. Тут перспективы далеко не радужные.
Для атомной промышленности -- вопрос когнитивной управляемости, зависимость от вендоринга -- это вопрос жизни и второй Фукусимы. Оберон здесь явно выигрывает.
> 2) Всё у вас сертифицированное и куча тестов. А кто сертифицировал gcc,
> в который вы транслируете код? Какие гарантии, что ваш танк надёжности
> не провалится сквозь тонкий лёд инфраструктуры?Тот же кто сертифицировал ваш здоровенный спартан с черти-чем залитым в него.
> Оберон здесь явно выигрывает.
Как это определялось? И вообще, сейчас подугомонились с серебряными пулями и скорее двигают в стороны как делать из не идеальных систем и компонентов более надежные решения чем оно изначально было.
> Тот же кто сертифицировал ваш здоровенный спартан с черти-чем залитым в него.Сернтифицированных спартанов в России не существует. Спартан-4 может купить студент в любой стране мира, по нынешним меркам -- это крайне слабая железка. Не нравится отсутствие сертификации спартана-4 -- скачайте эмулятор Project Oberon и можете самостоятельно проверить исходники -- всё доступно, и что важно в наших условия -- бесплатно. Так что, вы что-то перепутали.
>> Оберон здесь явно выигрывает.
> Как это определялось? И вообще, сейчас подугомонились с серебряными пулями и скорее
> двигают в стороны как делать из не идеальных систем и компонентов
> более надежные решения чем оно изначально было.Определялось очень просто: способность в одну голову написать компилятор. Чем проще -- тем надёжней, повторимей, переносимей. Победят в ближайшем будущем те языки, у которых минимальное количество грамматик РБНФ, максимум структурированности, максимум гарантий, минимальное число возможностей позволить программисту сделать глупость. Это Оберон, в существенно меньшей степени Go, и живой труп Rust.
Серебряная пуля существует, но кроме неё есть и калибр, и условия стрельбы и тот кто такой пулей стреляет. Все эти вопросы на 80% сейчас решены. Для оставшихся 20% -- специальные приспособы для аппарата стрельбы и прокачка скилов у стреляющего.Невозможно создать более прочную цепь, чем самое слабое звено в ней. Здесь вы точно не правы.
> максимум гарантий,Гарантий чего?
> минимальное число возможностей позволить программисту сделать глупость. Это Оберон, в существенно меньшей степени Go, и живой труп Rust.
Rust по этому критерию на 1 месте.
>> максимум гарантий,
> Гарантий чего?Того, что компилятор не сделает вам больно.
>> минимальное число возможностей позволить программисту сделать глупость. Это Оберон, в существенно меньшей степени Go, и живой труп Rust.
> Rust по этому критерию на 1 месте.Нет, на последнем. Сначала напишите компилятор Раста своими руками -- потом мы вернёмся к этому разговору.
Нет, на первом.
Зачем мне писать компилятор раста?
Он уже написан и отлично бьет по рукам не давая писать хрень.// сколько компиляторов оберона вы написали?
> Нет, на первом.
> Зачем мне писать компилятор раста?
> Он уже написан и отлично бьет по рукам не давая писать хрень.Затем, что то, что нельзя повторить самому -- неповторяемо.
> // сколько компиляторов оберона вы написали?
Ни одного. Но если потребуется -- будьте спокойны.
> Затем, что то, что нельзя повторить самому -- неповторяемо.Замечательная логика.
Может мне ещё процессор свой забуилдить?> Ни одного. Но если потребуется -- будьте спокойны.
Ну понятно.
> Может мне ещё процессор свой забуилдить?Ты так это написал, как-будто в этом есть что-то плохое.
>> Ни одного. Но если потребуется -- будьте спокойны.
> Ну понятно.Зачем мне лично писать компилятор, если реализаций в одно лицо и так уже достаточно.
Но если потребуется -- напишу. Оберон не Раст. 70к строк вполне одолеть можно.
Аргументы понятны.
Про Фукусиму не понял, там же землетрясение было причиной.
> Аргументы понятны.
> Про Фукусиму не понял, там же землетрясение было причиной.Ну конечно землетрясение. Правда, рядом в 8 км есть ещё одна атомная станция. Там всё норм, но вы не понимаете -- это другое. Ну, правда, Фукусиму строили американцы на отъ... побыстрее сдать ,а вторую станцию строили японцы, в полной мере понимая, каким фейерверком может всё это закончиться. Годы примерно одинаковые, технология строительства примерно одинаковая.
А когда цены вверх растут -- оно тоже само. И когда пенсионный возраст повышают -- оно тоже само. И когда спецоперация на Украине -- ну конечно это было неизбежно. Вложить 240 подаренных миллиардов в виде скидок на газ Украине в агитацию дружбы народов? Не, бред какой-то! Конечно спецоперация!
Землетрясение -- это внешний прогнозируемый фактор. И то, что станция не устояла -- это жадность капитала, а не землетресение. Не путайте тёплое с мягким.
>> Аргументы понятны.
>> Про Фукусиму не понял, там же землетрясение было причиной.
> Ну конечно землетрясение. Правда, рядом в 8 км есть ещё одна атомная
> станция. Там всё норм, но вы не понимаете -- это другое.
> Ну, правда, Фукусиму строили американцы на отъ... побыстрее сдать ,а вторую
> станцию строили японцы, в полной мере понимая, каким фейерверком может всё
> это закончиться. Годы примерно одинаковые, технология строительства примерно одинаковая.То есть конструкция хреновая и виноваты сша. А зачем вы ее помянули в контексте софта?
Я уж думал там софт кривой и его надо было на Оберон написать 😏> А когда цены вверх растут -- оно тоже само. И когда пенсионный
> возраст повышают -- оно тоже само. И когда спецоперация на Украине
> -- ну конечно это было неизбежно. Вложить 240 подаренных миллиардов в
> виде скидок на газ Украине в агитацию дружбы народов? Не, бред
> какой-то! Конечно спецоперация!Смешались в кучу люди, кони…
Какое отношение все это имеет к ЯП?> Землетрясение -- это внешний прогнозируемый фактор. И то, что станция не устояла
> -- это жадность капитала, а не землетресение. Не путайте тёплое с
> мягким.Точно прогнозируемое и жадность капитала виновата?
А если в результате землетрясения часть суши уйдёт под воду это тоже жадность чья-то будет виновата?
> То есть конструкция хреновая и виноваты сша. А зачем вы ее
> помянули в контексте софта?
> Я уж думал там софт кривой и его надо было на Оберон
> написать 😏Т.е. вы читать не умеете. Капитал -- заказчик музыки. И все последствия имеют именно эту причину -- капитал. Оберон в том числе -- лишь следствие, того, что капитал желает прибылей. Здесь и сейчас, а в идеале -- ещё вчера и везде.
> Смешались в кучу люди, кони…
> Какое отношение все это имеет к ЯП?Ещё раз внимательно читайте: причиной всему -- капитал. ЯП в мейнстриме в текущий момент -- те, которые поднял капитал, а не те, которые должны быть подняты по справедливости.
> Точно прогнозируемое и жадность капитала виновата?Точно прогнозируемое и точно жадность капитала виновта. Ещё раз: в 8 км рядом есть по классу такая же атомная станция.
> А если в результате землетрясения часть суши уйдёт под воду это тоже
> жадность чья-то будет виновата?Разумеется. То, что суша может уйти под воду -- вполне прогнозируемое событие. Особенно на границе разломов тектонических плит. То, что станцию построили экономя на всём -- это опять жадность капитала.
Zig не взлетит)).Zig конечно можно изучить для интереса, но смысла в этом думаю нет.
Основная проблема Zig в том что **он не имеет особых преимуществ перед C**.
Да он чуть более безопасен, но именно что чуть. А из-за небольших изменений в гарантиях безопасности при переходе с языка C на язык Zig никто ***не будет переписывать сотни тысяч legacy кода***. Мож все также писать на C.
То есть его судьба уже предрешена -- это стать забытым языком, хотя он этого пока не знает)).
Что касается скорости, то C, C++, Rust и Zig обладают одинаковым потенциалом вплоть до переписывания всего на чистый ассемблер)). Так что и в этом Zig-у крыть нечем.
Все таки основная причина того что Rust взлетел -- это его гарантии безопасности. Реально доставляет удовольствие, что то что скомпилировалось, с 90 процентным успехом будет делать то что должно)).
Да эти гарантии безопасности можно обойти, но зачем? Можно чуть подумать и вдруг окажется что и unsave не нужен.
Да бог с ним с однопоточным кодом. Так то можно наверное и не париться с более сложным синтаксисом Rust. Но вот где ему нет равных -- **это асинхронный и многопоточный код**!
То как Rust не дает сделать ошибку в многопотоке и асинхронке не передать)). Если что не так, то он просто не скомпилируется, в отличии от C, C++, Zig, где компиляция еще не гарантия успеха, а нахождение места где засела ощибка сродни танцам с бубном.
Так что да, сравнивать Zig с Rust просто смешно 😅
Лично мне не особо rust нравится, но кто мы такие, чтобы выбирать, если глобальные "корпорации добра" даже опенсурс взяли за сами знаете что. Сидите и не рыпайтесь пользуйтесь rust,mono,chromium, github и т.д. Вот и приходится пользоваться тем, что есть. Один человек не способен написать/переписать тонны кода под себя, только если он не миллиардер либо бессмерный с кучей времени. Я люблю лпенсурс, но что с ним творится в последние годы категорически не приветсвую.
> приходится пользоватьсяА можно взять - и не пользоваться этим. Кто заставляет, например, делать сайты только под растаманьского фурифокса?
> Я люблю опенсурс, но что с ним творится в последние годы категорически не приветствуюИстину глаголишь.
Стэковерфлоу-программирование забыл упомянуть.
С учётом текущих событий с Firefox, Qt, дистрибутивами, СПО показало свою свободную шизоидную подчинённость. Ибо когда мальчик считает себя девочкой это не свобода мысли, это шизофрения, синоним либерализма.
> когда мальчик считает себя девочкойЭто одна из форм анархизма.
*это лишь косвенное следствие невозможности устроиться в обществе с нынешним полом
Что едва ли похоже на нормальное общество «без сексизма»
>> когда мальчик считает себя девочкой
> Это одна из форм анархизма.Покажите мне, где такое написано у Кропоткина?
У него что, монополия на анархизм?
> У него что, монополия на анархизм?В сущности -- да. В России другие варианты анархизма в силу национального менталита не приживутся.
> В сущности -- да. В России другие варианты анархизма в силу
> национального менталита не приживутся.Ух, какой запущенный случай...
> у КропоткинаОн - единственный анархист в мире?! Ну тогда я тебя удивлю, что и зелёные, и феминистки - это тоже варианты анархизма.
Кто платит тот и танцует. Мир там же где и был всегда.
>>Мир там же где и был всегда.Чушь. Даже если не учитывать вращение Земли по орбите вокрус Солнца - есть ещё и вращение Галактики (период примерно 220-250 миллионов лет, точнее не помню). Да и во Вселенной нет ничего неподвижного.
>>>Мир там же где и был всегда.
> Чушь. Даже если не учитывать вращение Земли по орбите вокрус Солнца -
> есть ещё и вращение Галактики (период примерно 220-250 миллионов лет, точнее
> не помню). Да и во Вселенной нет ничего неподвижного.Кто гравитацию обеспечивает, тот звёзды со скоплениями и крутит.
> Кто гравитацию обеспечивает, тот звёзды со скоплениями и крутит.И кто же этим занимается в межгалактическом пространстве?
Ньютон, с поправками от Эйнштейна
> Ньютон, с поправками от ЭйнштейнаПрям лично? Хотел бы я это увидеть :). Сэр Айзек в межгалактическом пространстве. Холст, масло :).
Тёмная материя/энергия вертели ОТО в прямом смысле.
А кто же все-таки свет включил?
Ильич
Популист. Кабельные заводы уже были, когда он под столом ползал.
> Популист. Кабельные заводы уже были, когда он под столом ползал.Были, но не для крестьян и рабочих.
в деревнях свет где-то в 50-х только появился, а при Ленине (и чуть далее) с лучиной так и сидели.
>Ибо когда мальчик считает себя девочкой это не свобода мысли, это шизофренияПлохо не то, что кто-то себя считает кем-то другим. А то, что он из этого желает извлечь социальные преимущества.
Какие преимущества?
Занять должность по квоте, а не по навыкам.
> независимой некоммерческой организации Rust Foundation.Независимая? Некоммерческая?! А что насчет директоров в совете от Microsoft, Google и AWS?!?
По ходу хотят прибрать под контроль Линукс. Надеюсь, найдется сообщество, которое будет развивать свою версию ядра Линукс, без Раста.
Хаха, не смеши мои тапочки.
Нынешнее "сообщество" даже этот линукс развивать не в состоянии. Почитай отчеты Linux Foundation - сколько у них разрабов на зарплате корпов, а сколько "общественников"
Ну если из ядра повыкидывать многого, нужного корпам. Останется не сильно больше, чем у xBSD, не считая драйверов.
Если из ядра повыкидывать все что туда накодили корпорации, останется первоначальная студподелка Линуса.
Например, планировщики и сетевой стек выкидывать нет небходимости, они нужны.
> Например, планировщики и сетевой стек выкидывать нет небходимости, они нужны.Нет уж, будь последовательным - выкидывай все что накодили корпорасты.
Есть версия ядра Linux-libre, от куда повыкидывали все несвободное.
Я не про свободное/закрытое. Если сидит чел на зарплате AMD и пилит GPUOpen-Drivers - то не важно открытые они или нет, важно что на бабло "злой корпорации AMD". И без них этих дров не было бы. Может были бы другие - скорее всего за чужие деньги и явно в другом объеме.
И так с большинством вещей, не только с дровами. Посмотришь кто что пилит - а там практически одни люди на зарплате Intel, AMD, Oracle, RedHat и т.д.
> GPUOpen-Drivers - то не важно открытые они или нет, важно что
> на бабло "злой корпорации AMD".Это может говорить только человек совершенно не разбирающийся в Linux и процессах вокруг. Так, поржать, АМД забило на свои потуги блобмейкерства, ВЗЯЛИ ОТКРЫТЫЙ РЕВЕРСНУТЫЙ RADEON, форкнули его, переобозвали регистры железа так как их называет HW TEAM наконец, и вот это вот - и есть amdgpu. А кодеры "radeon" были наняты в "amd" делать то что и делали. Только им теперь HW TEAM стал доступен и вот прямо сразу из сорцов железа хидеры с регистрами на автомате генерит.
Без комьюнити радеона - это было бы невозможно. А так вон интеловский Daniel Vetter, стоило ему только захотеть, не только покинул интел в момент - но и тут же получил предложение "работа мечты". Из другой фирмы но он продолжит заниматься тем чем занимался. Т.е. графической подсистемой и драйверами GPU. А то что в его жизни будет чуть меньше интела вообще не баг а фича. Интел для линуксоидов - так себе фирма.
> Foundation - сколько у них разрабов на зарплате корпов, а сколько
> "общественников"Есть более интересный критерий. Посмотреть коммиты по выходным. В линух коммитят, при том часто те кто на зарплате. А что, они этим раньшие и бесплатно занимались. А тут им еще и платят чтобы они фултайм могли так же. Это типа плохо? Лучше признайтесь что вы им просто завидуете - не всем платят за любимое дело, это да.
> По ходу хотят прибрать под контроль Линукс.Давно в совет директоров Linux Foundation заглядывал?
Не хорошо все это выглядит со стороны. Какой там безопасный язык? Какие там драйвера на нем? Шутите что-ли?
Вот он, типичный хейтер - демагог: комментарий написал, но, по сути, ничего не сказал. Хоть бы писать научился, если так хочется обгадить ЯП, на котором не пишешь.
Чет уже плюсы по сложности переплюнул
И это ещё только начало.
Это такая стратегия, чтобы бесконечно задрать порог вхождения.
Пришёл за листингом LibSrutch. Почти собралось )
Хочу собрать zola. Что он от меня хочет?Compiling csv-core v0.1.10
Compiling num_cpus v1.13.1
Compiling time v0.1.43
Compiling getrandom v0.2.4
Compiling time v0.3.6
Compiling filetime v0.2.15
Compiling socket2 v0.4.3
error[E0412]: cannot find type `ip_mreqn` in crate `libc`
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/socket2-0.4.3/src/sys/unix.rs:1013:12
|
1013 | ) -> libc::ip_mreqn {
| ^^^^^^^^ help: a struct with a similar name exists: `ip_mreq`
|
::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.113/src/unix/bsd/netbsdlike/openbsd/mod.rs:50:1
|
50 | / s! {
51 | | pub struct glob_t {
52 | | pub gl_pathc: ::size_t,
53 | | pub gl_matchc: ::size_t,
... |
419 | | }
420 | | }
| |_- similarly named struct `ip_mreq` defined hereerror[E0422]: cannot find struct, variant or union type `ip_mreqn` in crate `libc`
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/socket2-0.4.3/src/sys/unix.rs:1015:75
|
1015 | crate::socket::InterfaceIndexOrAddress::Index(interface) => libc::ip_mreqn {
| ^^^^^^^^ help: a struct with a similar name exists: `ip_mreq`
|
::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.113/src/unix/bsd/netbsdlike/openbsd/mod.rs:50:1
|
50 | / s! {
51 | | pub struct glob_t {
52 | | pub gl_pathc: ::size_t,
53 | | pub gl_matchc: ::size_t,
... |
419 | | }
420 | | }
| |_- similarly named struct `ip_mreq` defined hereerror[E0422]: cannot find struct, variant or union type `ip_mreqn` in crate `libc`
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/socket2-0.4.3/src/sys/unix.rs:1020:77
|
1020 | crate::socket::InterfaceIndexOrAddress::Address(interface) => libc::ip_mreqn {
| ^^^^^^^^ help: a struct with a similar name exists: `ip_mreq`
|
::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.113/src/unix/bsd/netbsdlike/openbsd/mod.rs:50:1
|
50 | / s! {
51 | | pub struct glob_t {
52 | | pub gl_pathc: ::size_t,
53 | | pub gl_matchc: ::size_t,
... |
419 | | }
420 | | }
| |_- similarly named struct `ip_mreq` defined hereSome errors have detailed explanations: E0412, E0422.
For more information about an error, try `rustc --explain E0412`.
error: could not compile `socket2` due to 3 previous errors
warning: build failed, waiting for other jobs to finish...
error: build failed
Ты бы хоть версии раста, системы написал.
У них есть инструкция по сборке из сорцов, может стоит заглянуть туда https://www.getzola.org/documentation/getting-started/instal...
rust 1.59, openbsd snapshots amd64, по этой инструкции и собирал. собирается, собирается, доходит до sockets и не собирается. кстати, мне встроенный сервер и не нужен, как его сборку отключить?
По openbsd не подскажу, сори.
А почему именно из исходников? Там что-то исправлялось?
Просто есть же OpenBSD офф пакет:
$ doas pkg_add zola
(https://www.getzola.org/documentation/getting-started/instal...)
> есть же OpenBSD офф пакетА вот тут вопрос: как его собирали, и его ли собирали, если он не собирается?
>> есть же OpenBSD офф пакет
> А вот тут вопрос: как его собирали, и его ли собирали, если он не собирается?Не, тут вопрос: зачем ты решил метанизировать лужу, абсолютно не разбираясь в теме?
https://openports.se/www/zola
> По openbsd не подскажу, сори.
> А почему именно из исходников? Там что-то исправлялось?
> Просто есть же OpenBSD офф пакет:
> $ doas pkg_add zola
> (https://www.getzola.org/documentation/getting-started/instal...)оф пакет версия 0.10, а сейчас уже 0.15
тема с офсайта у меня не подключилась
« Согласно данным «Лаборатории Касперского», новая группировка уже атаковала значительное число компаний по всему миру. В своей работе BlackCat используют малораспространенный язык программирования Rust, что серьезно замедляет разработку «противоядий» от заражений. »
https://m.lenta.ru/news/2022/04/08/meow/
Для того, чтобы эту группировку поймать, достаточно вместо слива яндекс.еды использовать слив продаж дилдо.
curl|sh - это безопасно.
да это просто шедевр от растамагов!
Предлагаешь сверять pgp-подпись?
> Предлагаешь сверять pgp-подпись?Вообще, нормальные менеджеры пакетов так и делали отродясь. Но до хайпующих вебмакак - как до жирафа. Этак лет через 20 до холуев майкросовта, гугла и амазона допрет что репы можно еще и свои подключать, да и ключи свои добавлять.
> Предлагаешь сверять pgp-подпись?Да ты просто кэп!
>> Предлагаешь сверять pgp-подпись?
> Да ты просто кэп!Ты решил повторно пyкнуть в лужу?
Each of these binaries is signed with the Rust signing key, which is available on keybase.io, by the Rust build infrastructure, with GPG. In the tables below, the .asc files are the signatures.platform stable (1.60.0) beta nightly
aarch64-apple-darwin pkg
pkg.asc pkg
pkg.asc pkg
pkg.asc
aarch64-pc-windows-msvc msi
msi.asc msi
msi.asc msi
msi.asc
aarch64-unknown-linux-gnu tar.gz
tar.gz.asc tar.gz
tar.gz.asc tar.gz
tar.gz.asc
https://forge.rust-lang.org/infra/other-installation-methods...
Там есть отдельный шел скрипт и отдельные уже собранные архивы с подписями pgpНо местные анонимные эксперты даже не в состоянии нажать кнопку Other installation methods