Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Красочная расслабляющая игра в жанре маджонг - Накорми Попугая! Собирайте плитки с фруктами, набирайте очки, побеждайте!

Накорми Попугая

Аркады, Маджонг, Казуальные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Python + Программа

С этим тегом используют

Программирование IT Программист Обучение IT юмор Разработка YouTube Windows Гайд Приложение Технологии Инновации Все
169 постов сначала свежее
0
f.lattys
f.lattys
4 месяца назад
Программирование на python

Мощная библиотека composio-core для Python⁠⁠

Мощная библиотека composio-core для Python Программирование, IT, Обучение, Код, Python, Гайд, Программа, Длиннопост

composio-core - это мощная библиотека для Python, предназначенная для упрощения процесса композиции и декомпозиции сложных объектов. Она предоставляет элегантный и интуитивно понятный API, который позволяет разработчикам легко создавать, модифицировать и анализировать сложные структуры данных.

➡️Установка composio-core

Установить библиотеку composio-core очень просто. Вы можете использовать pip, стандартный менеджер пакетов Python. Вот команда для установки:

pip install composio-core

➡️Основные возможности

- Гибкая система композиции объектов

- Мощные инструменты для декомпозиции и анализа

- Поддержка асинхронных операций

- Интеграция с популярными фреймворками

- Расширяемая архитектура плагинов

➡️Пример использования

Давайте рассмотрим простой пример использования composio-core для создания и анализа сложного объекта:

from composio_core import Composer, Analyzer

# Создаем композицию

composer = Composer()

complex_object = composer.create({

"name": "Проект X",

"components": [

{"type": "module", "name": "Auth", "version": "1.2.0"},

{"type": "database", "name": "UserDB", "engine": "PostgreSQL"},

{"type": "service", "name": "EmailNotifier", "protocol": "SMTP"}

]

})

# Анализируем созданный объект

analyzer = Analyzer()

analysis_result = analyzer.analyze(complex_object)

print(analysis_result.summary())

print(f"Количество компонентов: {analysis_result.component_count}")

print(f"Типы компонентов: {', '.join(analysis_result.component_types)}")

В этом примере мы создали сложный объект, представляющий структуру проекта, а затем проанализировали его с помощью инструментов composio-core.

➡️Преимущества использования composio-core

💬1. Повышение читаемости кода

Благодаря четкой структуре и интуитивно понятному API, код, использующий composio-core, становится более читаемым и понятным. Это особенно важно при работе в команде или при поддержке долгосрочных проектов.

💬2. Ускорение разработки

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

💬3. Гибкость и расширяемость

Архитектура composio-core позволяет легко расширять функциональность библиотеки с помощью плагинов, что делает ее идеальным выбором для проектов с уникальными требованиями.

➡️Продвинутые возможности

Помимо базовой функциональности, composio-core предлагает ряд продвинутых возможностей:

- Асинхронная композиция

import asyncio

from composio_core import AsyncComposer

async def create_complex_object():

composer = AsyncComposer()

object = await composer.create_async({

"name": "Async Project",

"components": [

{"type": "api", "name": "UserAPI", "version": "2.0.0"},

{"type": "queue", "name": "TaskQueue", "technology": "RabbitMQ"}

]

})

return object

complex_object = asyncio.run(create_complex_object())

print(complex_object)

- Интеграция с популярными фреймворками

composio-core легко интегрируется с популярными Python-фреймворками, такими как Django и Flask. Например, вот как можно использовать библиотеку в Django-проекте:

from django.views import View

from django.http import JsonResponse

from composio_core import Composer

class ProjectView(View):

def post(self, request):

composer = Composer()

project = composer.create(request.POST)

return JsonResponse({"project": project.to_dict()})

➡️Заключение

Библиотека composio-core представляет собой мощный и гибкий инструмент для работы со сложными структурами данных в Python.

Независимо от того, разрабатываете ли вы веб-приложение, систему анализа данных или инструмент для машинного обучения, composio-core может значительно упростить процесс работы с комплексными объектами и структурами данных.


Ещё много полезной информации, практики и задач закинул в свой канал - клик

Показать полностью 1
[моё] Программирование IT Обучение Код Python Гайд Программа Длиннопост
1
0
proDream
proDream
4 месяца назад

Taigram: Начало работы⁠⁠

Всем привет!

