Задать вопрос
  • Вернуть владение значения типа структуры из функции на самом деле не возвращение владения, а поинтера на heap?

    vabka
    @vabka Куратор тега Rust
    Нет, эти два примера кода будут делать абсолютно разные вещи.
    В первом случае ты возвращаешь String, который содержит в себе несколько полей: len, capacity, и указатель на буфер.
    Во втором случае ты String ещё в кучу копируешь и возвращаешь указатель на String в куче.

    В этом ты легко можешь убедиться, если посмотришь на ассемблер.

    Ведь нет какой-то волшебной операции вернуть владение

    Она не волшебная, и она существует. Только владение не возвращается, а передаётся.
    Но существует только на уровне типов.

    https://play.rust-lang.org/?version=stable&mode=re...

    Первая функция:
    pushq	%rbx
    	movq	%rdi, %rbx
    	movq	__rust_no_alloc_shim_is_unstable@GOTPCREL(%rip), %rax
    	movzbl	(%rax), %eax
    	movl	$5, %edi
    	movl	$1, %esi
    	callq	*__rust_alloc@GOTPCREL(%rip)
    	testq	%rax, %rax
    	je	.LBB10_1
    	movb	$114, 4(%rax)
    	movl	$1701736041, (%rax)
    	movq	%rax, (%rbx)
    	movq	$5, 8(%rbx)
    	movq	$5, 16(%rbx)
    	popq	%rbx
    	retq

    Вторая:
    pushq	%r14
    	pushq	%rbx
    	pushq	%rax
    	movq	__rust_no_alloc_shim_is_unstable@GOTPCREL(%rip), %r14
    	movzbl	(%r14), %eax
    	movl	$5, %edi
    	movl	$1, %esi
    	callq	*__rust_alloc@GOTPCREL(%rip)
    	testq	%rax, %rax
    	je	.LBB11_6
    	movq	%rax, %rbx
    	movb	$114, 4(%rax)
    	movl	$1701736041, (%rax)
    	movzbl	(%r14), %eax
    	movl	$24, %edi
    	movl	$8, %esi
    	callq	*__rust_alloc@GOTPCREL(%rip)
    	testq	%rax, %rax
    	je	.LBB11_2
    	movq	%rbx, (%rax)
    	movq	$5, 8(%rax)
    	movq	$5, 16(%rax)
    	addq	$8, %rsp
    	popq	%rbx
    	popq	%r14
    	retq
    Ответ написан
    6 комментариев
  • Законно ли создание фанатских игр без монетизации?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли какие-то санкции за использование существующих персонажей/фонов/музыки в фанатских поделках, которые вообще никак не монетизируются

    Зависит от лицензионного соглашения потенциального потерпевшего, если там все запрещено, то:
    - Статья 7.12 КоАП РФ и статья 146 УК РФ (нарушение авторских и смежных прав).
    - Статья 1250 ГК РФ (защита интеллектуальных прав).
    и насколько велик шанс под них попасть?

    Зависит от умственных способностей и настойчивости потерпевшего.
    А если в самой игре указывать всех авторов используемого контента?

    Зависит от лицензионного соглашения.
    но чет стремно на штраф влететь…

    Так можно сорвать джекпот, пока будите сидеть - штраф уже перестанет казаться стремным ;)
    Ответ написан
    4 комментария
  • Почему одно регулярное выражение для одной и той же строки выдаёт разные результаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JavaScript RegExp objects are stateful when they have the global or sticky flags set (e.g., /foo/g or /foo/y). They store a lastIndex from the previous match. Using this internally, test() can be used to iterate over multiple matches in a string of text (with capture groups).
    Кратко - с опциями g и y объект RegExp сохраняет позицию, с которой продолжает поиск при следующем вызове. У вас одинаковые строки и второй вызов начинает с позиции, на которой закончился первый вызов, то есть уже после '.mp3'.
    Ответ написан
    1 комментарий
  • Могу ли я выставить лицензию MIT в проекте, который использует библиотеку с лицензией Apache 2.0?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Да.

    https://www.apache.org/licenses/LICENSE-2.0
    2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

    4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

    You must give any other recipients of the Work or Derivative Works a copy of this License; and
    You must cause any modified files to carry prominent notices stating that You changed the files; and
    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
    If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
    You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
    Ответ написан
    1 комментарий
  • Почему не выпускают процессоры на архитектуре виртуальной машины Java?

    1. А сборщик мусора и всё Java API тоже на уровне железа будешь реализовывать?
    2. Что будешь делать, когда выйдет новая версия Java? Отказываться от нового софта? Отказываться от старого софта и переходить на новый железный процессор?
    3. Что будешь делать со всем тем ПО, которое не для JVM создано?
    4. Уверен ли ты, что сможешь создать аппаратную реализацию java-машины, которая будет эффективнее, чем классический процессор и JIT?
    Ответ написан
    6 комментариев
  • Почему сначала предлагает ввести значение, а потом ключ?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Из-за порядка вызовов методов: сначала вычисляется правая часть привоения, а затем левая.

    Из документации
    Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.
    Ответ написан
    Комментировать
  • Почему у пересечения функций такой ReturnType?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ни в чём. Просто ограничение языка. Видимо слишком сложно было сделать и\или обосновать. Возможно в какой-то следующей версии языка пофиксят.

    Вот issue помеченная как "Design Limitation", там есть workaroud(который не стоит юзать в проде, разве что если очень хочется).
    Ответ написан
    5 комментариев
  • Как получать каждые 12 элементов из массива?

    @GeKskill
    Просто поделите массив на чанки:
    let array = [1,2,3,4,5,6,7,8,9,10,11]
    const chunkSize = 3;
    let chunks = [];
    
    for (let i = 0; i < array.length; i += chunkSize) {
         chunks.push( array.slice(i, i + chunkSize) );
    }
    
    // на выходе
    [ 
    [1, 2, 3], 
    [4, 5, 6],
    [7, 8, 9], 
    [10, 11]
    ]


    Ну или в бэкенде сразу разбивайте, смотря как шаблон выводите.
    Ответ написан
    2 комментария
  • Откуда взялась ассоциативная функция from?

    vabka
    @vabka Куратор тега Rust
    В wasm-bindgen::JsValue Нету impl From for JsValue

    Всё там есть https://docs.rs/virtual-dom-rs/latest/virtual_dom_...
    impl From<Element> for JsValue
    + есть целый ряд blanket impl

    Не работает. Работает только с &element

    Потому что ты реализовал трейт для &element, а не для element.
    Сам же в начале написал, что
    Тут тоже подвоха нет. get_element_by_id() возвращает Option<Element>, а не Option<&Element>

    Вот такое уже работает:
    https://play.rust-lang.org/?version=stable&mode=de...

    Но эти поганые макросы наносят уроны документации, и не видно какие именно есть поля и функции у JsValue.

    Макросы на это влиять не должны. VS Code с rust-analyzer и intellij rust умеют показывать все impl для структуры, в том числе blanket impl и те impl которые возникли в результате вызова макроса.
    Ответ написан
    1 комментарий
  • О прибыльной карьере в российской технологической индустрии?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Отвечу то же, что и россиянам, желающим переехать: Нужно как минимум быть существенно лучше среднего местного программиста, чтобы компенсировать работодателям проблемы с наймом иностранца. В остальном проблем не вижу, на рынке ИТ страны сильный кадровый голод.
    Ответ написан
    14 комментариев
  • Как разделить Cargo.toml на несколько файлов?

    vabka
    @vabka Куратор тега Rust
    Разделить Cargo.toml на несколько файлов нельзя.
    Разделять features на несколько штук я тоже не рекомендую - читать это будет сложно с учётом того, сколько фич в web-sys и как ты скорее всего будешь их добавлять

    В самом web-sys это автогенеренный код, но всё же:
    https://github.com/rustwasm/wasm-bindgen/blob/main...
    Ответ написан
  • Как в Linux дать права на чтение файла определенному пользователю?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Так на чтение или на изменение?
    Включить пользователей u1 и u2 в общую группу, дать этой группе нужные права на файл.
    Учтите, что некоторые программы, не перезаписывают файл при сохранении, а создают временный файл, удаляют текущий, затем перемещают временный под нужным именем. В таком случае надо давать права на изменение каталога, в котором находится файл.
    Ответ написан
    4 комментария
  • Как создать подобную функцию в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Упомянутый метод fadeOut() вероятно, из jQuery?

    Там эти новые методы добавляются самим jQuery и установленными плагинами не к элементам, а к элементам-обёрнутым-в-jQuery всё-таки:
    - elem.fadeOut();
    + $('selector').fadeOut();

    Поэтому посмотрите, может, как писать плагины к jQuery. Именно своим плагином можно добавить новые «методы через точку».
    Ответ написан
    Комментировать
  • Можно ли приостановить функцию до "приёма сигнала"?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Сделать то можно, например так:
    const moveQueue = {
      queue: [],
      index: 0,
      create() {
        let endMoveCallback;
        // создаём висячий промис и присваиваем его разрешение в endMoveCallback
        const movePending = new Promise(resolve => endMoveCallback = resolve);
        // index чисто для лога
        endMoveCallback.index = this.index++; 
        // добавляем в очередь
        this.queue.push(endMoveCallback);
        // возвращаем проис ждущий вызова endMoveCallback
        return movePending;
      },
      last() {
        // забираем из очереди последнее добавленное
        return this.queue.pop();
      }
    }
    
    async function turn() {
      await startMove();
      await startShoot();
    }
    
    function startMove() {
      console.log('startMove', moveQueue.index);
    
      return moveQueue.create();
    }
    
    function endMove() {
      const activeMoveEnd = moveQueue.last();
      if (activeMoveEnd) {
    
        console.log('endMove', activeMoveEnd.index)
    
        activeMoveEnd();
      } else {
        onsole.error('`endMove` called when there are no active moves')
      }
    }
    
    function startShoot() {
      console.log('startShoot');
    }
    
    turn();
    setTimeout(() => endMove(), 1000)

    Но скорее всего у тебя что-то не то с архитектурой, и тебе лучше будет почитать книжки по геймдеву.
    Ответ написан
    Комментировать
  • Как в линукс проверить, запущено ли net приложение?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    Тупо при запуске программы создай /tmp/procname.pid в которой впиши pid .
    При запуске проверяешь наличие файла, смотришь в него и убеждаешься что по такому pid процесс живой.
    При закрытие программы удаляешь файл.
    Другими приложениями просто смотри наличии файла и то что процесс живой.
    Ответ написан
    2 комментария
  • Можно ли без Js сделать все остальные ссылки серыми при наведении на одну из них?

    develx
    @develx Куратор тега CSS
    Web developer
    Можно
    https://codepen.io/xdevelx/pen/rNoWmWX

    если устраивает поддержка браузеров :has

    Только почему меню без ссылок, зачем ему фиксированная ширина и grid-gap не во всех браузерах для display flex будет работать (для flex используйте gap). И зачем justify-content: space-between и gap одновременно?

    Вариант без :has по мотивам коммента Ankhena
    https://codepen.io/xdevelx/pen/dywOWJW

    Но в этом варианте, если навести курсор между пунктами меню, у всех пунктов цвет станет серым. А это косяк, хоть и небольшой.
    Ответ написан
    7 комментариев
  • Как правильно выбрать фреймворк и яп для проекта, если ты заказчик?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак. Выбор инструмента - это задача тимлида и/или техлида. Т.е. ведущего/главного разработчика, отвечающего за принятие ключевых технических решений. Ваша задача, как заказчика, четко оформить требования, ограничения и сформировать начальное ТЗ и описание, что вам требуется от проекта, прототипы интерфейса, например. Без вникания в технические детали. Т.е., "хочу чтобы были фичи такие-то и работил они так-то, ограничения такие-то, требования такие-то". Далее уже задача найти разработчика/команду с большим или достаточным для данного проекта опытом. Далее из начального ТЗ формируется полноценное техническое задание: описывается весь требуемый функционал, рисуется дизайн, прописываются требования, ограничения и прочие хотелки. И на основе ТЗ, тим/тех лид уже подбирает/подбирают наиболее оптимальные и конкретные инструменты и решения, основываясь на собственном опыте и знаниях для конкретно этой задачи. Например, если человек хорошо знает несколько разных инструментов и есть достаточный опыт их использования - он может реализовать проект используя любой из них как одинаково хорошо, так и одинаково плохо. У разных ЯП и фреймворков свои плюсы и минусы. Далее из ТЗ формируется более детальное ЧТЗ и происходит разработка проекта.

    Вот вы говорите:
    Нужно будет выполнять много запросов к БД

    Важная быстрая скорость работы нашего сайта

    Много/быстро это сколько? 100 запросов в час? 1000 в минуту? 1М в секунду? Загрузка страницы за 30/10/1с или даже 100мс? А к какой именно БД? Какая характеристика самих данных и какого типа запросы? На какое количество соединений? В каком регионе? Есть ли там тяжелые или еще какие-то вычисления? Медиа файлы - картинки, видео? Тут очень много нюансов. В идеале следует определиться с конкретными значениями/параметрами и их описать в ТЗ. Ну или определить примерное, а фактическое значение определить на стадии прототипа/MVP и/или провести какое-то исследование/тестирование. Можно потратить десяток лямов на написание крутого кода на го/расте/С++/ассемблере в течении года и все будет летать на простейшем сервере. А можно купить свой сервер за лям (ну, условно, конечно), нанять питонщика или PHP-ника за 300к и он за пару-тройку недель добьется такого же результата. Большинство веб-задач сегодня достаточно просто или с минимальными усилиями решаются абсолютным большинством решений для веба. Да, у всех решений есть свои плюсы и минусы.

    Безопасность от всяческих XSS и SQL атак.

    Вот с этим проще: использовать популярные OpenSource решения, регулярно проводить тесты, нанять отдельно опытного разработчика, красноглазика и пентестера - и тратить на них деньги, пока деньги не кончатся или не будет достигнут необходимый уровень безопасности. Безопасность противоположна удобству, защита отстает на шаг от атак. Риск есть всегда и надо просто быть готовым к последствиям и иметь запасной плат хотя бы в общих чертах.

    А так - уже правильно посоветовали сразу брать дот-нет, т.к. у вас требование к использованию конкретной библиотеки для дот-нета.
    Ответ написан
    1 комментарий
  • В чем отличие ngnix от golang?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    На самом деле эта путаница по-человечески очень понятна и объяснима.
    Вы, как фронтендер, воспринимаете "веб-сервер" как такой черный ящик, "то место, откуда фронт запрашивает данные".

    В то время как этот термин может означать несколько разных понятий.
    1. Веб-сервер в вашем, широком понимании. Бэкенд целиком.
    2. Также веб-сервером может называться и сам компьютер, на котором все это крутится.
    3. В более узком смысле - это программа, которая принимает НТТР запросы. Вот это nginx и есть. Но сам по себе, без помощи других программ, он не может полностью представлять услуги веб-сервера. Например, в нем нет базы данных. Это, скорее, как правильно написали в соседнем ответе - такой прокси-сервер, который частично обрабатывает запросы сам (например к статическим файлам), а частично - проксирует запросы на другие программы.

    И вот на Го (или РНР, Питоне, JS, C#) как раз и пишется эта программа, которая, к примеру, обращается в БД, получает нужные данные и отдает их Nginx-у, который уже и возвращает их клиенту
    Ответ написан
    14 комментариев
  • Нужно ли писать суффиксы литералов?

    @res2001
    Developer, ex-admin
    Однако с точки зрения оптимизации, эстетики и/или стандартов, как писать все-таки лучше

    Как хотите.

    На самом деле опциями компилятора можно задать выдавать предупреждения (или даже ошибку) на подобное не явное приведение типов. Тогда это будет "не красиво" или даже вообще ошибка компиляции, и тут вам придется исправлять ситуацию добавив суффикс.
    Но подобные опции используют не часто. На сколько помню для gcc это опции -Wsign-conversion и/или -Wconversion но могу ошибаться. И, по моему, они даже не включаются через -Wall -Wextra -pedantic - обычно используют этот набор опций, когда хотят заставить компилятор выполнять больше проверок кода.
    Немного модифицировав опции можно добиться не предупреждения, а ошибки.

    Если вы пишите исполняемый файл, то вы контролируете опции сборки в makefile (или чем вы там пользуетесь) и вас этот вопрос может не парить вообще.
    Если вы пишете библиотеку, которую распространяете в исходниках, то есть вероятность, что пользователь при сборке захочет добавить своих опций и тогда ошибки/предупреждения могут проявится. Можете расставить суффиксы для обхода потенциальных проблем, а можете забить и оставить на усмотрение конечного пользователя библиотеки.
    Ответ написан
    Комментировать