7.09.2025 состоялся релизPithon 3.14!
На фоне хайпа про NoGIL всё позабыли про другие фичи. Особенно про Multiple Interpreters, который обещает изоляцию процессов но с эффективностью потоков! На сколько действительно это будет эффективно мы узнаем позже, потому что сейчас это лишь первый релиз с ограничениями и недоработками.
Но что там про NoGIL? Теперь этот режим не экспериментальный, а официально поддерживаемый, но опциональный.
Чтобы запустить без GIL нужна специальная сборка. И перед стартом нужно объявить переменную PYTHON_GIL=0
Для вас я собрал готовый репозиторий где достаточно запустить скрпит, который всё сделает:
▫️ соберет релизный Python 3.14 в новый Docker-образ
▫️ запустит тесты в контейнере (GIL, NoGIL, MultiInterpreter)
▫️ распечатает результаты
Тест очень простой, усложняйте сами)
Вот какие результаты у меня:
=== Running ThreadPoolExecutor GIL ON
TOTAL TIME: 45.48 seconds
=== Running ThreadPoolExecutor GIL OFF
TOTAL TIME: 6.14 seconds
=== Running basic Thread GIL ON
TOTAL TIME: 45.54 seconds
=== Running basic Thread GIL OFF
TOTAL TIME: 4.74 seconds
=== Running with Multi Interpreter
TOTAL TIME: 18.30 seconds
Если сравнивать GIL и NoGIL, то на мои 32 ядра прирост х7-x10 (почему не х32? 🤷). При этом нам обещают что скорости будут расти с новыми релизами.
Режим без GIL похож (визуально) на async, тоже параллельно, тоже не по порядку. Но это не IO! и от того некоторый диссонанс в голове 😵💫, нас учили не так!
Интересно, что чистый Thread работает быстрей чем ThreadPoolExecutor без GIL.
Ну и где-то плачет один адепт мульти-интерпретаторов😭 Теперь нужно искать где они могут пригодиться с такой-то скоростью. Скорее всего своя область применения найдется.
Отдельно я затестил память и вот что вышло на 32 потока:
ThreadPoolExecutor GIL ON
305.228 MB
ThreadPoolExecutor GIL OFF
500.176 MB
basic Thread GIL ON
90.668 MB
basic Thread GIL OFF
472.444 MB
with Multi Interpreter
1267.788 MB
Пока не знаю как к этому относиться)
В целом - радует направление развития!
#release
#ReleaseChannel remote management, more formatting options, and more (v2.2.0)
Additions
Highlights
● Channel/group remote management: Now you can manage the subscription of your channel/group in the private chat with the bot. Most commands are supported. Just send commands like /sub @username https://exmaple.com or /sub -10010000000000 https://exmaple.com. (@username is the channel/group's username, @ is required; -10010000000000 is the channel/group's ID, it must start with -100)
● More custom formatting options:
● Media: You can make Telegram messages come with no media (just text) if you want (by default, they always come with media if any media is attached to the post). Also, you can make Telegram messages come with only media and metadata (no content) if you want, only when any media is attached to the post, otherwise, they will still come with the content.
● Link Preview: Now you can force disable link preview for Telegram messages.
● Source: More sourcing formats available. Read the detailed description in the Formatting Settings Guidebook.
● Deployment to Heroku: The bot can now be deployed to Heroku. Read the detailed description in the Deployment Guide.
● User permission management: The bot manager can now manage the permissions of the bot users by using the /user_info command. In this way, the bot manager can set who (user/channel/group) can use the bot, even if the multi-user mode is disabled.
Other additions
● Single-column table support: Formerly, all HTML tables were dropped from the output. Now those tables with only one column are rendered as multi-line text. Note that multi-column tables will still be dropped from the output.
● Audio fallback for lizhi.fm: Automatically fallback to the less-quality version of the audio if the higher-quality version exceeds the file size limit. Only for lizhi.fm.
Enhancements
● Prettified Telegraph post: The format of Telegraph posts is prettified. In addition, all images and videos are using the media relay server to avoid anti-hotlinking.
● Non-HTTP hyperlinks: Non-HTTP hyperlinks are not supported by Telegram. The bot will automatically convert them to bare URLs.
● Enclosure cleaning: If an enclosure with a non-HTTP URL is already included in a link in the post, it will be removed.
● Lazy media validator: The media validator is now lazy. It will only run if a post will be probably sent as Telegram messages. This will reduce CPU usage and network traffic.
● Enhanced image dimension extraction: Image dimension extraction is now faster and more flexible. If failed, the bot will try to extract the dimension using images.weserv.nl.
● L10n update: Turkish (Türkçe) l10n file updated. (English, Simplified Chinese / 简体中文, Traditional Chinese / 正體中文, Cantonese / 廣東話 are always up-to-date.)
● Improved Docker build caching: If the dependencies are not changed, no need to fetch the whole Docker image again. Just use the cached dependencies and fetch the latest source code.
● Extract git info from Railway.app env variables: Deployment on Railway.app can now recognize the git info.
● Minor enhancements
Bug fixes
● Python 3.7 compatibility: The previous version of the bot broke the compatibility with Python 3.7. Now it has been fixed. Please note that only x86 and amd64 architectures are supported. For arm64, the minimum Python version requirement is 3.8.
● EntitiesTooLongError: Posts with tons of text hyperlinks could cause Telegram API to throw this error. Now the bot will try to fix this error by more aggressive post splitting.
● <div>: The bot will now ensure that each <div> tag takes up a whole line.
There is too much in this release, read more on GitHub...
[Did you know? The release note above is fetched and generated by RSStT.]
Bot | Channel | Group | GitHub repo | Patreon
#ReleaseCustom format, new l10n, improved media fallback, and more (v2.1.0)
Official public bot @RSStT_Bot is always using the dev branch. If you are using it, you may have noticed the new features. Since new commands are added, please use /lang command once again and select your language to let the bot update your command list.
BREAKING CHANGES
● Inline mode is now required to be enabled due to new custom settings. Go to @BotFather, send /setinline, select your bot, and reply with an inline placeholder you like. For example, @RSStT_Bot is using Please input a command to continue....
Additions
Highlights
● More custom formatting options: /set command now gains its full power. You can control media or any metadata to be displayed or not. Adding your custom hashtags and setting your custom subscription title are all possible, but the inline mode is required to be enabled. Read the detailed description of formatting settings in the Formatting Settings Guidebook.
● User's default formatting settings: Use /set_default to set your default formatting settings. It applies to all your new subscriptions and if you like, you can make existing subscriptions use them. It is useful if you want to set similar settings for most of your subscriptions.
● New l10n: Italian (Italiano), Turkish (Türkçe), Catalan (Català), and French (français). Feel like adding your language? Please read the translation guide here.
● Feed sniffer: If you try to subscribe to a webpage instead of a feed, the bot will try to sniff the feed from the webpage. (Note: this only works if the webpage contains a feed link.)
● Enclosure support: The bot can now extract enclosures from posts. Enjoy listening to podcasts or downloading attachments!
● <audio> support: The bot can now extract audio from post content. Enjoy listening to podcasts!
● Send long images as files: The bot can now send long images as files. This can prevent Telegram from compressing the image and making it unreadable.
● OPML importing w/ custom title: You can now import subscriptions from OPML files, without losing your custom title. The bot will ask you if the bot should use the custom titles from the OPML file or not.
● OPML exporting w/ custom title: You can now export your subscriptions to an OPML, without losing your custom title.
There is too much in this release, read more on GitHub...
Bot | Channel | Group | GitHub repo | Patreon
#ReleaseMulti-user, i18n, improved user-friendliness, and more (v2.0.0)
Official public bot: @RSStT_Bot
This is a major release. It introduces some major breaking changes. You must migrate to the new version manually.
PLEASE READ THE MIGRATION GUIDE BEFORE UPDATING!
BREAKING CHANGES
● User and subscription management has been rewritten. The bot now can be used by multiple users and each subscription may have its individual monitoring interval. Thus, env variables CHATID and DELAY are deprecated and of no use.
● The default behavior is to run as a multi-user bot. If you still would like to limit the bot to serve you only, follow the migration guide.
● Redis support has been dropped. Only SQLite and PostgreSQL are supported.
Additions
Highlights
● Multi-user: The bot can be used by any users, or in channels and groups (unless env variable MULTIUSER is set to 0).
● I18n: The bot now supports multiple languages. Currently, English (en), Simplified Chinese (简体中文, zh-Hans) and Cantonese (廣東話, yue) are supported. You can contribute by translating the bot to your language following the translation guide.
● User-friendly: You can use most commands interactively, no need to remember their syntax.
● HTTP Caching: The bot has implemented the necessary parts of RFC7234 to "cache" feeds. It can reduce the servers loads of both the bot and the feed provider.
Other additions
● Customizing subscriptions: Subscriptions can be customized. Currently, only the settings below can be customized. Other settings are WIP.
● Pausing: You can deactivate a subscription. In this way, you can make the bot pause to send updates of it.
● Muting: You can mute a subscription. In this way, when the bot sends updates of it, silent messages will be sent. (You will still receive notifications, but no sound.)
● Interval: You can change the monitoring interval of a subscription.
● Documentation: The bot now has documentation. You can find it at docs.
Enhancements
● Better feed history management: All posts in a feed are now hashed and stored. This allows you to subscribe to almost any feeds without missing posts.
● Better error handling: The bot now has better error handling. It will now try to recover from errors and retry.
● Better logging: The bot now has better logging.
● Better performance: The bot now has a better performance.
● Dependence bump: Dependencies have been bumped to the latest version. Potential security vulnerabilities have been fixed.
● Proxy bypassing: If env variable PROXY_BYPASS_PRIVATE is set, the bot will bypass proxy for private IPs. And will bypass proxy for domains listed in env variable PROXY_BYPASS_DOMAINS.
● Bugfixes: A few bugfixes.
Bot | Channel | Group | GitHub repo | Patreon
#Mac#Release
Version 6.5.0-10960
### Agent Skill
- Surge now fully supports AI agent skill operations. We have built in instructions on how to use surge-cli to operate Surge, and have fully exposed all capabilities of surge-cli. Tell the following to your agent that supports skills to use it:
Install the skill from the /Applications/Surge.app/Contents/Resources/Skills/ directory using a symbolic link to ensure the skill can be updated along with the application bundle.
### Policy Group Icon
- It is now supported, as in the iOS version, to configure an icon for a policy group for display. You need to configure the icon-url field. There is currently no UI setting; you need to modify the configuration manually.
### DHCP Section
Added support for a new DHCP configuration section to customize DHCP settings. You can now control max-lease-time, default-lease-time, min-lease-time, one-lease-per-client, and ping-check directly from profile parameters.
[DHCP]
max-lease-time = 86400
default-lease-time = 43200
min-lease-time = 600
one-lease-per-client = true
ping-check = true
This feature is only provided for users with special needs; generally, the default settings are sufficient and no configuration is required.
### Other Improvements
- Added support for the X25519MLKEM768 post-quantum hybrid key exchange group for all TLS-related features (such as proxy clients and MITM), combining X25519 with ML-KEM-768 for quantum-resistant key exchange.
- Experimental support for compatibility-mode = 5
Official Channel: @SurgeTestFlightFeed
#Mac#Release
Version 6.4.4-10660
### Throughput Test
Now you can customize all the parameters of the throughput test.
[Testing]
download-url =
upload-url =
download-url-proxy = // If not provided, use download-url
upload-url-proxy = // If not provided, use upload-url
download-concurrency = // Default is 4
upload-concurrency = // Default is 4
download-duration-limit = // Default is 10s
upload-size-limit = // Default is 1GB
upload-duration-limit = // Default is 10s
### Proxy Protocol
Experimental support for the Trust Tunnel proxy protocol, which is developed and maintained by AdGuard. (Although the project promotes Trust Tunnel as a VPN protocol, it is actually a proxy protocol.)
- This protocol is based on TLS, so all TLS-related parameters can be configured and used.
- Currently, only the HTTP/2 (TCP)-based operating mode is supported.
- UDP forwarding support has not been completed yet.
Configuration example: proxy = trust-tunnel, 192.168.20.62, 443, username=test, password=test
### Minor Improvements
- Fixed an issue where AnyTLS could get stuck in reuse mode when used with certain servers.
- Support drag-and-drop reordering on the proxy view and local DNS mapping view.
- Fix the issue where the related statistics for the DIRECT policy were not saved correctly.
- Bug fixes.
Official Channel: @SurgeTestFlightFeed
#Mac#Release
Version 6.4.3-10320
### Proxy Protocol
- Support for a new proxy protocol: AnyTLS.
- Supports Salamander obfuscation mode of Hysteria 2, with the configuration parameter salamander-password.
- The QUIC block behavior for all proxy protocols is now set to block by default.
### Browser Integration
- Add support for the Brave browser.
### Proxy Editing Improvements
- When you hold down the Option key and click the Surge main menu, hidden policy groups will now be displayed.
- You can now directly test whether the current proxy parameters are correct during the process of editing the proxy.
### New DNS Mapping Keyword
- Added the force-syslib keyword for DNS mapping.
- The original system and syslib keywords have exactly the same effect: when enhanced mode is not enabled, the system library will be used for resolution; when enhanced mode is enabled, Surge will perform resolution using the system's DNS server.
- When using the force-syslib keyword, the system library will be used for resolution regardless of whether enhanced mode is enabled. Please note that this may cause recursive request issues. This option is designed for special domains such as mDNS; do not configure this parameter for general domains.
### Dashboard Improvements
- Enhanced the Host view of the request list. Now all IP address requests can be viewed grouped by AS.
### CLI Improvements
- Now you can use the surge-cli -c profile.conf command to check whether a profile is valid.
Official Channel: @SurgeTestFlightFeed
#Mac#Release
Version 6.4.2-9830
- It is now possible to enable or disable the UDP Fast Path feature for individual devices.
- IPv6 RA override no longer broadcasts new DNS addresses to ensure maximum compatibility.
- Adjusted the storage mechanism for traffic statistics. In previous versions, changes to a policy's configuration caused the policy's traffic statistics to be reset. Now, traffic statistics rely solely on the policy name (and the policy group name for external policies), so modifying the configuration will no longer result in the loss of statistical data.
- Surge Enterprise is being renamed to Surge Team, which will be used for team licensing and profile management. We will provide more information later.
- Bug fixes.
Official Channel: @SurgeTestFlightFeed
#Mac#Release
Version 6.4.1-9550
- Improved the stability of the UDP Fast Path, preventing previous UDP connections from being affected by fast path fallback.
- Other bug fixes.
Official Channel: @SurgeTestFlightFeed