На этой неделе мы объявили о начале работы над Open Source проектом Taigram, название которому, к слову, выбрали вы в опросе.

Для удобства отслеживания актуальных изменений по проекту рекомендуем заглядывать в тематическую рубрику у нас на сайте, где мы рассказываем о процессе разработки, объясняем наш выбор технологий, архитектуры и код.

Проектом занимаемся мы вдвоём: Иван и Виктор, а также с логотипом нам помог наш бессменный дизайнер Евгений. (Больше никто не захотел к нам присоединиться 😭)

Начнём мы, как водится, с самого начала...

Taigram: Начало работы IT, Программирование, Обучение, Python, Telegram, Программа, Длиннопост

Менеджер управления проектами Taiga.io

Любой проект начинается с продумывания работ, функционала и предстоящих задач. Это можно делать как в Telegram-переписке, блокноте, заметках Obsidian, так и использовать более профессиональные инструменты - менеджеры проектов.

Мы давно искали удобный (и, что немаловажно - бесплатный!) инструмент ведения проектов, который можно развернуть локально. В итоге остановились на Taiga.io.

Taiga.io - это бесплатный Open Source Self-Hosted менеджер управления проектами. Это означает, что это свободно распространяемое программное обеспечение, которое можно установить на свой собственный сервер, не беспокоясь о зависимости от какого-то крупного игрока.


Что не так с Тайгой и для чего нам нужен Taigram?

В тайге мы ведём наши проекты, включая процессы публикации статей на сайте.

Это оказалось действительно удобно, за исключением нескольких моментов и один из них - оповещения. Дело в том, что Тайга отправляет оповещения об изменении задачи только тем, кто назначен исполнителем и наблюдателем, и отправляет она их на Email, при условии, что у пользователя стоят соответствующие разрешения в его профиле. Согласитесь, это хоть и удобно (какие-никакие уведомления лучше, чем их полное отсутствие), но порой абсолютно не оперативно! Да и к тому же, вряд ли кто захочет "пачкать" свою почту.

Тогда появилась идея сделать Telegram-бота, который сможет отправлять уведомления в чат/тему чата. Мы приняли такое решение, в том числе из-за того, что Тайга предоставляет возможность подключить WebHook для отправки уведомлений и у отправляемых данных, достаточно простая структура и, в целом, этих данных достаточно - это важно. Это значит, что добавив на текущем этапе самый нужный, по нашему мнению, функционал - потом его можно дополнить. А если это можно дополнять и функционал, который мы добавим сейчас - самый нужный по нашему мнению, означает, что этого функционала может быть недостаточно для кого-то другого, под какие-то другие специфические задачи.

Если кому-то это нужно или кто-то посчитает, что знает чего сервису не хватает в настоящий момент - он сможет это дополнить. На наш взгляд это отличная идея и входящие данные для запуска работ над Open Source проектом.


Цель и функциональные требования

  1. Цель: создание сервиса, который будет отправлять уведомления об обновлении списка задач и других событий из менеджера управления задачами Taiga в Telegram

  2. Функциональные требования:

    • Настройка уведомлений через Telegram-бота:

      • Добавление/удаление администраторов бота;

      • Выбор чата/канала;

      • Добавление/удаление/изменение проектов;

      • Отображение списка проектов;

      • Отображение информации по проекту:

      • Форматирование, отправляемых сообщений.

    • Интеграция с Taiga через вебхуки.

  3. Стек технологий

    • Бэкенд: Python, FastAPI, Aiogram;

    • Работа с данными: Taiga Webhooks, MongoDB, Redis;

    • Инфраструктура: Dynaconf, Pydantic.


Планирование проекта

Мы созвонились в нашем уютном Discord-сервере (присоединяйтесь, там мы регулярно работаем, общаемся или играем!) и открыв Obsidian, начали рисовать примерный план желаемого функционала. Спойлер: уже сейчас, спустя неделю с начала часть функционала изменено до неузнаваемости, но об этом в другой раз.

Найти схему можно в нашем проекте: https://tasks.pressanybutton.ru/project/taiga-webhook-telegram-notifier/task/5

Схема казалась небольшой, мы делали и куда более объёмные и даже посчитали "да чё там делать? За пару вечеров справимся"...

Закончив схему появились две первые задачи:

  • Организовать доску в Тайге

  • Сделать репозиторий.

