• Как скачать Rust IDE JetBrains на ubuntu?

    vabka
    @vabka
    Токсичный шарпист
    Ставишь Jetbrains toolbox: https://www.jetbrains.com/toolbox-app/ - через него ставишь clion (платно, но зато есть дебаг) или intellij idea community (бесплатно, но без дебага)
    А потом плагин: https://intellij-rust.github.io/
    Ответ написан
    Комментировать
  • Rust сырой в ближ. время?

    vabka
    @vabka
    Токсичный шарпист

    Может ли на данный момент потягаться по кол-ву библиотек в web с Golang и в машинном обучении с Python?

    С питоном в ML врядли, тк это тупо не его сфера. В вебе есть actix-web
    до сих пор еще дорабатывают, вышел ли в продакшен?

    Давно в продакшене. Дорабатывают всё и всегда. Если яп не дорабатывают, значит он умер.
    Планируется ли что-то в ближ. год/два?

    Что-то да.
    Ответ написан
    Комментировать
  • Rust сырой в ближ. время?

    bingo347
    @bingo347
    Crazy on performance...
    Подскажите пожалуйста какова на данный момент ситуация с Rust
    Дефицит вакансий, дефицит грамотных разработчиков. Те что есть хотят много денег.
    до сих пор еще дорабатывают, вышел ли в продакшен?
    он "вышел в продакшен" 5-6 лет назад, а насчет доработок - этот процес вечен, ну или пока язык не забросили, ну или как с Go не уперлись в собственный говнокод
    Может ли на данный момент потягаться по кол-ву библиотек в web с Golang и в машинном обучении с Python?
    Ну так посмотрите сами: https://crates.io/
    Планируется ли что-то в ближ. год/два?
    https://blog.rust-lang.org/2020/09/03/Planning-202...
    Ответ написан
    Комментировать
  • Асинхронность в dart?

    Lucian
    @Lucian
    https://t.me/BusinessAndFreelance
    К примеру вы отправили запрос в сеть чтобы получить фоточку, если использовался синхронный код, то поток бы заблокировался и приостановились все задачи и функции, пока фоточка идет из сети.

    В случае асинхронного, планировщик не ждет пока придет ответ и передает управление следующей функции в месте где написано await. Когда придет ответ с фоточкой, планировщик снова передаст управление в то место где был написан await.

    "Изолятом" в данном случае выступает функция обернутая во Future либо с указанием async.
    — Код внутри изолированной функции будет выполнен последовательно.
    — Функции обернутые во Future или определенные как async будут выполнены асинхронно, без ожидания выполнения других таких же асинхронных функций.
    — Если вызвать sleep(300) в обычной функции, все уснет на 5 минут, ничего происходить не будет.
    — Если вызвать await sleep(300) в асинхронной, то уснет только эта функция.
    await указывает планировщику что тут функция хочет подождать и он может передать управление любой другой.

    Если бы наш мир был однопоточный и синхронный, то вы бы не проснулись утром, если бы я все еще продолжал писать это сообщение. Если бы наш мир был однопоточный и асинхронный, то планировщик отключал бы меня на какое-то время, при каждом упоминании await в этом ответе, чтобы другие люди могли заниматься своими делами.
    Ответ написан
    1 комментарий
  • Почему In Memory Database не автогенерирует int свойство?

    @netcore Автор вопроса
    Решил по-другому в OnModelBuilding

    if (DataBase.IsInMemory())
    var autoGenIntProperties = modelBuilder.Model.GetEntityTypes()
                    .SelectMany(t => t.GetProperties())
                    .Where(p => p.ClrType == typeof(int) && p.ValueGenerated != ValueGenerated.Never);
    
                foreach (var property in autoGenIntProperties)
                    property.SetValueGeneratorFactory((p, t) => new InMemoryIntegerValueGenerator<int>(p.GetIndex()));


    Это скорее всего потому что:
    1. Ключи понятно как инкрементить, а кастомные поля нет
    2. У каждой бд реализация этого кейса разная, по этому нужно явно указывать в InMemory как отыгрывать этот кейс

    Странно что в апишке не предусмотрели этот кейс обязательного использования инкрементации при инициализации, что бы юзеры не ломали голову часами
    Ответ написан
    Комментировать
  • Можно ли на Rust написать свой язык?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Какие задачи решают на Rust, а какие на Golang?

    bingo347
    @bingo347
    Crazy on performance...
    Какие задачи решают на Rust
    любые. Rust - язык общего назначения, применимый к большинству возможных задач. Rust достаточно высокоуровневый для написания на нем прикладного ПО и компилируется в достаточно эффективный машинный код, для применения в ядрах ОС, драйверах или embedded разработке. Так же Rust на сегодня имеет самый маленький размер при компиляции в wasm, что критично для использования в web. Я честно не знаю такой сферы, к которой бы не подошел Rust.
    Единственной проблемой в применимости Rust я вижу недостаточную его распиаренность в РФ, что часто бывает самым важным критерием для "манагеров" и прочих людей принимающих решения о используемом стеке.
    а какие на Golang
    Golang тоже язык общего назначения, но имеющий ряд ограничений:
    - Крайне тяжелый рантайм не дает возможность использовать его в wasm, embedded или компонентах ядра.
    - Необходимость в сборке мусора опять таки ограничивает разработку для embedded или компонентов ядра.
    - Отказ от llvm в качестве бэкенда компилятора ограничивает число целевых платформ.
    Можно один заменить другим?
    Rust спокойно заменяет Golang в любой возможной на последнем задаче, наоборот же иногда имеем ряд ограничений.

    Вместо P.S.:
    Golang скорее всего окажется более быстрым для прототипирования и быстрого старта. Однако отсутствие полиморфизма в любом виде (утиная типизация не в счет) и ограниченность одной парадигмой структурного программирования делает этот язык крайне дорогим в поддержке. Так же этому (и быстрому прототипированию и дорогой поддержке кода) способствует лютая ненависть создателей языка к принципу DRY.
    Rust имеет такую редкую сегодня строгую типизацию, одним из нюансов которой являются концепции владения и заимствования (которые позволяют делать автоматическое управление памятью в compile time), что порождает с одной стороны высокий порог входа в технологию (что сглаживается человекопонятным выводом компилятора, если входящие умеют читать, что еще более редко встречается сегодня, чем строгая типизация), но так же удешевляет поддержку продукта длительное время. Так же надо понимать, что Rust не спасет от кривых рученок быдлокодеров (разве что они не смогут его освоить), так как при большом желании можно сделать и утечки памяти и дедлоки и гонки данных (хотя в Golang это все сделать на порядок проще).
    Ну и надо не забывать, что много где присутствует hype-driven-development и Golang распиарен, а Rust нет.
    Ответ написан
    3 комментария
  • Rust - ещё один убийца c/c++?

    @deliro
    Rust лучше С/С++ во многих (наверное, почти всех) аспектах. Но в сравнении с С++ и тем более Си он слишком молод. Непопулярность языка ещё обуславливается тем, что рынок полностью забит Си и плюсами — миллионы строк кода и библиотек уже написаны на С/С++. Кто их будет переписывать?

    Так же, не было никакой значимой маркетинговой кампании по популяризации Rust. Я случайно услышал об этом языке на Moscow Python Conf++, до этого я думал, что когда говорят про Rust, имеют ввиду игру.

    Плюс, Rust — язык очень нишевый, как и С/С++. И эта ниша — системное или околосистемное программирование. Операционные системы, драйвера, высокопроизводительные системы, игровые (и любые другие) движки, embed — вот удел раста. И в этих сферах не принято, как, например, в JS'е менять фреймворки и версии языка раз в неделю. Сообщество там крайне консервативное.

    К тому же, у Rust очень высокий порог входа. Вот прям очень. Если в контексте C++ постоянно шутят про книги "выучить С++ за 24 часа", то в контексте Rust можно шутить над книгами "выучить Rust за неделю". У их прекрасной парадигмы zero-cost abstractions на самом деле есть cost — сложность понимания. За отсутствие сборщика мусора и необходимости чистить за собой память придётся заплатить многими часами войны с компилятором, а именно — с borrow checker'ом. И это только одна сложность

    Когда начинаешь понимать Rust, всё идёт прям отлично. Но до этого момента придётся пройти ад и Израиль, который С/С++'еры не хотят проходить. Потому что они уже его прошли, когда учили С/С++ и там было намного хуже.

    Я бы очень хотел, чтобы Rust заменил С/С++, он объективно лучше. Но вряд ли это произойдёт в ближайшие лет 10
    Ответ написан
    6 комментариев
  • Как вызвать public static async Task в Main?

    Chronicler
    @Chronicler
    Программист
    Сделать Main возвращающим async Task и уже в нем эвэйтить что угодно.
    В настройках проекта поставьте версию языка 7 или 8
    Ответ написан
    Комментировать
  • С чего начать программирование?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Для начала вам нужно научиться искать и анализировать информацию. Во-первых, программистом без этого всё равно не стать. Во-вторых, вы бы могли найти сотни других подобных вопросов, на которые уже есть ответы.
    Ответ написан
    Комментировать
  • Выделяется ли память при передачи slice?

    ozkriff
    @ozkriff
    Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
    Как я понял срез это просто ссылки на элементы массива, а значит не будет выделяться память ?

    Если вынести за скобки "boxed slice" (Box<[u8]>, см. https://doc.rust-lang.org/reference/types/slice.html ), то обычные срезы (`&[u8]` и `&mut [u8]`) никакой дополнительной памяти не выделяют - только указатель на первый элемент + usize для хранения количества элементов.

    Равноценен ли массив с ссылками на элементы другого массива - срезу ?

    `[&u8]`? Нет - как минимум потому, что потребует места под хранение указателя на каждый элемент.

    Допустим у меня массив байтов и мне нужно его превратить в строку.

    https://doc.rust-lang.org/std/str/fn.from_utf8.html
    Ответ написан
    Комментировать
  • Rust, как вернуть struct?

    @forspamonly2
    struct вернуть не проблема - он отдаётся вместе с владением наружу, и всё.

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

    и компилятор тут ругается вполне осмысленно: вы пытаетесь отдать владение парсером наружу, чтобы вызывающая функция сама грохнула его, после того как попользуется. но при этом прочитанный из файла текст xml остаётся во владении функции getconfig, и грохнется сразу же при её завершении. а этот парсер без него не может.

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

    либо взять какой-нибудь другой парсер, который не стесняется получать себе память сам.
    Ответ написан
    Комментировать
  • Чем нынче защищать C# проект?

    Griboks
    @Griboks Куратор тега C#
    Лицензией, как и всегда. Неужели вы думаете, что какие-то там кувырки с кодом защитят его от взлома? Если да, то смотрите в строну риалтайм онлайн сервера подтверждения, как в онлайн играх.
    Ответ написан
    Комментировать
  • Почему резко упал размер приложения?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    вы уж простите, но на такой вопрос...будет очень дурацкий ответ.

    размер "упал" ?? вроде понятно что уменьшился, но не факт)

    из за чего? из-за того что поменяли что-то)

    может быть причиной? может, а может и нет)

    скорее всего вам придется вспоминать что именно случилось в момент изменения размера.
    новая версия юнити, перешли с mono на ill2cpp, убрали поддержку x86.
    может просто удалили что то из папки StreamingAssets или что-то подобное))

    пока что ваш вопрос выглядит как "а у меня кампутер не включается, что починить надо?"
    Ответ написан
    5 комментариев
  • В каком стеке web технологий одновременно: высокий порог входа, высокие зарплаты и в целом не проблема найти удалёнку?

    Robur
    @Robur
    Знаю больше чем это необходимо
    высокий порог входа больше не в технологиях а в решаемых задачах.
    Если вы предлагаете услуги создания лендингов - то порог (и оплата) на уровне лендингов и не важно на чем вы его запилите

    Развивайтесь в сторону создания более сложных вещей - там и технологии поймутся.
    Более сложные - это всевозможные веб-приложения, забудьте о сайтах.
    А приложения могут быть уже какими угодно и с большим разбросом по сложности - может быть CRUD админка которую любой индус накидает, а может быть какая-нибудь замороченная система бизнес-аналитики, где кнопки в браузере - это только 10% от всего функционала, и это одна из причин почему ищут фуллстеков. Фуллстек в состоянии взять фичу и сделать её полностью, а не "накидать кнопок и ждать бекенд" или "сделать апишку и отдать фронту".
    Ответ написан
    14 комментариев
  • Почему появилась мода на новый синтаксис?

    Вообще мода на автоматический вывод типов.
    val valName = Value
    var varName = Value
    let valName = Value
    auto varName = Value
    и т.д.
    Ответ написан
    Комментировать
  • Почему появилась мода на новый синтаксис?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    То есть varName : TypeName вместо TypeName varName ?


    Читабельность. "идентификатор varName содержащий TypeName" намного логичнее записывать именно в таком порядке. Ну и да, этот синтаксис не новый, далеко не новый.
    Ответ написан
    Комментировать
  • Как ограничить тип T примитивными типами f32 и f64?

    bingo347
    @bingo347
    Crazy on performance...
    Ограничить дженерик-тип можно только типажами (traits).
    Что Вы хотите сделать? Какие методы f32 и f64 Вам нужны?
    Возможно данные методы уже реализованы в типажах стандартной библиотеки - тогда нужно ограничивать их суммой.

    Другой вариант, сделать свой типаж, ограничить дженерик тип им, имплементировать этот типаж для f32 и f64
    Имплементация должна представлять обертки над нужными действиями

    UPD: если нужно ограничение дженерик, на использование метода exp у f32 и f64:
    Типаж-контракт на метод exp:
    trait Exp {
        fn exp(self) -> Self;
    }
    
    impl Exp for f32 {
        fn exp(self) -> Self {
            <f32>::exp(self)
        }
    }
    
    impl Exp for f64 {
        fn exp(self) -> Self {
            <f64>::exp(self)
        }
    }


    так же можно воспользоваться следующим крэйтом:
    https://crates.io/crates/num
    Ответ написан
    2 комментария
  • Что означает "?v=1" при подключении .css?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Означает, что какая бы ни была кеширующая система на сервере и на клиенте, добавление такой фигни форсирует кеш (почти) без вариантов, потому что это как бы другой файл. То есть если что-то изменили в css, можно это добавить, и в новой страничке загрузится новая версия css, а не из кеша.
    Ответ написан
    4 комментария