Перейти к содержанию

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

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

247 Темы 441 Сообщения

  • 51 70
    51 Темы
    70 Сообщения
    kirilljsxK
    Установка Python на Windows - это базовый шаг для любого разработчика. Часто новички путаются, куда именно попадает интерпретатор после инсталляции и как это влияет на работу. В этой статье разберем стандартные пути, варианты выбора директорий и что делать, если что-то пошло не так. Зная точное расположение Python, вы сможете легко управлять версиями, добавлять библиотеки и избегать конфликтов. Это поможет быстро запускать скрипты из любой папки и настраивать окружения. Прочитайте, чтобы сэкономить время на поисках и ошибках. Стандартные пути установки Python При установке с официального сайта python.org по умолчанию Python размещается в директориях, зависящих от типа установки и архитектуры системы. Для Install Now интерпретатор уходит в пользовательскую папку, что не требует прав администратора. Это удобно для личных проектов - система не трогает общие директории. Если выбрать Customize Installation, то путь меняется на Program Files, где Python доступен всем пользователям. Здесь важно поставить галочку Add Python to PATH, иначе командная строка не найдет интерпретатор. Например, на 64-битной Windows дефолтный путь - C:\Users\ИмяПользователя\AppData\Local\Programs\Python\Python313 для быстрой установки. А для всех пользователей - C:\Program Files\Python313. Такие расположения упрощают миграцию и обновления. Пользовательская установка: C:\Users%USERNAME%\AppData\Local\Programs\Python\Python3.x - скрытая папка, не засоряет диск C. Системная установка: C:\Program Files\Python3.x или C:\Python3.x - требует админ-прав, подходит для командной работы. Ручной выбор: Можно указать любую папку, например C:\python, создав ее заранее для контроля. Microsoft Store: Устанавливается в защищенную системную директорию, путь скрыт, но py-лаунчер находит автоматически. Вариант установки Пример пути Требует админ-прав Доступен всем пользователям Install Now C:\Users\User\AppData\Local\Programs\Python\Python313 Нет Нет Customize (All users) C:\Program Files\Python313 Да Да Microsoft Store Системная (скрыта) Нет Да Ручной C:\python Зависит от папки Зависит от прав Важно: AppData - это скрытая папка, включите показ скрытых файлов в Проводнике. Настройка PATH и почему это критично Переменная окружения PATH определяет, где система ищет исполняемые файлы. Без добавления Python в PATH команда python в cmd выдаст ошибку ‘не является внутренней или внешней командой’. Установщик предлагает галочку именно для этого - она автоматически вписывает пути в реестр. Если галочку пропустили, добавьте вручную через Свойства системы. Перейдите в ‘Дополнительные параметры системы’ - ‘Переменные среды’ и отредактируйте PATH, добавив директорию Python и Scripts. Например, C:\Python313; C:\Python313\Scripts. После перезагрузки cmd проверьте python --version. Это решает 90% проблем с запуском pip и скриптов. Откройте ‘Системные свойства’ - вкладка ‘Дополнительно’ - кнопка ‘Переменные среды’. В ‘Системные переменные’ найдите PATH, нажмите ‘Изменить’ и ‘Создать’. Вставьте полный путь к Python и к папке Scripts. Перезапустите cmd или PowerShell - изменения применяются не сразу. py-лаунчер - это специальный инструмент от Python, который ищет все версии по системным путям. Команда py автоматически запускает последнюю версию, даже если python не в PATH. Альтернативные способы установки и их пути Не всегда стоит качать exe с python.org. Microsoft Store предлагает готовый пакет с автообновлениями - Python ставится в системные директории без хлопот. Winget в PowerShell позволяет установить одной командой: winget install Python.Python.3.13. Путь скрыт, но доступен через where python. Embeddable-версия - это zip-архив без установщика, разархивируйте в любую папку, например C:\PortablePython. Идеально для USB-накопителей или тестов. NuGet или Chocolatey - менеджеры пакетов для продвинутых, пути зависят от их настроек. Каждый метод имеет плюсы: Store - простота, embeddable - портативность. Метод Пример пути Преимущества Недостатки Официальный exe C:\Program Files\Python3.x Полный контроль Нужно настраивать PATH Microsoft Store Системная Автообновления Меньше кастомизации Winget Системная Быстрая CLI-установка Зависит от winget Embeddable zip Любая (например D:\py) Портативный Нет pip по умолчанию Нюанс: Для нескольких версий используйте py -3.11 или py -3.13, лаунчер сам найдет. Проверка установки и поиск пути После установки откройте cmd и введите where python или python -c “import sys; print(sys.executable)”. Это покажет точный путь к интерпретатору. Проверьте pip --version и запустите тестовый скрипт: echo print(‘Hello’) > test.py; py test.py. Если Python не найден, проверьте PATH через echo %PATH%. Ошибки часто из-за длинных путей - установщик предложит увеличить лимит. Для VS Code или PyCharm укажите интерпретер вручную через настройки проекта. where python - список всех путей к exe. python --version - версия и сборка. Создайте hello.py с print(‘Работает!’), запустите py hello.py. Пути, которые стоит запомнить для жизни Теперь вы знаете, куда Windows прячет Python в 99% случаев. Стандартные директории вроде Program Files или AppData покрывают большинство сценариев, а кастомные пути дают гибкость. Остается разобраться с виртуальными окружениями - они создают изолированные копии в проектах, не трогая глобальную установку. Дальше можно копать темы вроде pyenv для управления версиями или WSL для Linux-подобной среды. Это расширит возможности без риска сломать основную систему.
  • 139 225
    139 Темы
    225 Сообщения
    hannadevH
    React официально перестал быть проектом Meta и перешёл под управление React Foundation при поддержке Linux Foundation. Это произошло в конце февраля 2026 года и стало поворотным моментом в истории фреймворка, который используют миллионы разработчиков по всему миру. Теперь разберёмся, что на самом деле изменилось и как это повлияет на разработку. Это не просто бюрократический ход — речь идёт о принципиальном сдвиге в том, как будет развиваться экосистема React. Meta по-прежнему участвует и вкладывает ресурсы, но больше не диктует дорожную карту один. Понимание этих изменений важно для каждого, кто работает с React или планирует это делать. Что произошло: переход под независимое управление React, React Native и JSX официально покидают организационную структуру Meta и переходят под управление React Foundation, которая работает в рамках Linux Foundation. Это означает, что фреймворк теперь имеет нейтральный, многопартийный орган управления, подобно таким крупным проектам, как Kubernetes и Node.js. В состав учредителей React Foundation вошли компании, которые годами развивали экосистему: Meta, Microsoft, Amazon, Vercel, Expo, Callstack, Software Mansion и Huawei. Каждая из них имеет представительство в совете, но ни одна не может единолично влиять на техническое направление разработки. Meta инвестирует более 3 миллионов долларов и остаётся ключевым партнёром на ближайшие 5 лет, но это не означает возврат к прежней модели управления. Структура управления разделена на два уровня: Технический комитет - отвечает за развитие ядра React и технические спецификации. Люди, которые реально создают и поддерживают React, по-прежнему принимают решения о том, как развивается фреймворк. Совет директоров - курирует стратегию, финансирование, инфраструктуру GitHub, CI/CD, товарные знаки и организацию React Conf. Этот подход обеспечивает независимость технических решений от корпоративных интересов. Разработчики, которые активно участвуют в разработке, теперь имеют больше влияния на направление развития, чем представители бизнеса. Что реально изменится для разработчиков Прямо и честно: для большинства разработчиков, которые просто используют React, ничего кардинального не изменится. API остаётся прежним, инструменты работают так же, синтаксис не меняется. Вы не потратите время на переобучение и не столкнётесь с неожиданными breaking changes из-за переходного периода. Однако есть важные косвенные эффекты, которые почувствуются со временем. Процесс принятия решений станет более прозрачным и открытым для сообщества. Если вы хотите внести вклад в React или предложить новую фичу, процесс больше не будет обременён формальностями Meta. Это может ускорить инновации, которые приносят пользу реальным разработчикам, а не только интересам компании. Что улучшится в экосистеме: Финансирование разработчиков, которые поддерживают библиотеки React-экосистемы. Фонд активно займётся грантами и финансовой поддержкой проектов, критичных для экосистемы. Образование и документация станут приоритетом на уровне организации, а не побочным продуктом. Это включает учебные пособия, документацию, учебный контент и ресурсы для сообщества. Глобальная доступность - React должен оставаться инструментом для разработчиков по всему миру, независимо от их местонахождения и экономического положения. Инфраструктура проекта (GitHub, CI, CD) будет управляться через фонд с использованием лучших практик Linux Foundation. React Conf и события сообщества получат централизованную организационную поддержку. Фонд возьмёт на себя также управление товарными знаками и юридическую защиту интеллектуальной собственности, что было раньше прерогативой Meta. Это может показаться скучной бюрократией, но на практике это означает более надёжную защиту проекта. Новые инструменты и технологический сдвиг Параллельно с организационными изменениями в экосистеме происходит технологический сдвиг, связанный с вытеснением привычного инструментария Rust-инструментами. Next.js ускорился почти в 30 раз, появились новые инструменты вроде Oxlint и Oxfmt, которые работают значительно быстрее традиционных решений. Эти изменения - не просто вопрос скорости. Это принципиальная смена подхода к разработке инструментов фронтенда. Если раньше мы использовали Prettier для форматирования кода, то Oxfmt предлагает не только ускорение, но и новую философию работы с кодом. Oxlint заменяет ESLint с лучшей производительностью и более современным подходом к анализу кода. Главные инструменты нового поколения: Oxfmt - форматер кода, написанный на Rust. Значительно быстрее Prettier, лучше интегрируется в инструменты сборки, предлагает новые конфигурационные возможности. Oxlint - лinter для JavaScript и TypeScript. Обеспечивает более быстрый анализ кода, лучшие перформанс характеристики и современный синтаксис конфигурации. tsgo и другие инструменты миграции - помогают переводить проекты на новые инструменты без боли и потери функциональности. Почему это важно именно сейчас? Потому что React Foundation демонстрирует открытость к инновациям и готовность поддерживать эволюцию инструментов, даже если они пишутся на совершенно других языках. Это означает, что экосистема будет развиваться более динамично и не зависеть от одного подхода или языка реализации. Interop 2026 и стандартизация веб-платформы Основные браузеры объединились в инициативе Interop 2026, чтобы улучшить совместимость и снизить фрагментацию веб-платформы. Это может оказаться даже важнее любого релиза фреймворка, потому что влияет на основы, на которых строится вся веб-разработка. Interop 2026 - это скоординированная работа команд Chrome, Firefox, Safari и других браузеров над наиболее критичными проблемами совместимости. Когда браузеры договариваются между собой и выстраивают единый фронт в развитии веб-стандартов, это создаёт более стабильную основу для фреймворков и библиотек. Для разработчиков это означает, что в будущем будет меньше костылей и workaround’ов для различных браузеров. React Foundation и браузеры движутся в одном направлении - к более открытой, стандартизированной и надёжной веб-платформе. Это долгосрочный тренд, который изменит то, как мы разрабатываем веб-приложения. Возможные опасения и реальность Когда большой проект переходит от одной компании к фонду, всегда возникают вопросы: а не замедлится ли развитие? Не будет ли больше бюрократии? Не потеряется ли направление развития? На практике история показывает, что нейтральное управление способствует долгосрочной стабильности. Node.js, Kubernetes, Linux и другие проекты под управлением Linux Foundation развиваются активнее, чем под частным управлением. Причина проста: когда нет одного владельца, интересы сообщества становятся центральными. Компании вкладывают ресурсы потому, что это выгодно для их продуктов, а не потому, что кто-то это приказал. Мета по-прежнему - ключевой участник с серьёзными инвестициями. Microsoft, Amazon, Vercel и другие компании заинтересованы в процветании React, потому что используют его в своих продуктах. Это означает, что разработка будет продолжаться активно, но без давления корпоративной повестки одной компании. Одно из потенциальных опасений - усложнение процесса принятия решений. Однако в React Foundation это нивелировано разделением технического комитета и совета директоров. Технические решения принимаются людьми, которые реально код пишут, а не менеджерами. Что ждёт React в ближайших месяцах Первые месяцы существования React Foundation сосредоточены на организационной стабилизации и коммуникации. Не ожидайте резких изменений в роадмапе фреймворка - сначала новый фонд наводит порядок в процессах управления, документации и инфраструктуре. Ноторые из ключевых направлений, над которыми будет работать фонд: Расширение программы грантов для разработчиков экосистемы Улучшение документации и учебных ресурсов на разных языках Стандартизация инструментов разработки (поддержка Oxfmt, Oxlint и новых инструментов) Организация и поддержка мероприятий и конференций Взаимодействие с браузерами в рамках инициатив вроде Interop 2026 Технически React будет развиваться по инерции, которая уже была до передачи управления. Это здоровый знак - означает, что переход прошёл гладко и не создал хаос в разработке. Вопросы, которые всё ещё остаются открытыми Несмотря на ясность официального анонса, в деталях управления новой React Foundation есть вопросы, которые будут уточняться со временем. Как будет работать процесс принятия решений в технический комитете? Какие критерии для финансирования проектов через гранты? Как будут строиться отношения с компаниями, которые не входят в учредители? Эти вопросы естественны для любого переходного периода. Важно, что основа создана правильно - с разделением технического управления и корпоративного. Остальное будет уточняться через прямой диалог сообщества с фондом и техническим комитетом.
  • 16 39
    16 Темы
    39 Сообщения
    hannadevH
    В современной разработке размер JavaScript-модулей постоянно растёт, а их инициализация требует всё больше ресурсов. Иногда вам нужна функция, которую пользователь может вообще не использовать, но её модуль всё равно загружается и выполняется при старте приложения. Это замедляет запуск и зря тратит вычисления. Теперь в ECMAScript появилось решение - import defer. Это новый синтаксис, который позволяет отложить выполнение модуля до момента, когда его код действительно понадобится. TypeScript 5.9 уже поддерживает эту возможность, и это меняет подход к управлению ресурсами в приложениях. Что такое import defer и зачем он нужен Обычный импорт модуля - это синхронная операция, которая блокирует выполнение кода. Модуль загружается, парсится и сразу же выполняется со всеми его побочными эффектами. Если модуль тяжёлый или используется редко, это негативно влияет на стартовую производительность приложения. С import defer работа происходит иначе. Модуль загружается в память и готовится к выполнению, но его код не запускается. Выполнение отложено до первого обращения к его экспортам. Это даёт вам полный контроль над тем, когда и как инициализируются различные части приложения. Ключевые преимущества: Улучшение стартовой производительности - тяжёлые модули не замедляют загрузку приложения Условная загрузка - модули можно активировать только если они действительно понадобятся Синхронный API - в отличие от динамического import(), код не нужно переписывать на асинхронные вызовы Сохранение совместимости - существующий API остаётся прежним Синтаксис и основные ограничения Синтаксис import defer намеренно сделан простым и понятным. Он поддерживает только одну форму - пространство имён. Не получится импортировать отдельные экспорты, только весь модуль целиком. Вот как это выглядит на практике: import defer * as feature from "./some-feature.js"; Модуль ./some-feature.js не будет выполняться сразу после такой строки. Вся инициализация произойдёт только когда вы первый раз обратитесь к его свойству: const value = feature.someFunction(); // Здесь произойдёт выполнение модуля Ограничения при использовании: Поддерживается только импорт пространства имён (* as name) Нельзя импортировать отдельные экспорты по имени Работает только в режимах модулей preserve и esnext Требует поддержки браузером или инструментом сборки (bundler) Важный момент: TypeScript не преобразует import defer при компиляции. Синтаксис остаётся прежним в выходном коде, поэтому его должна поддерживать или сама среда выполнения, или ваш bundler. Практические сценарии применения Ленивая загрузка особенно полезна в нескольких конкретных ситуациях. Представьте приложение с множеством функций, которые доступны не всем пользователям или используются редко. Почему бы не отложить их загрузку? Одна из классических проблем - платформозависимый код. Если ваше приложение поддерживает несколько платформ, можно отложить загрузку специфичного для конкретной платформы модуля до момента, когда это действительно понадобится. Это экономит ресурсы на других платформах. Типичные случаи использования: Большие библиотеки (графические редакторы, видеоплеры, 3D-движки), которые используются опционально Фичи, доступные только определённым пользователям или ролям Модули инициализации, выполняющие дорогостоящие операции (подключение к БД, загрузка конфигов) Платформоспецифичный код (мобильное, десктопное, серверное окружение) Интеграции с внешними сервисами, которые не всегда нужны Например, если у вас есть инструмент аналитики с тяжёлой инициализацией, вы можете отложить её загрузку. При запуске приложения аналитика не заблокирует стартовый процесс. Когда нужно отправить первое событие, модуль выполнится, инициализируется, и всё будет готово к работе. Отличие от динамического импорта Многие разработчики знают о динамическом import(), который тоже позволяет загружать модули по требованию. Однако это совсем разные инструменты с разными целями. Динамический импорт - это асинхронная операция. Когда вы вызываете import(), это возвращает Promise. Весь код, который использует загруженный модуль, должен быть асинхронным. Это означает, что нужно переписать функции на async/await, обновить вызывающий код, обработать ошибки загрузки - словом, большие изменения в архитектуре. import defer остаётся синхронным. С точки зрения вызывающего кода, работа с отложенным модулем выглядит так же, как с обычным импортом: // Динамический импорт - асинхронно const module = await import('./heavy.js'); // import defer - синхронно, просто код работает нормально import defer * as module from './heavy.js'; const result = module.doSomething(); // Как обычно Сравнение подходов: Параметр import defer динамический import() обычный import Синхронность Синхронный Асинхронный Синхронный Выполнение Отложено до первого использования По вызову Сразу при загрузке Изменение API Не требуется Требует переписи на async Не требуется Совместимость Новая фича Широкая поддержка Везде Сложность Простая Средняя Простая Управление ресурсами и оптимизация производительности Для большинства веб-приложений время загрузки критично. Каждый лишний килобайт или миллисекунда задержки влияет на восприятие пользователем. import defer помогает оптимизировать именно эту метрику. Представьте типичное приложение: основной код занимает 100 кБ, опциональные функции - ещё 300 кБ. Без import defer пользователь загружает всё 400 кБ при старте. С import defer он начинает работать со 100 кБ, а остальное загружается когда понадобится. Это радикально улучшает время до интерактивности (Time to Interactive, TTI). Другой аспект - побочные эффекты при инициализации. Если модуль устанавливает listeners, подключается к БД или выполняет другие операции при загрузке, с import defer эти операции отложатся. Приложение запустится быстрее, а необходимая инициализация произойдёт ровно когда нужна. Лучшие практики для оптимизации: Идентифицируйте модули, которые используются редко или только в определённых условиях Проверьте размер модулей - чем больше модуль, тем больше выигрыш от отложенной загрузки Убедитесь, что модуль не имеет критических побочных эффектов при инициализации Поддержите graceful degradation - приложение должно работать, если отложенный модуль так и не понадобился Измеряйте метрики производительности до и после внедрения import defer Большие SPA-приложения часто используют code splitting вместе с маршрутизацией. import defer идеально дополняет такой подход: код маршрута загружается динамически, а внутри можно использовать import defer для дополнительных опциональных функций. Поддержка и инструментарий На момент появления import defer в TypeScript 5.9 поддержка ещё достаточно новая. Не все браузеры и среды выполнения её реализуют, но это быстро меняется. Для TypeScript достаточно просто использовать синтаксис в файлах .ts или .js. Но вот что попадёт в выходной JavaScript - это зависит от вашей конфигурации компилера и инструментов сборки. TypeScript требует, чтобы вы использовали режимы модулей preserve или esnext в tsconfig.json. Эти режимы оставляют модули в виде ES6 модулей, без преобразования в CommonJS или другие форматы. Что нужно проверить: Версия TypeScript не ниже 5.9 В tsconfig.json установлено "module": "preserve" или "module": "esnext" Ваш bundler (webpack, Vite, esbuild) поддерживает import defer - большинство современных уже поддерживают Браузеры целевой аудитории поддерживают эту фичу или используется polyfill Модули bundlery типа Webpack или Vite могут трансформировать import defer в более совместимый код, если потребуется. Но для современных приложений, ориентированных на новые браузеры, это обычно не требуется. Что остаётся за кадром import defer - это мощный инструмент, но не панацея для всех проблем с производительностью. Это часть более широкого набора техник оптимизации, которые включают code splitting, tree shaking, минификацию и множество других. Кроме того, правильное использование требует понимания вашего приложения: какие модули критичны для старта, а какие можно отложить. Неправильное применение может даже ухудшить восприятие - если пользователь попытается использовать отложенный модуль в критический момент, произойдёт задержка. Поэтому выбор модулей для import defer должен быть обоснованным и протестированным.