Доской занялся Виктор, а я пошёл делать репозиторий на GitHub.


Организация доски

Не смотря на то, что у нас (как у Команды проекта "Код на салфетке", так и у меня лично (Виктора)) был опыт в подготовке как проектной, так и технической документации, но делать что-то, что изначально будет в открытом доступе значит, что у проекта есть дополнительные ограничения и "ответственность".

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

Шаг 1: Определение настроек проекта

Сперва нам было необходимо определиться с используемыми модулями в проектном менеджере для последующего масштабирования.

Почти сразу мы определили, что модуль "Канбана" нам не подходит, поскольку там невозможно создавать задачи в отрыве от пользовательских историй, следовательно создавать на каждую задачу пользовательскую историю "Дорожками" (не статусы) означает плодить сущности и терять контроль над "подзадачами".

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

Вернемся к модулям, мы решили использовать:

  • Эпики: для стратегического планирования;

  • Скрам: для текущего управления спринтами;

  • Запросы: если у кого-то из команды или гостей проекта появится желание добавить какой-то функционал или сообщить о чем-то;

  • Вики: для создания первоначального хранилища базы знаний;

Шаг 2: Определение границ спринтов

Как было сказано ранее, вначале у нас сложилось впечатление, что мы действительно можем управиться за пару вечеров в силу функциональных требований и сложности структуры, предъявляемой к проекту, но все осложнилось тем, что проект - Open Source и следовательно его нужно постараться сделать пригодным для последующего масштабирования и поддержки.

Поэтому составили первоначальный план, который включал следующие этапы:

  • Подготовительная часть:

    • анализ задачи;

    • оформление всех функциональных хотелок в виде тезисов;

    • прогнозирование объема работ;

    • определение структуры проекта;

    • подготовка схем структуры проекта;

    • подготовка схем пользовательского пути;

  • Базовый функционал (этап основной разработки MVP):

    • подготовка структуры проекта;

    • инициализация проекта и первичная настройка виртуального окружения, инфраструктуры;

    • настройка CI/CD;

    • создание базовых классов, необходимых для реализации бизнес-логики;

    • валидация данных;

    • создание необходимых методов, для работы с текстовыми файлами (для последующей локализации);

  • Локализация:

    • русский язык;

    • английский язык;

  • Релиз GitHub Pages:

    • подготовка и настройка репозитория;

    • настройка CI/CD;

    • подготовка и оформление документации;

    • составление инструкций;

Шаг 3: Работа с доской

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

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

По моим наблюдениям, регулярное обновление информации по статусам задачи держит команду "в тонусе" и позволяет придерживаться "единого вектора" в разработке.

Откровениями "о взлетах и падениях" мы поделимся в последующих статьях, но считаем, что о публичном проекте, нужно говорить честно и открыто - этим объясняется существование этого подраздела.


Технологический стек

Помимо функциональных требований, мы обсудили и технологический стек для проекта.

В качестве пакетного менеджера мы выбрали набирающий популярность uv. Как раз в новой версии PyCharm добавили его нативную поддержку. Честно, пока не заметил за ним каких-то преимуществ перед "надёжным как Швейцарские часы" Poetry, но вдруг он раскроется в будущем?

Для обработки обновлений Telegram и приёма оповещений из Тайги по WebHook был выбран микрофреймворк FastAPI. Полагаю, что он не нуждается в представлении: быстрый, надёжный и достаточно гибкий.

Сердцем Telegram-бота является aiogram. По нашему мнению - самый лучший фреймворк для написания ботов.

Поскольку в проекте не подразумевается большого количества данных для хранения, мы выбрали в качестве базы данных MongoDB с асинхронной библиотекой Motor.

Для хранения состояний и временных данных отлично подойдёт Redis. Это такой легковесный брокер сообщений / база данных.

Также, в проект был подключен pre-commit, позволяющий запускать линтеры перед коммитом. Он нужен для того, чтобы стиль кода всех разработчиков совпадал во всём проекте, ну и заодно он проверяет, что нет неиспользуемых импортов/переменных, некорректных вызовов и много, что ещё.


Создание репозитория

Создать репозиторий - буквально меньше минуты, но на пустом репозитории далеко не уедешь, да и показывать его кому-то стыдно. Поэтому для него необходимо было создать начальный проект в uv, а также ряд организационных файлов.

