• Есть ли статьи, которые приводят наглядные примеры того, как код на rust превосходит код на других языках?

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

    Особенно там, где был использован язык Си или С++

    (если исключить memory safety и fearless concurrency)
    1. Хороших плюсовиков найти всё сложнее, ибо молодые разработчики часто хотят что-то более современное/простое/приятное.
    2. Переход с какого-нибудь более высокоуровнего языка на Rust гораздо легче, чем на C++
    3. DX у Rust на порядо лучше.
    4. Код на Rust на порядок более выразительный, чем код на Си

    За счёт этого поддержка кодовой базы на Rust заметно дешевле выходит

    Например вот что Тинькофф пишет:

    Наш Процессинговый Центр занимается разработкой финансовых систем, критичных к даунтайму и времени обработки. Изначально мы делали все свои продукты либо на чистом Си, либо на плюсах (C++14), однако пару лет назад мы переписали большой кусок нашего бэкенда на Rust, и нам настолько понравилось, что теперь все наши новые процессинговые сервисы пишутся на нём.



    Мне бы хотелось видеть какое-то сравнение, что вот так стало сильно лучше и безопаснее, а вот было так написано изначально на оригинальном языке

    Это можно будет определить только если ведётся статистика по багам и они классифицируются по причинам возникновения, но такую статистику ведут не все.
    В среднем статистика показывает, что багов связанных с неправильной работой с памятью в проектах на Rust на порядки меньше, чем в проектах на C++.


    ну тут все-равно unsafe

    В проектах на Rust он явный и от него можно избавиться, завернув в безопасную обёртку, которая будет гарантировать корректную работу с памятью и ffi.
    В проектах на C++ у тебя по факту всё является unsafe.

    ну, нам еще нужен подсчет ссылок

    В плюсах тоже активно пользуются подсчётом ссылок и всякими умными указателями, если по коду не очевидно, когда можно будет освободить память
    Ответ написан
    6 комментариев
  • Как произвести поиск по огромной базе моментально и вывести данные?

    @alexalexes
    каким методом можно моментально/быстро найти нужную запись с данными?

    Создаете индексы в базе данных по полям, которые используются в условиях запросов, и тогда будет скорость.
    PS: Конечно, лучше иметь представление, как ORM создает текст запроса SQL, а потом обращается с ним к СУБД. И как анализировать этот запрос SQL, иначе работа с ORM превращается в практику работы с магией.
    Ответ написан
    2 комментария
  • Как произвести поиск по огромной базе моментально и вывести данные?

    kawabanga
    @kawabanga
    Сделайте сперва запрос в SQL.
    Поймите слабые места.
    Добавьте индексы.
    Сделайте снова запрос в SQL.

    У вас
    where('model', 989)->where('number_mod', '00003454354743643') - оба параметра перебираются перебором, лучше иметь индекс или с fk.
    Для 5 млн записей вы можете сделать индексы, я думаю и все будет летать.
    Ответ написан
    Комментировать
  • Что значит single responsibility в контроллере?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Сколько людей - столько мнений. Не стоит прям вообще всех слушать, кто высказывает какие-то "гениальные" откровения. Даже внутри крупных фреймворков многие вещи реализованы по разному, и каждый считает что именно так надо, и никак иначе. Думаю автор статьи просто искал дешевого хайпа, на практике никто так не делает. Контроллер по сути не модель, а управляющая конструкция, в ней нормально внутреннее ветвление на методы. С таким же успехом можно решить что для модели нужно 4 репозитория, на каждое действие CRUD...
    Ответ написан
    1 комментарий
  • Call to undefined function checkFields(), как исправить?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Возможно, речь идет о коде, который я как-то на ходу сочинял здесь для кого-то.
    Только понятное дело, весь смысл давно улетучился, и остался голимый, эталонный карго-культ, самолеты из соломы.

    Там шла речь о примитивном ORM по паттерну Table Gateway, чтобы упростить и обезопасить базовые CRUD операции.

    abstract class BasicTableGateway
    {
        protected $db;
        protected $table;
        protected $fields;
        protected $primary = 'id';
    
        public function __construct(\PDO $db)
        {
            $this->db = $db;
        }
        public function read($id): ?array
        {
            $stmt = $this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
            $stmt->execute([$id]);
            return $stmt->fetcn();
        }
        public function insert($data): int
        {
            $this->checkFields($data);
    
            $fields = '`'.implode("`,`", array_keys($data)).'`';
            $placeholders = str_repeat('?,', count($data) - 1) . '?';
    
            $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
            $this->db->prepare($sql)->execute(array_values($data));
    
            return $this->db->lastInsertId();
    
        }
        // и так далее
        protected function checkFields($data)
        {
            $diff = array_diff(array_keys($data), $this->fields);
            if ($diff) {
                throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
            }
        }
    }


    То есть идея в том, чтобы определить все имена колонок при создании класса, так чтобы код мог проверять, что нам в ключи массива не насували лишнего

    class UserGateway extends BasicTableGateway {
        protected $table = 'gw_users';
        protected $fields = ['email', 'password', 'name', 'birthday'];
    }
    $userGateway = new UserGateway($pdo);
    
    $data = [
        'email' => 'foo@bar.com',
        'password' => 123,
        'name' => 'Fooster',
    ];
    $id = $userGateway->insert($data);


    Получается быстро удобно и безопасно.

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Для ООООЧЕНЬ простого букинга с большой натяжкой.

    Не вижу собсно отелей (или он будет один? Тогда это не букинг, а бронирование в отеле)

    Не вижу типов комнат (возможно это сайт бронирования конкретной квартиры покомнатно?)

    Эмоунт - это деньги? Тогда тип флоат не подходит.

    Что за фючеред_имэйдж? еще и интежер...

    Где опции в номере? Или в комнатах квартиры все удобства на улице и это где то отдельно текстом прописано?

    Короче пока на 2 с плюсом...
    Ответ написан
    6 комментариев
  • Как грамотно использовать this в данном коде?

    0xD34F
    @0xD34F Куратор тега JavaScript
    А лучше всего просто объяснить что бы я в итоге допер сам!

    Объясняю: включаешь голову, думаешь, гуглишь, ещё думаешь, делаешь. Вот так всё просто.
    Ответ написан
    4 комментария
  • Как генерировать красивый PDF с помощью PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    TL;DR: Если нужно точное совпадение с хтмл шаблоном - только хеадлесс хром, остальное достаточно сильно отличается от оригинала, в силу ряда проблем.

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

    Естественно оба со своими нюансами. В первом случае минус в том что пдф по сути будет набором картинок скринов, со всеми вытекающими, типа разных размеров экрана и невозможности выделить например текст в готовом пдф.
    Во втором - надо ставить хедлес хром на сервер и соответственно из бэка отдавать ему сгенеренный хтмл, что несет свои трудности и приколы, зато на 99,9% совпадает с тем что вы отправляете на печать из хрома, и отладка и подгонка хтмл под формат в разы проще и удобнее. Кроме того, использование стилей и медиа запросов для печати открывает невероятную гибкость в плане работы с готовыми шаблонами (автонумерация, поля, колонтитулы етц). А, и забыл киллер фичу - оно выполняет жс, то есть если есть графики или какие-то элементы, выводимые через жс - то только хром, других вариантов просто нет.

    Что касается других библиотек (mpdf, FPDF, wkhtmltopdf) - все они сильно "плавают" в отличие от хрома, многие вещи в них просто невозможны, кроме того у некоторых есть хронические проблемы со шрифтами и кодировками... Возможно за последние 3 года с тех пор как я их пробовал что-то изменилось, но думаю часть проблем все равно осталась.
    Ответ написан
    4 комментария
  • Почему шрифт, подключенный через Google Font, в Firefox рендерится иначе, чем в Chrome?

    Kozack
    @Kozack Куратор тега CSS
    Thinking about a11y
    Ответ написан
    Комментировать
  • Обьясните правда ли эти 2 процессоры очень разные по мощности?

    xez
    @xez
    TL Junior Roo
    Процессор - слишком сложная штука для того чтобы делать вывод о его производительности только по количеству ядер и его частоте.
    До пентиума 4, включительно, все было довольно просто: чем больше мегагерц (а потом гигагерц) - тем процессор быстрее. С тех пор прошло уже 20 лет, кстати.
    У Pentium 4EE частота была уже 3.8Ghz и стало как-то понятно, что дальнейшее ее повышение не дает такого сильного прироста к производительности, как и раньше, да и "стоит" значительно дороже. Поэтому производители начали наращивать количество ядер, увеличивать объем кеш-памяти, и, самое главное, улучшать микроархитектуру (микроархитектуру, вобщем-то, они и так всегда улучшали).

    Вот скриншот из AIDA64:
    61c039d0a31d3774198992.png

    Можно заметить, что частоты у процессоров не слишком то коррелируют с их производительностью.

    Поэтому и существуют многочисленные тесты и бенчмарки, по которым можно понять реальную производительность конкретного процессора в конкретной задаче.
    И да, видимо, i5-2500K быстрее чем Athlon II X4 650
    Ответ написан
    Комментировать
  • Где писать на Assembler-е?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Assembler
    Седой и строгий
    Я хочу его изучить для того , чтобы в будущем сделать свою Операционную Систему.

    ОС можно и не на ассемблере написать.

    Подскажите советы какой ассемблер подойдет: (NASM , FASM , ASM и тд)

    Любой.

    где изучить его

    В учебнике.

    в какой программе писать

    В любом текстовом редакторе.
    Ответ написан
    18 комментариев
  • Соответствует ли данный код хорошим практикам?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вам больше стоит обеспокоиться тем, что вы запросы формируете интерполяцией строк.
    Ответ написан
    1 комментарий
  • Где в доке описано поведение тэггирования сервисов?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    https://symfony.com/doc/current/bundles/best_pract...

    Services should not use autowiring or autoconfiguration. Instead, all services should be defined explicitly.

    The reason is that bundles shouldn't rely on features such as service autowiring or autoconfiguration to not impose an overhead when compiling application services.


    То что вы описали - как раз autoconfiguration
    Ответ написан
  • Как написать свой скриптовый язык?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Статей для этой задачи будет мало. Тут нужен как минимум SICP, а ещё лучше книга дракона.
    Ответ написан
    9 комментариев
  • В чем сложность поддержки проектов на Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Более четырёх лет пишу на Go, лично для меня поддерживать проекты на других языках сложнее ))
    До Go много лет писал на Perl/PHP/Python/Java/C/Ruby on rails/JavaScript и "крутил" еще не мало чего.
    Сейчас пишу только на Go и Python.

    Основная сложность в Go - это то, что если вы начинаете писать "криво" - то писать так очень трудно :))
    Подход к реализации в Go достаточно непривычный для тех, кто приходит из скриптовых языков.
    Например запрет циклических импортов - это самое первое, что "взрывает" мозг :)
    Нужно время чтобы адаптироваться после скриптовых языков.

    Про обработку ошибок - это да, это, пожалуй, единственное что мне не нравится в Go.
    Для себя я решил эту проблему за 1-2 часа :) и больше меня это не беспокоит.

    По ООП - в Go оно есть, лично мне оно нравится намного больше, чем ООП в других языках ))
    Всё, что реально нужно - всё есть, но при этом ничего лишнего нет.
    Интерфейсы - просто прекрасны :)) Каналы, горутины - это просто "счастье" :))

    А если объективно - то я бы не стал говорить о сложности поддержки проекта применимо к какому то конкретному языку.

    Как правило сложность поддержки возникает там, где нормальная архитектура не заложена в проект.
    Т.е. проект как могла так и писала куча людей плюс, как обычно, сделать нужно было побыстрее )), от этого никто вообще не думал об архитектуре и получилось то, что получилось :))
    Про покрытие тестами и документацию мы вообще не говорим )))

    А когда в таком проекте нужно что-то доработать или исправить ошибку, то почти всегда очень не просто найти то место, где нужно править, и после правок в одном месте, как правило, что-то ломается в другом :)

    Как минимум, нужно соблюдать принципы SOLID, иначе код получается, мягко говоря, не поддерживаемым.
    Но понимание этих принципов так же приходит с опытом, их нельзя научиться соблюдать просто прочитавши книгу или статью. Нужно сделать несколько проектов используя эти принципы, написать криво, понять как было бы правильно, всё переделать и так несколько раз.
    Тогда, со временем, начнёт получаться понятный и легко поддерживаемый код.

    Так мы приходим к тому, что если опыта нет - тогда проект поддерживать будет достаточно тяжело не взирая на язык и т.д.

    Хочется добавить, что как бы не писали про Go, что он простой и т.д. - он явно сложнее Python/PHP и т.д.
    Это еще один повод сказать, что поддерживать код на Go сложно ))

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

    glaphire
    @glaphire Автор вопроса
    PHP developer
    Я упустила в описании вопроса то, что мои "неудобные" параметры были скалярными, а не объектами.
    Ответ Flying о service subscribers натолкнул на мысль о поисках способа достать только конфиги/параметры из контейнера, а не тащить весь контейнер в свою фабрику - можно использовать Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.
    Ссылка на документацию: Symfony 4.1 - Getting container parameters as a service
    Ответ написан
    Комментировать
  • Роутинг согласно пути файлам?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    config/routes/annotations.yaml
    api:
        resource: ../../src/Http/Controller/Api/
        prefix: /api
        name_prefix: api.
        trailing_slash_on_root: true
        type: annotation
        defaults:
            _format: json
    Ответ написан
    4 комментария
  • Где искать нормальных менторов?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Устроиться на нормальную работу в офис и показывать коллеге/руководителю.
    Кукоратор - это развод, ни один профессионал не будет тратить своё высокооплачиваемое время для ковыряния трейни-лапши, который за это нормально даже не заплатит.
    Исключение - энтузиасты, которых много, например, тут.
    Ответ написан
    Комментировать
  • Mozilla не видит контуров svg(stroke), как пофиксить?

    RAX7
    @RAX7
    В названии аргументов фильтра ошибка.
    <filter id="filter0_b_601_49" x="93.425" y="129.676" width="237" height="445.648" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
          <feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
    -      <feGaussianBlur in="BackgroundImage" stdDeviation="25"></feGaussianBlur>
    +      <feGaussianBlur in="BackgroundImageFix" stdDeviation="25"></feGaussianBlur>
          <feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_601:49"></feComposite>
          <feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_601:49" result="shape"></feBlend>
        </filter>

    Хром видимо игнорирует кривой фильтр и отрисовывает без него, а лиса просто отказывается рисовать элемент с таким фильтром.
    Зачем вообще там нужен этот фильтр для меня осталось загадкой
    Ответ написан
    2 комментария