[🔥ЗАМЫКАНИЯ] Замыкания в Rust. Синтаксис и применение замыканий. Замыкания с заимствованием/кражей 😎

แชร์
ฝัง

ความคิดเห็น • 28

  • @optimizationguru
    @optimizationguru ปีที่แล้ว +48

    Будет круто увидеть работу с winapi на rust

    • @СергейКурганов-о2э
      @СергейКурганов-о2э ปีที่แล้ว +2

      Не лучше с ffi, это даст опыт работать с библиотеки dll, so, на любом языке.

    • @Teardrop-u4z
      @Teardrop-u4z ปีที่แล้ว

      @@СергейКурганов-о2э а зачем все это? это еще имеет спрос?

  • @Stefano-dj4mx
    @Stefano-dj4mx ปีที่แล้ว +3

    Вы наверно лучший учитель, которого я встречал, никто ранее мне не объяснял материал так доступно, как это делаете вы, спасибо вам!

  • @Teardrop-u4z
    @Teardrop-u4z ปีที่แล้ว +1

    Спасибо брат. Лол кек чебурек. Очень крутые туториолы. Понятные. Однако есть и минусы. Это байтовые заголовки которые не к месту) мы же не грибной чай продаем)) не плохо было бы изучить хоткеи редакторов. И я смотрел 2х потому что очень медленно. В любом случае продолжай. у темы отличное будущее. хотелось бы больше про pub, макросы и заимствение по подробнее

  • @iBarmalei
    @iBarmalei ปีที่แล้ว

    👍 красавчик

  • @asdsdsasadsasad
    @asdsdsasadsasad ปีที่แล้ว +1

    Всем привет! Как в Rust извлечь архив zip в текущую папку? Где вообще посмотреть примеры кода? Какие ТГ каналы по расту?

  • @sunmaxplay6491
    @sunmaxplay6491 ปีที่แล้ว +2

    Привет, у меня есть вопрос. У меня в проекте есть winput::message_loop().start() оно занимает главный оконный процесс, но мне нужно добавить не в оконный проект ещё и tray он тоже самое делает, и вот сколько бы я не пытался инициализировать tray в другом потоке, или message_loop происходит одно и тоже, одно из этого не работает (в зависимости от того что первое запускается), что мне с этим делать?(

  • @SunHail8
    @SunHail8 17 วันที่ผ่านมา

    лучше называть "кложура" :)

  • @ruffle17
    @ruffle17 ปีที่แล้ว +2

    самый большой вопрос к разрабам этого языка с какого лешего они изобретали велосипед а не взяли стандартный синтаксис во многих языках для замыканий () => , зачем придумали какую то дичь с неписать слово return - это уменьшает читабельность т.к. ключевые слова подсвечивают редакторами кода и это наглядно видеть где стоит ретёрн, а если влом им было писать return ну сократите до ret. Честно говоря язык вызывает больше раздражение нежели принятие, если переходишь на него с джавы или си шарпа. Не знаю как си-шники на него смортят, единственный плюс у языка это новый подход к управлению памятью. А остальное либо спорное либо отвратное по синтаксису.

    • @T0unFl3it
      @T0unFl3it ปีที่แล้ว

      Согласен про замыкания, "стандартный" синтаксис чуть лучше смотрелся бы😊 Хотя синтаксис - это, конечно, спорный вопрос, разным людям разный нравится, естественно🙂 Я бы голосовал за Python-style синтаксис (как в Nim, например), если бы мое мнение имело хоть какое-то значение (и теперь уже слишком поздно для этого😊). То, что `return` опциональный - это скорее плюс для функционального стиля, принятого в Rust (главное, не забывать писать это слово для читаемости, когда у функции сложная логика). А что касается системы владения, заимствования и RAII - это круть, надеюсь, что появятся ещё языки с таким элегантным управлением памятью👍 В качестве будущего пет-проекта попробую задизайнить и написать что-нибудь в этом роде, хотя бы просто ради забавы😊

    • @MrLotrus
      @MrLotrus ปีที่แล้ว

      Можно писать return. А можно не писать. По поводу "отвратительно по синтаксису" это вкусовщина.

  • @PimenovMA
    @PimenovMA ปีที่แล้ว

    Вот такую конструкцию упустили |_|

  • @ИероглифСтёршийся
    @ИероглифСтёршийся ปีที่แล้ว +2

    Ну вообще-то, то что ты описываешь как замыкание, это лямбда фнкция. А замыкание это функция - объект первого класса которая содержит в себе окружение. Объект первого класса - это, грубо говоря, всё что можно присвоить переменной, передать как параметр или вернуть из функции. Окружение это объекты, к которым у функции есть доступ - при этом эти объекты могут быть приватными и объявленными в теле объекта (другой функции или метода, например) создавшего саму эту функцию.
    А вот сейчас потролю! Ой ну прям не могу!
    И с учетом сказанного выше - ты до 11-й минуты показывал и рассказывал про лямбды.
    `is_even` твоя проверяет что число ЧЕТНОЕ, а не "парное". А парными могут быть два числа, а не одно.
    "аннотировать" - это из какого лангуажа вордичко, бро? В рашене это назвается "декларировать", "объявлять", "указывать" в крайнем случае. Мож тебе русский подучить, а потом уж за языки программирования браться? ;-)
    Более того аннотации они в Python есть - т.к. там ты пишешь название типа "для себя" фактически а присвоить переменной можешь потом любой тип, т.к. язык этот, без строгой типизации - а Rust со строгой типизацией и там термин "аннотация" не подходит.
    Вот вся эта тирада про "неявности" - сокращается до простой фразы: "Компилятор не может вывести тип переменной, анализиря код который вы написали." "infer" - делать вывод.

    • @MrLotrus
      @MrLotrus ปีที่แล้ว +2

      Слово аннотация вошло в русскую терминологию и встречается много где, включая книги. Питон язык со строгой типизацией, но динамической. Термин annotate используют сами создатели языка в своем rust book.

    • @ИероглифСтёршийся
      @ИероглифСтёршийся ปีที่แล้ว

      ​@@MrLotrus я в книгах слово Аннотация (тем более аннотирование) я не встречал пока. "Объявление типа", 'имя типа", "указание типа" - но не аннотирование. IMHO - это, к сожалению, укрепляющяся русификация английского слова, вызванная ленью переводить, что читешь.
      Да, насчёт Py я погорячился, и в доках rust - написано "type annotation", вы правы. Но переводится "type annotation" на Русский как "Объявление типа" и т.д. (смотри выше).

    • @MrLotrus
      @MrLotrus ปีที่แล้ว

      @@ИероглифСтёршийся интересно. Не задумывался. Надо поискать варианты перевода в более ранних книгах.

    • @T0unFl3it
      @T0unFl3it ปีที่แล้ว +1

      Есть ещё такой вариант терминологии:
      - *Аннотация типа* - это способ явно указать в коде тип какого-либо выражения, например, символического имени переменной; иными словами, указание типа. (Такой тип должен быть известен компилятору: быть встроенным, импортированным из какой-либо библиотеки или объявленным в самой программе).
      - *Объявление типа* - это способ ввести новый именованный тип данных как часть библиотеки или исполняемой программы, чтобы его в дальнейшем можно было использовать.
      По поводу лямбд: во многих языках не выражено в явном виде различие между простым указателем на функцию (тип `fn` в Rust) и замыканием (в Rust каждое отдельное замыкание и вообще функция, насколько я понимаю, представляется объектом уникального неописываемого типа, реализующего типаж `Fn` [здесь заглавная буква]). И вообще, жаргонное слово "лямбда" часто просто обозначает "функциональный объект" или "анонимную функцию", безотносительно к тому, используется ли замыкание для представления такой функции в каждом конкретном случае.

  • @ДимаБочаров-н8ы
    @ДимаБочаров-н8ы ปีที่แล้ว +2

    Я сперва восторженно отнёсся к rust, и даже начал на нём практиковаться, но со временем он меня откровенно стал заёбывать. Он какойто не естественный. В нём постоянно какието надуманные проблемы. Замечу что я много писал на С,С++ на комп и для микроконтроллеров, хорошо знаю ассемблер и часто смотрю как скомпилен тот или иной кусок кода, когда это мне важно или интересно. Пару лет писал на Java, тоже норм язык. В последнее время много пишу на JavaScript и он мною ощущается как наиболее естественный язык для программирования. А вот rust это какойто изопов язык. Мне в С++ шаблоны кажутся немного грамоздкими, хотя и весьма замечательным инструментом и я ожидал найти в rust чтото более лаконичное а нашёл неприятный синтаксис, совершенно не похожий на привычный мне в других языках. Нахера было делать match вместо switch, зачем эти fn перед функцией! Глубоко поразило отсутствие требования ключевого слова return во многих случаях, бля это же делает код ничитаемым и трудно искать что возвращает сложеая функция. Короче ну его нахер....

    • @СергейКурганов-о2э
      @СергейКурганов-о2э ปีที่แล้ว +4

      Вы просто не поняли match, тут совершенно нет сходства со switch. Это как сравнить строку с регулярным выражением. Фу фу JS, только TS, я лентяй, пусть язык проверяет ошибки. Rust тоже проверяет ошибки в отличие от си. А ругается ржавый, потому что вы не поняли его заимствования, как поймёте, удивитесь что ржавый перестал пищать.

    • @ДимаБочаров-н8ы
      @ДимаБочаров-н8ы ปีที่แล้ว +3

      @@СергейКурганов-о2э Да не, ты не вкурил суть притензий,мне костыли, в качестве тупого компилера, не нужны, я лучше него понимаю что написал, дело не в твоей лени, а в твоей "тупости", ты не понимаешь что делаешь и тебе надо кастыли из компилера, а меня он душит....
      И желание авторов языка сделать синтаксис по своему, не как у других, по сугубо моему мнению, неудачная идея...
      Кстати Вы на С++ как, пишеите? Или сразу стали писать на rust....
      А ТупаСкипт это такое же душнилово для тупых, не берита на свой счёт, возможно вы умнее меня, но мне не надо костылей, я и так понимаю что во что я преобразовываю. И ебля с отладкой мне не нужна, и компиляция на интерпретируемом, языке это верх мазохизма. Это как надо себя ненавидеть чтобы компилять для интерпретатора, это убивает весь цимес! Хотя не скажу что всегда удаётся избежать тупаскрипта, корпоративные требования обязывают, плююсь а компиляю...

    • @РусланЮсуфов-ф3ш
      @РусланЮсуфов-ф3ш ปีที่แล้ว +1

      @@ДимаБочаров-н8ы , на больших проектах не представляю работу без тайпскрипта. Дело в банальном понимании того, что сделал другой разработчик. В обычном джс-е придётся ставить кучу логов и смотреть, что возвращает функция, тогда как в ТСе всё будет описано типами/интерфейсами и это значительно упрощает понимание. Я в своё время прошёл через эту боль и никому такого не желаю

    • @ДимаБочаров-н8ы
      @ДимаБочаров-н8ы ปีที่แล้ว

      @@РусланЮсуфов-ф3ш Ага, как-же, функция вернёт аню и ты сразу поймёшь ... ))). Я то гляну в отладчике, поставив точку останова на возврате функции, а ты в этой каше накомпиленного..., скорее всего будешь вставлять отладочную печать в консоль.

    • @PimenovMA
      @PimenovMA ปีที่แล้ว +3

      Вам ни кто не запрещает использовать return. Матчинг гораздо более "глубокая" конструкция, не только ветвление. Попробуйте почитать/проанализировать чужой код, поймёте значение слова "говногод", это к вашему замечанию про непонятный синтаксис.