Проект в uv создаётся примерно также, как и в Poetry. Прописываем команду uv init taiga_wh_notifier. В результате создастся директория в которой будет основа проекта, инициализированный git и .venv. Удобно.

Перейдя в директорию сразу добавляем origin репозитория на гитхаб.

Далее нужно было создать основные файлы:

  • README.md - лицо всего репозитория. На данный момент оно практически пустое, мы определили основные разделы ридми файла, но пока не будет относительно рабочего функционала, заполнять ридми рано.

  • CONTRIBUTING.md - в этом файле описывает процесс по которому любой желающий сможет развернуть локальную версию проекта и вносить необходимые правки в код.

  • STYLEGUIDE.md - в этом файле описываются принципы и примеры стиля кода которому мы придерживаемся. Ничего сверхъестественного, но наличие этого файла поможет новым участникам проекта быть с нами "на одной волне".

Всё это мы писали вместе на основе нашего виденья проектов. В будущем содержимое файлов будет расширено и приобретёт полноценный вид.

В конце коммит и пуш. Первая задача закрыта, на очереди ещё сотня...


Настройка репозитория на GitHub

Проект создан, запушен, но не хватает одной маленькой детали - настройки репозитория на GitHub.

Что я имею ввиду? У нас есть главная ветка репозитория main и по умолчанию, каждый может в неё пушить, что является критической уязвимостью в целостности всего проекта. Да, можно откатывать коммиты и прочее, но всё это дополнительные и далеко не самые приятные действия.

Что нам нужно было сделать, дабы предотвратить хаос? Мы разработали правила работы с репозиторием!

Правила работы

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

  1. Ветка main заблокирована от всех пушей, даже от имени создателя репозитория. Это решает проблему "случайного пуша в мейн", когда участник команды написал код, но забыл сменить ветку.

  2. Участники работают каждый в своей ветке, при это ветка не постоянная, а создаётся исключительно под задачу, после чего удаляется. Это позволяет определить по названию ветки к какой задаче на доске она относится, а не выяснять по коммитам, над какой же задачей работал участник.

  3. Для того, чтобы внести изменения в main-ветку, необходимо создать pull request. При этом, для того, чтобы сделать "мерж в мейн", необходимо одобрение минимум одного другого участника. Таким образом, в main-ветку не попадёт ничего случайно, только после код-ревью и одобрения.

Мы не сразу "притёрлись" с этой системой, так как каждый привык работать в одиночку. Однако, спустя время осознали её удобство, а когда разобрались, как всё это делать не выходя из PyCharm, стало вообще прекрасно.


Приглашение к разработке:

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

Для этого свяжитесь с нами


Заключение

Это только самое начало, дальше начали создавать задачи и непосредственно писать код, о чём вы узнаете в следующей части.

Ссылки, касающиеся проекта:

  1. GitHub

  2. Доска разработки в Taiga

  3. Рубрика на сайте

Показать полностью 1
[моё] IT Программирование Обучение Python Telegram Программа Длиннопост
0
2
XDiqu
XDiqu
4 месяца назад
Программирование на python
Серия Python

Продолжение проекта на питоне⁠⁠

Увеличил объем кода ~в 2 раза. Добавил количество раундов, счётчик выигранных раундов(в планах исправить, потому что не работает), ну и ещё чего-то, лень вспоминать. Из недочётов помимо счётчика выигранных раундов есть баг, по которому можно стрелять патронами, которых нет(ах да, я добавил рандом, который определяет количество каждых патронов на раунд). Видео, код и фото кода(Пикабу убирает табы) ниже(предлагайте, что можно реализовать (я не про-разработчик, а новичок, так что идеи приземлённые)):

С вертикальным монитором так удобно кодить:D

Подготовка видео...

from random import choice

from random import randint

from time import sleep

from termcolor import colored

# предметы=["шоколад", "адреналин", "инвертер", "лупа"]

# import flet as ft

# предметыуигроков={}

количествохп={1:3,2:3,3:3,4:3}

игроки=[1,2,3,4]

next_move=choice([1,2,3,4])

патрон=''

цель=0

round=1

количествопатронов={"Холостых":randint(1, 5), "Боевых":randint(1,5)}

количествораундов=int(input(" Введи количество раундов: "))

