Задать вопрос
  • Какие языки используют для создания приложений?

    1Tima1, последнее - это ассемблер, да это можно понять, ассеблер еще более примитивный чем C, десяток регистров да десяток команд, которые позволяют общаться напрямую с процессором и ОС.
    Когда Вы компилите свою программу в elf (под Linux) - внутри именно такой код, только в бинарном виде (каждой такой команде соответствует своя последовательность байт, которую понимает процессор)
    Вот только писать на этом что-то серьезное - тот еще гемор, поэтому на асме пишут только небольшие фрагменты, когда нужно точно быть уверенным, что будет делать процессор
  • Какие языки используют для создания приложений?

    1Tima1, тем, что на низкоуровневых языках мы ближе к ОС/железу
    Возьмем банальный hello world в консоль

    На JS (node) я просто напишу:process.stdout.write("Hello world\n");и это будет работать, и мне не надо вникать как

    На C тоже самое уже будет так:
    #include <unistd.h>
    #include <string.h>
    
    int main() {
      char* str = "Hello world\n";
      write(1, str, strlen(str));
      return 0;
    }


    А на ассемблере (сам не псих чтоб писать, получил из сишного кода выше командой gcc -S) уже так:
    .section        .rodata
    .LC0:
            .string "Hello world\n"
            .text
            .globl  main
            .type   main, @function
    main:
    .LFB0:
            .cfi_startproc
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            subq    $16, %rsp
            leaq    .LC0(%rip), %rax
            movq    %rax, -8(%rbp)
            movq    -8(%rbp), %rax
            movq    %rax, %rdi
            call    strlen@PLT
            movq    %rax, %rdx
            movq    -8(%rbp), %rax
            movq    %rax, %rsi
            movl    $1, %edi
            call    write@PLT
            movl    $0, %eax
            leave
            .cfi_def_cfa 7, 8
            ret
            .cfi_endproc
  • Как изменить редактор по умолчанию в git?

    Алексей Тен, переменные окружения на то и переменные, что могут изменяться
  • С чего правильно начинать изучение JavaScript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Илья Кантор, посмотрите на досуге:
    https://www.youtube.com/watch?v=cCOL7MC4Pl0
    https://www.youtube.com/watch?v=8aGhZQkoFbQ
    https://developer.mozilla.org/ru/docs/Web/JavaScri...

    У Вас в учебнике же материал не соответствует действительности, вводит в заблуждение
  • С чего правильно начинать изучение JavaScript?

    bingo347
    @bingo347 Куратор тега JavaScript
    lloydbanks, смотрите, вот достается Вам в руки старый легаси проект и в дебрях лапшекода Вы находите
    вот такое чудо
    /**
     * Crossbrowser event adding
     *
     * http://javascript.ru/tutorial/events/crossbrowser
     */
    
    define([], function () {
      var uid = 0;
    
      function fixEvent (event) {
        event = event || window.event;
    
        if (event.isFixed) {
          return event;
        }
    
        event.isFixed = true; 
    
        event.preventDefault = event.preventDefault || function () {
          this.returnValue = false;
        };
    
        event.stopPropagation = event.stopPropagaton || function () {
          this.cancelBubble = true;
        };
    
        if (!event.target) {
          event.target = event.srcElement;
        }
    
        if (!event.relatedTarget && event.fromElement) {
          event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
        }
    
        if (event.pageX == null && event.clientX != null) {
          var html = document.documentElement,
            body = document.body;
    
          event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
          event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
        }
    
        if (!event.which && event.button) {
          event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3 : (event.button & 4 ? 2 : 0)));
        }
    
        return event;
      }  
    
      /* this = element */
      function commonHandle (event) {
        event = fixEvent(event);
    
        var handlers = this.events[event.type];
    
        for (var g in handlers) {
          var handler = handlers[g],
            ret = handler.call(this, event);
    
          if (ret === false) {
            event.preventDefault();
            event.stopPropagation();
          }
        }
      }
    
      var exports = {
        /**
         * custom event polyfill
         * @param {String} name Event name
         * @param {Object} options {bubles: Boolean, cancelable: Boolean, detail: {}}
         *
         * @return {EventObject} event instance
         */
        create: function (name, options) {
          try {
            new CustomEvent('IE has CustomEvent, but doesn\'t support constructor');
          } catch (e) {
            var CustomEvent = function(event, params) {
              var evt;
              params = params || {
                bubbles: false,
                cancelable: false,
                detail: undefined
              };
              evt = document.createEvent('CustomEvent');
              evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
              return evt;
            };
          }
    
          return new CustomEvent(name, options);
        },
        
        /**
         * Call handler only once by event type
         */
        addOnce: function (elem, type, handler) {
          var fn = function () {
            handler.apply(this, arguments);
            exports.remove(elem, type, fn);
          };
    
          this.add(elem, type, fn);
        },
        
        /**
         * Add handler to element by event type
         */
        add: function (elem, type, handler) {
          if (elem.setInterval && (elem != window && !elem.frameElement)) {
            elem = window;
          }
    
          if (!handler.uid) {
            handler.uid = ++uid;
          }
    
          if (!elem.events) {
            elem.events = {};
            elem.handle = function (event) {
              return commonHandle.call(elem, event);
            }
          }
    
          if (!elem.events[type]) {
            elem.events[type] = {};    
              
            if (elem.addEventListener) {
              elem.addEventListener(type, elem.handle, false);
            } else if (elem.attachEvent) {
              elem.attachEvent('on' + type, elem.handle);
            }
          }
    
          elem.events[type][handler.uid] = handler;
          return handler;
        },
    
        /**
         * Add handler to element by list of events
         */
        addAll: function (element, events, handler) {
          for (var i = 0; i < events.length; i++) {
            this.add(element, events[i], handler);
          }
        },
        
        /**
         * Remove handler from element by event type
         */
        remove: function (elem, type, handler) {
          var handlers = elem.events && elem.events[type];
    
          if (!handlers) {
            return;
          }
    
          delete handlers[handler.uid];
    
          for (var any in handlers) {
            return;
          }
    
          if (elem.removeEventListener) {
            elem.removeEventListener(type, elem.handle, false);
          } else if (elem.detachEvent) {
            elem.detachEvent('on' + type, elem.handle);
          }
    
          delete elem.events[type];
    
          for (var any in elem.events) {
            return;
          }
    
          try {
            delete elem.handle;
            delete elem.events;
          } catch (e) {
            elem.removeAttribute('handle');
            elem.removeAttribute('events');
          }
        },
    
        /**
         * Remove handler from element by list of events
         */
        removeAll: function (element, events, handler) {
          for (var i = 0; i < events.length; i++) {
            this.remove(element, events[i], handler);
          }
        }
      };
    
      return exports;
    });

    И ты думаешь, может при рефакторинге этой гадости добавилось? Но нет, 1 в 1 из статьи с этого так сказать учебника скопировано, сравните сами javascript.ru/files/event/event.js
    И ладно еще продублировали функционал браузерного апи, сохраняя хандлеры в объект, чтоб потом вызывать их бегая по ним циклом... это еще пол беды
    Беда в том, что данный код пропатчил и переданный ему DOM элемент и хандлер... притом криво пропатчил... а потом этот код бездумно скопировала какая нибудь обезьяна и он вызвал баги вылившиеся владельцу продукта в бабло... (но это уже другая история, про скупой платит дважды, и что 10 джунами не заменишь одного мидла)

    Ок, сейчас эта статья помечена как устаревшая и рекомендован новый шлак:
    https://learn.javascript.ru/introduction-browser-events
    Читая который, мы раньше позже придем к этому:
    learn.javascript.ru/event-loop
    где учебник предлагает
    совершенно неправильную картинку
    eventLoop-full.svg

    Я недавно тут "сеньера" собеседовал, который сказал, что знает как работает event-loop и пересказал мне 1 в 1 чушь из этого раздела...

    P.S. я не читал данный учебник "от корки до корки", но могу придраться практически к любой статье, что видел... И матерьял в общем не плох, чтоб быть вставленным в школьный учебник по информатике (уж получше многих авторов этих учебников будет, хотя вроде авторы учебников взяли вполне себе академичный и простой паскаль, а не сложный JS), но вот для реальной работы придется сначала выбить из человека всю дурь привнесенную данным учебником, иначе он наработает на потерю миллионов денег...
  • Как получить кол-во миллисекунд до завтрашнего дня?

    bingo347
    @bingo347 Куратор тега JavaScript
    Сергей delphinpro, у Вас будет погрешность в целую тысячу в случае високосной секунды
  • Где ошибка в коде JS Яндекс.Практикум Курс 5 Урок 22?

    bingo347
    @bingo347 Куратор тега JavaScript
    для оформления исходных кодов есть тэг <code></code>
  • Как ускорить сборку Webpack с 30 минут до 5-10?

    bingo347
    @bingo347 Куратор тега TypeScript
    Проверьте, что при сборке стили не импортят друг друга рекурсивно
  • Как красивее распарсить не совсем стандартный html?

    Потому что НЕЛЬЗЯ использовать регулярные выражения для парсинга HTML, XML, CSS, языков программирования и т.д.
  • Как изменить картинку в node.js по ссылке?

    bingo347
    @bingo347 Куратор тега Node.js
    FastClick, а подробнее? стектрейс? версия ноды?
  • Проверка на наличие файла?

    bingo347
    @bingo347 Куратор тега Node.js
    Eugen, если смотреть более широко, то данная операция может быть не такой уж и простой. На серваке в Европе файл в папке смонтированной по ftp или ssh с сервака в США через VPN в Австралии... пример конечно абстрактный, но вполне может быть, и наносекунды превратятся в хороший такой фриз системы на несколько секунд.
  • Проверка на наличие файла?

    bingo347
    @bingo347 Куратор тега Node.js
    это DEPRECATED апи, его однажды могут удалить
  • Как открыть соединение ws через прокси?

    bingo347
    @bingo347 Куратор тега Node.js
    ff0xff, а при чем тут process.env.socks_proxy?
    или Вы только копипастить не разбираясь в коде умеете?
  • Мне обязательно нужно инициализировать переменную извне try...catch?

    bingo347
    @bingo347 Куратор тега JavaScript
    а какой смысл в
    catch (e) {
      throw e;
    }
    таком коде?
  • Почему ElectronJS такой прожорливый?

    Ezhyg,
    Но жрут-то они точно так же, как не в себя.

    Discord потребляет вполне сравнимо с аналогичными мессенджерами
    VSCode - большую часть прожорливости вызывают плагины сторонних разработчиков, та же обычная Visual Studio потребляет в разы больше, работая без расширений, хотя вроде не v8 а CIL и не браузер, а нативные окошечки.
    С VSCode вообще по скорости и потреблению адекватно конкурируют только IDE от JetBrains, но они платные, и лично мне для решения всех моих задач понадобится их аж несколько штук... (и то кажись для Rust ничего нет)
  • Почему ElectronJS такой прожорливый?

    alex_devPY,
    Спасибо за комментарий. А Вы уже что-то писали на электроне?
    да, писал

    Ezhyg,
    То есть, все кто на нём "пишет" сейчас, если смотреть по популярным программам - быдлокодеры и криворучки? Хм, то есть вообще все.
    Далеко не все. Те же VSCode и Discord весьма хорошо написаны, и проблем почему то не вызывают

    И маааленький такой нюанс, хейтят его не столько программёры, сколько пользователи, часто просто вынужденные пользоваться, так как другого нет.
    Пользователь в 99.99% случаев вообще не парится, что под капотом у приложения, которым он пользуется
  • C — как выровнять текст в консоли?

    не уверен, что понял вопрос, но правый край терминала можно рассчитать из длины строки и этой константы
    https://github.com/openbsd/src/blob/master/lib/lib...
  • Как в данном коде победить ошибку ESLint Assignment to property of function parameter 'acc'. (no-param-reassign)?

    bingo347
    @bingo347 Куратор тега JavaScript
    pcdesign,
    А в чем суть "надежности" второго решения?
    конкретно в данном небольшом кусочке - ни в чем, но в более глобальном смысле, иммутабельный код гарантирует, что текущий кусок кода не изменит никаких внешних данных и ничего этим не поломает.
    Вот просто представьте, что Вы решили отрефакторить код, даже в этом маленьком кусочке можно вынести дублирование кода в отдельную функцию, и вот настанет момент, когда init для reduce будет не новый пустой объект, а объект пришедший из вне, а Ваш редьюсер его мутирует, дополняя новыми данными (или даже перетирая старые) и это может сломать код, который работает с исходным объектом, но явно не ожидал такого поведения