• Как обычно логируют краши от паник?

    @Garry_Galler
    recover пишется в одном месте.
    Посмотри как реализовано middleware recover в любом фреймворке тип gin, echo, fiber.

    Изначальный вариант в fiber: https://github.com/gofiber/recover/blob/master/main.go
    Сейчас оно уже встроено: https://github.com/gofiber/fiber/blob/master/middl...

    Один раз написал, потом оно юзается в каждом запросе:
    // Default middleware config
    app.Use(recover.New())
    
    // This panic will be caught by the middleware
    app.Get("/", func(c *fiber.Ctx) error {
    	panic("I'm an error")
    })
  • Как в телеграм боте без бд сохранять состояние пользователя?

    @Garry_Galler
    nakem
    Я не писал ботов для телеграмма раньше. Предположил, что есть что-то вроде куков или подобное.

    Тебе нужно базовую матчасть поизучать прежде чем за ботов браться.
    Боты это очень сложно. Требуют знания http протокола, понимания long-polling, web-hooks и многого другого. Лишь единицы способны написать полезного бота.
    Поэтому большинство пишет абсолютно бесполезных и никому ненужных.
  • Golang в чём смысл?

    @Garry_Galler
    Go проиграл C# там, где C# выжрал кучу оперативы (на некоторых тестах аж в 30 раз больше). Go тоже можно подкрутить так, чтобы память очищалась реже (то есть меньше stop the world), тогда и perfomance тоже улетит вверх...

    Ну и про разницу подходов уже другие написали... Я вот как-то забавы ради тестил фибоначчи... так вот у меня Go выиграл у ... Rust. До определенного диапазона (довольно значительного) чисел. Вот как-то так...
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP
    По вашему выходит, что единственное предназначение генератора - это экономить память. Поверьте, это совсем не так ;)

    Поверь я это знаю лучше тебя.
    Это по-твоему выходит, что генератор это просто фантик. И я тебя уже два дня пытаюсь объяснить, что это не так.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP
    Любой код, который экономит память генератором, можно написать без него. Больше того - именно этот код и будет лежать в основе нашего генератора.

    Неверно.
    Иначе бы в языки программирования не вводился оператор yield. В языках где его нет, либо в которых нет нативной поддержки генераторов, невозможны ленивые вычисления.

    FanatPHP
    Но память при этом будет экономить не он, а старый добрый while.

    Опять неверно. Погугли что такое конечный автомат.

    FanatPHP
    Генератор всего лишь использует тот код, который на самом деле экономит память, обрачивая его в красивый фантик.

    Опять неверно.

    Ответ Джона Скита:
    Основная идея заключается в том, что компилятор/интерпретатор/что угодно делает некоторую хитрость, чтобы вызывающий мог продолжать вызывать next(), и он будет продолжать возвращать значения - как если бы метод генератора был приостановлен. Теперь очевидно, что вы не можете действительно "приостановить" метод, поэтому компилятор создает для вас машину состояний, чтобы вы помнили, где вы находитесь в данный момент и как выглядят локальные переменные и т.д. Это намного проще, чем писать итератор самостоятельно.
  • Проблема с проектом на php?

    @Garry_Galler
    @Name_23
    Твоя проблемы в том, что пока ты ничего не знаешь. И начал учил язык программирования вместо того, чтобы учить теоретические основы Computer Science.
    Тогда бы ты знал что такое сетевой стек и не приравнивал бы сайт к ... массиву.
    Так что давай переписывай свой план. Изучение PHP там должно быть где-то на последнем месте.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP
    что внутри итератора тоже цикл. Это все обертки над циклом

    Еще одна ложь. Ты, видимо, ни разу в жизни не писал итераторов.
    Попробуй это переписать на PHP (там чуть больше методов нужно переопределить, но суть та же) - будет тебе уроком.

    class Count:
        """Iterator that counts upward forever."""
        def __init__(self, start=0):
            self.num = start
        def __iter__(self):
            return self
        def __next__(self):
            num = self.num
            self.num += 1
            return num
    # вызываем в шелле
    >>> c = Count()
    >>> next(c)
    0
    >>> next(c)
    1
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP
    унутре у него цикл.

    Внутри встроенный функции range языка Python цикла нет. Если бы range была реализована как генератор в PHP - цикла бы тоже не было. Цикл это лишь один из способов извлечь значение из генератора. Либо цикл может быть источником значений для генератора. Но сама логика генератора на нем не основана.

    В хаскеле вообще нет операторов цикла. Однако генераторы и ленивые вычисления - есть. По твоей логике они бесполезны. Но это не так. Вот тебе шах и мат.

    P.S. Не обижайся, но ты перепутал теплое с мягким - цикл не имеет отношения к самому паттерну Итератор и Генератор. Он может быть его частью, но суть вовсе не в нем.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    Генератор — это объект, который сразу при создании не вычисляет значения всех своих элементов.
    Он хранит в памяти только последний вычисленный элемент, правило перехода к следующему и условие, при котором выполнение прерывается.
    Вычисление следующего значения происходит лишь при выполнении метода next(). Предыдущее значение при этом теряется.
    Этим генераторы отличаются от списков — те хранят в памяти все свои элементы, и удалить их можно только программно. Вычисления с помощью генераторов называются ленивыми, они экономят память


    https://ru.wikipedia.org/wiki/Ленивые_вычисления
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP
    А генератор - всего лишь красивая обертка для этого цикла,

    Ты вообще не читаешь того, что тебе пишут?
    Итератор это паттерн программирования. Генератор это частный случай итератора, реализованный через yield.
    yield это реализация конечного автомата на основе протокола итерации.
    Цикл это просто способ итерации по генератору.

    Вот и получается, что это не генератор экономит нам память.


    Иди учить матчасть, двоешник.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    Если бы PHP функция range была бы реализована как в Python, было бы проще показать пример.

    >>> rng = range(10**100)
    >>> it = iter(rng)
    >>> next(it)
    0
    >>> next(it)
    1
    >>> next(it)
    2
    >>>


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

    >>> it = open("test.txt")
    >>> next(it)
    '1\n'
    >>> next(it)
    '\x02\n'
    >>> next(it)
    '3\n'
    >>> next(it)
    '4'
    >>> next(it)
    Traceback (most recent call last):
      File "<pyshell#30>", line 1, in <module>
        next(it)
    StopIteration
    >>> 
    >>> # или все тоже самое через цикл: 
    >>> for line in open("test.txt"): print(line)


    В PHP тоже можно делать что-то подобное. Неужели ты не в курсе?
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    goto flag - это самый базовый вариант цикла и есть

    И опять чушь.
    goto это goto, а не цикл. В процессоре есть такая инструкция. Сам цикл в языках программирования это просто абстракция над goto и некоторыми другими машинными командами А не наоборот.

    Но ваш пример не экономит память, а речь была именно об экономии.

    Если ты хоть немного знаешь PHP, то ты сможешь написать файловый итератор\генератор по строкам.
    Или мне (не php-шнику) написать его за тебя?

    что генератор её не экономит.

    Тебе уже раз пять объяснили что экономит. Видимо, отсутствие базовых знаний мешать тебе понять принцип его работы. И генератор это не "красивая обертка над циклом" как ты выразился. Генератор (ну или более обобщенно Итератор) это паттерн. А красивая обертка - синтаксический сахар - это yield, который внутри себя скрывает всю сложность реализации конечного автомата.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    О, кстати - в php, оказывается, есть goto (я не php-шник):

    <?php
    	function gen() {
        
        yield 1;
        yield 2;
        yield 3;
        yield 4;
        
    }
    
    $g = gen();
    $i = 1;
    
    flag:
    echo $g->current(), "\n"; 
    $g->next();
    $i++;
    if($i <= 4)  goto flag;
    
    ?>


    Ну и где тут цикл? Представь что вместо моей функции gen там файловый объект реализующий построчное чтение файла. Его все еще можно перебрать без цикла.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP,
    Цикл это просто способ раскрутки генератора. Разумеется, с ним итерация по генератору гораздо удобнее, нежели вручную вызывать current и next. (На уровне процессора циклов вообще нет. Но там все прекрасно и без них работает.)
    И то что цикл все-таки нужен, никак не оправдывает твой изначальный ответ, который следует просто удалить как концептуально неправильный. Так не цепляйся как утопленник за него. Лучше подтяни матчать.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    FanatPHP,
    Значения генерирует не генератор, а цикл.

    Нет. Тебе выше написали, что генератор можно написать на основе протокола итератора. Без всякого цикла.
    Цикл вообще к самому интерфейсу итератор\генератор имеет опосредованное значение.
    Тот же yield будет работать и без цикла, так как это синтаксический сахар, внутренняя реализация которого поддерживает протокол итератора, а внутри yield - это конечный автомат, который поддерживает состояние приостановки и продолжения.

    генератор не будет экономить память без цикла

    Перестать писать бред снова и снова.

    Ты, видимом, вообще не понимаешь что такое паттерн генератор и зачем он нужен.
    Открой книжку банды четырёх.
  • Какая разница между генераторами и массивами?

    @Garry_Galler
    Все верно в мануале написано. Просто читать нужно правильно.
    И да, генератор позволяет экономить память.
    Так что не надо писать того, чего не понимаешь.

    Почему генераторы потребляют меньше памяти, чем массивы?

    Потому что они не хранят значения, а генерируют их, либо получают их из итератора или иного источника. В оперативной памяти при этом хранится только одно значение. Генератор это вообще-то паттерн программирования такой. В разных языках их реализация может отличаться, но в базовом варианте их можно создавать используя ключевое слово yield вместо return в обычной функции.

    никакой полезной функциональности не несут. Это просто обертка для красоты

    Тьюринг полная ерунда.

    А генератор всего лишь позволяет замаскировать этот цикл, как будто понарошку мы работаем не с циклом, а с массивом.

    Аналогично. Иди изучать матчасть.
    https://ru.wikipedia.org/wiki/Итератор#:~:text=Ген...
  • Какой платежный агрегатор будет хорош для телеграм бота?

    @Garry_Galler
    Если ты юр. лицо или ИП.
    Чисто с физиками почти никто не работает.
    Плюс адские комиссии.
  • Существует ли удобный формат для сохранение конфигурационных файлов для Python?

    @Garry_Galler
    TOML. Очень широко используется в качестве замены обычного и подустаревшего ini.
    Уже советовали его, но, добавлю, что для простого юзера это тот же ini, а для программиста - масса дополнительных возможностей.
    Что касается YAML - юзерам будет некомфортно следить за пробелами и уровнями вложенности. Так что не советую.
    А хорошие парсеры TOML (использовал этот формат в Go) обычно пишутся так, что распознаются почти любые строки, даже ошибочные.
  • Почему перевод через Yandex translate API намного хуже, чем обычный перевод через стандартную страницу переводчика?

    @Garry_Galler
    dimonchik2013,
    Фейсбук AI? По-моему у них нет никакого доступного API. По крайней мере, я ничего об этом не знаю.
    Fast Translate работает на гибридном (нейроперевод + статистический фразовый) API yandex.translate, но расширяет его применение до возможности перевода больших текстов и документов за один запрос.
  • Бесплатный онлайн (или оффлайн-линукс) переводчик с API?

    @Garry_Galler
    Fast Translator
    После закрытия всех бесплатных апишек у онлайн переводчиков этот самый лучший.
    Переводит и тексты и документы. Можно переводить по 100 млн. в сутки за копейки.