выйгранныераунды={1:0, 2:0, 3:0, 4:0}

print(colored(f"Количество патронов:{количествопатронов} \n", "light_red"))

def началораунда(количествораундов):

global игроки

global количествохп

global next_move

global цель

global round

global количествопатронов

global выйгранныераунды

# выйгранныераунды={1:0, 2:0, 3:0, 4:0}

if round<количествораундов:

количествопатронов={"Холостых":randint(1, 5), "Боевых":randint(1,5)}

количествохп={1:3,2:3,3:3,4:3}

игроки=[1,2,3,4]

next_move=choice([1,2,3,4])

цель=0

round+=1

print(colored(f"\n Начало {round} раунда \n \n", "light_green"))

print(colored(f"Количество патронов:{количествопатронов} \n", "light_red"))

ход()

for key in выйгранныераунды.keys():

if key in игроки:

выйгранныераунды[key]+=1

else:

print(выйгранныераунды)

exit()

def ход():

global next_move

global количествопатронов

global round

global патрон

global количествораундов

global выйгранныераунды

инвертер()

if list(количествопатронов.values())==[0, 0]:

print(f'\n В раунде {round} выжили игроки {игроки} со здоровьем {количествохп} \n')

началораунда(количествораундов)

next_move+=1

if next_move not in игроки:

next_move+=1

if next_move>4:

next_move=1

while next_move not in игроки:

next_move+=1

if next_move>4:

next_move=1

while next_move not in игроки:

next_move+=1

if next_move==3:

print(colored("Ходит игрок 3", 'green'))

sleep(1)

игрок()

if next_move!=3:

print(colored(f"Ходит игрок {next_move}", 'blue'))

sleep(1)

боты()

def патроны():

global next_move

global количествопатронов

global патрон

if цель in игроки:

патрон=choice(['боевой','холостой'])

инвертер()

if next_move!=3:

print(colored(f" Игрок {next_move} выбирает игрока {цель}, патрон {патрон} \n", 'yellow'))

sleep(1)

if next_move==3:

print(colored(f" Игрок 3 выбирает игрока {цель}, патрон {патрон} \n", 'yellow'))

sleep(1)

if патрон=="боевой":

if количествопатронов['Боевых']>0:

количествохп[цель]-=1

количествопатронов['Боевых']-=1

if количествохп[цель]==0:

print(colored(f"\n Игрок {цель} выбыл\n", 'grey'))

del количествохп[цель]

игроки.remove(цель)

print(colored(f' {количествохп}\n', 'grey'))

sleep(1)

if патрон=='холостой':

if количествопатронов['Холостых']>0:

количествопатронов['Холостых']-=1

print(colored(f' {количествохп}\n', 'grey'))

if цель==next_move:

next_move-=1

print(количествопатронов) #отключить при готовности игры

def боты():

global цель

цель=choice(игроки)

патроны()

sleep(1.5)

def игрок():

global цель

цель=int(input(colored(' В кого стрелять?\n ', 'red')))

while цель not

def инвертер():

global патрон

global количествопатронов

for key, value in количествопатронов.items():

if value==0:

if количествопатронов[key]=='Холостой':

патрон='Боевой'

if количествопатронов[key]=='Боевой':

патрон='Холостой'

while True:

ход()

if len(игроки)==1:

print(colored(f'Победил игрок {игроки[0]}', 'magenta'))

exit()in игроки:

цель=int(input(colored(' Введи цель ещё раз\n ', 'light_red')))

патроны()

sleep(1.5)

Обманул, без видео. Какого-то чёрта видео и скрины сегодня ужасного качества(не знаю почему. Win+Shift+S и Win+Alt+R)

Продолжение проекта на питоне Игры, Программа, Программирование, Python, Программист, Разработка, Видео, Без звука, Вертикальное видео, Длиннопост
Продолжение проекта на питоне Игры, Программа, Программирование, Python, Программист, Разработка, Видео, Без звука, Вертикальное видео, Длиннопост
Показать полностью 2 1
[моё] Игры Программа Программирование Python Программист Разработка Видео Без звука Вертикальное видео Длиннопост
2
0
user9263263
user9263263
4 месяца назад
Серия Создаём свой компилятор!

Что нужно знать для создания языка программирования⁠⁠

Что нужно знать для создания языка программирования Опрос, Программирование, Языки программирования, Python, IT, Программист, Программа, Тестирование, Telegram (ссылка), Длиннопост

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


Обозначение:

ЯП - язык программирования.

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


Для начала нам нужно определить из чего состоят яп:

  1. Лексический анализ (лексер) — Разбивает исходный код на токены (минимальные значимые единицы: ключевые слова, идентификаторы, операторы, литералы).

  2. Синтаксический анализ (парсер) — Проверяет, соответствует ли последовательность токенов грамматике языка.

  3. Семантический анализ — Проверяет смысловую корректность программы, используя AST и таблицу символов.

  4. Промежуточное представление и оптимизация — Код преобразуется в промежуточное представление (например, байт-код в Java, LLVM IR).


Работа компилятора

Что нужно знать для создания языка программирования Опрос, Программирование, Языки программирования, Python, IT, Программист, Программа, Тестирование, Telegram (ссылка), Длиннопост

Выбор языков программирования

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


Советы для новичков

  1. Если вы пишете на интерпретируемом языке, то стоит задуматься о создании компилятора.

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

  3. Определить цель языка. Важно точно понимать, для каких задач будет использоваться создаваемый язык.

  4. Использовать существующие инструменты и библиотеки. В зависимости от сложности компилятора и конкретных требований проекта можно применить генераторы синтаксических анализаторов, такие как Bison или ANTLR, или библиотеки для обработки регулярных выражений во время лексического анализа.


Различие Компилятора и Интерпретатора

Компилятор — это программа, которая переводит исходный код, написанный на высокоуровневом языке программирования, в машинный код или промежуточный код.

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

Интерпретатор — это программа, которая выполняет исходный код построчно, без предварительного преобразования его в машинный код.

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

Что нужно знать для создания языка программирования Опрос, Программирование, Языки программирования, Python, IT, Программист, Программа, Тестирование, Telegram (ссылка), Длиннопост
  1. Скорость работы

  2. Откладка кода

  3. Потребление памяти

  4. Необходимость в исходном коде


Дополнительные материалы

Книги

«Компиляторы: принципы, технологии и инструментарий» - ссылка на скачивание

Тг группы{

lucky languages

Compiler Dev

}

Это моя первая статья на Pikabu. Буду признателен, если вы оцените её в этом опросе.

Вам понравилось статья?
Всего голосов:

Благодарю вас за прочтение этой статьи. Если вы проявите активность, я с радостью поделюсь второй частью, в которой мы создадим наш первый компилятор.

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

Показать полностью 2 1
Опрос Программирование Языки программирования Python IT Программист Программа Тестирование Telegram (ссылка) Длиннопост
0
5
XDiqu
XDiqu
4 месяца назад
Программирование на python
Серия Python

Buckshot roulette на питоне⁠⁠

Прикольная темка, да?

Пока что это первая версия. В планах добавить интерфейс и предметы-бонусы. Ну и раунды, но это совсем легко. Раньше не делал ничего такого большого(относительно меня), поэтому я доволен, что оно работает. Без косяков не обошлось. Бот под именем "Игрок 4" как-то восстал из мертвых и захотел угробить первого. Если захотите попробовать этот код у себя, то предварительно в терминале напишите "pip install termcolor"

Python3

Код(молчите про русские названия🤫):

import random

from random import choice

from time import sleep

from termcolor import colored

# предметы=["шоколад", "адреналин", "инвертер", "лупа"]

# import flet as ft

# предметыуигроков={}

количествохп={1:3,2:3,3:3,4:3}

игроки=[1,2,3,4]

next_move=choice([1,2,3,4])

цель=0

def ход():

global next_move

next_move+=1

if next_move not in игроки:

next_move+=1

if next_move>4:

next_move=1

while next_move not in игроки:

next_move+=1

if next_move>4:

next_move=1

while next_move not in игроки:

next_move+=1

if next_move==3:

print(colored("Ходит игрок 3", 'green'))

sleep(1)

игрок()

if next_move!=3:

print(colored(f"Ходит игрок {next_move}", 'blue'))

sleep(1)

боты()

def патроны():

global next_move

if цель in игроки:

патрон=choice(['боевой','боевой','холостой'])

if next_move!=3:

print(colored(f" Игрок {next_move} выбирает игрока {цель}, патрон {патрон}", 'yellow'))

sleep(1)

if next_move==3:

print(colored(f" Игрок 3 выбирает игрока {цель}, патрон {патрон}", 'yellow'))

sleep(1)

if патрон=="боевой":

количествохп[цель]-=1

if количествохп[цель]==0:

print(colored(f"\n Игрок {цель} выбыл\n", 'grey'))

del количествохп[цель]

игроки.remove(цель)

print(f' {количествохп}\n')

sleep(1)

if патрон=='холостой':

print(f' {количествохп}\n')

if цель==next_move:

next_move-=1

def боты():

global цель

цель=choice(игроки)

патроны()

sleep(1.5)

def игрок():

global цель

цель=int(input(colored(' Кого пристрелить?\n ', 'red')))

while цель not in игроки:

цель=int(input(colored(' Введи цель ещё раз\n ', 'light_red')))

патроны()

sleep(1.5)

while True:

ход()

if len(игроки)==1:

print(colored(f'Победил игрок {игроки[0]}', 'magenta'))

exit()

Эх блин, Пикабу убрал табы. Теперь каша какая-то (

Показать полностью
[моё] Питон Python Программирование IT Программа Программист Русская рулетка Игры Разработка Тестирование Текст Видео Без звука Длиннопост
2
Fishrish
Fishrish
4 месяца назад
Лига программистов

Песня про айтишников⁠⁠

1 куплет

Я работаю в Ай Ти
Помню дедушку XP
Начинаю день рабочий
Строго с мемов в соц сети

Мама говорит я преуспел
Я ведущий инженер
Подключаю принтер, мышку
Банкомат, кондиционер

Моя должность тимлид
Я устраиваю мит
Всех ведущих инженеров
Собираю в нид фо спид

Ну а я бекэнд разраб
Двигаюсь я как краб
Вниз и влево, вниз и влево
Мой питон в руках как раб

Припев
Ай ти пью black tea
Ем куки
Ай не гони

Ай ти пью coffee
I am profi
Мне всё пофиг

2 и 3 куплет можно послушать с 28 февраля. Кому интересно - сделайте пресейв (чтобы первыми послушать) - по этой ссылке: https://band.link/iinmm

Песня про айтишников Музыка, Программирование, Программист, IT юмор, Python, IT, Windows, Программа

Fish Rish - Ай ти

Показать полностью 1
Музыка Программирование Программист IT юмор Python IT Windows Программа
1
3
Вопрос из ленты «Эксперты»
menzory
menzory
4 месяца назад

Купил я себе Raspberry PI⁠⁠

На днях купил себе Raspberry PI Zero 2 W, хотелось бы узнать что можно интересного придумать с ней, в идеях только какие либо боты для телеграмма, но хотелось бы услышать ваши идеи, может что то западет в душу, реализую. Для общей информации, пишу на Python, так что проблем с реализацией идей не возникнет думаю.

Сразу говорю, игровые приставки, роботы, дроны и «умное» включение/выключение света не интересует, но с датчиками бы поигрался.

[моё] Вопрос Спроси Пикабу Raspberry pi Python Автоматизация Нужен совет Программа Текст
19
0
DELETED
4 месяца назад

StreamSniperBot - мой бот для отслеживания стримов на Twitch⁠⁠

Мне понравилась история автора на DTF, который с помощью DeepSeek написал программу для оповещения о смене игры на канале Twitch.

Как работает

Бот написан на Python и использует Twitch API для получения данных о канале.

Раз в минуту он опрашивает каналы из списка и проверяет изменения в их статусе.

Как только происходит какое-либо изменение (начало стрима, смена игры или завершение стрима), бот отправляет уведомление об этом в Telegram.

Как пользоваться

Чтобы бот начал отслеживать изменения на канале, нужно отправить ему ссылку.

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

Чтобы перестать отслеживать канал, нужно удалить его из списка.

В список для отслеживания можно добавить до 10 каналов.

Планы на будущее

Сейчас бот умеет только отслеживать изменения на каналах и уведомлять о них. Это базовый функционал, но я уже думаю над тем, как его улучшить.

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

Если у вас есть идеи, как улучшить бота - напишите.

Ссылка на бота: https://t.me/strmsnprbot

Показать полностью
[моё] Программирование Чат-бот Python Программа IT Telegram (ссылка) Видео Без звука Вертикальное видео Короткие видео
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии