#HEX • IT – Telegram
#HEX • IT
372 subscribers
502 photos
104 videos
64 files
478 links
Channel by @alexeev_dev.

Авторский блог.

IT, статьи и другая информация.
Download Telegram
https://github.com/alexeev-prog/carbon-colorscheme

Моя цветовая схема - Carbon.

Пока есть конфиг для терминала alacritty и sublime text.
👍53
Многопоточность в программировании является важным механизмом в наше время.

В семействах ОС Windows - каждая программа запускает один процесс выполнения, в котором находится как минимум один поток (нить). В процессе может находиться множество потоков, между которыми делится процессорное время. Один процесс не может напрямую обратиться к памяти другого процесса, а потоки же разделяют одно адресное пространство одного процесса. То есть в Windows - процесс это совокупность потоков.

В Linux же немного по-другому. Сущность процесса такая же, как и в Windows - это исполняемая программа со своими данными. Но вот поток в Linux является отдельным процессом (можно встретить название как "легковесный процесс", LWP). Различие такое же - процесс отдельная программа со своей памятью, не может напрямую обратиться к памяти другого процесса, а вот поток, хоть и отдельный процесс, имеет доступ к памяти процесса-родителя.

LWP процессы создаются с помощью системного вызова clone() с указанием определенных флагов.

Но также имеется такая вещь, которая называется "POSIX Threads" - библиотечка стандарта POSIX, которая организует потоки (они же нити) внутри процесса. Т.е тут уже распараллеливание происходит в рамках одного процесса.

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

Но это все в общих чертах, для более точной информации следует обратиться к соответствующей литературе, либо к официальной документации, можно почитать man'ы.

Рассмотрим создания потока/нити с помощью функций из pthread.h (POSIX Threads):

#include <pthread.h>

//потоковая функция
void* threadFunc(void* thread_data){
//завершаем поток
pthread_exit(0);
}

int main(){

//какие то данные для потока (для примера)
void* thread_data = NULL;

//создаем идентификатор потока
pthread_t thread;

//создаем поток по идентификатору thread и функции потока threadFunc
//и передаем потоку указатель на данные thread_data
pthread_create(&thread, NULL, threadFunc, thread_data);

//ждем завершения потока
pthread_join(thread, NULL);

return 0;
}

Как видно из кода, сущность потока воплощена в функции, в данном случае, threadFunc. Имя такой функции может быть произвольным, а вот возвращаемый тип и тип входного аргумента должны быть строго void*. Данная функция будет выполняться в отдельном потоке исполнения, поэтому необходимо с особой осторожностью подходить к реализации данной функции из-за доступа к одной и той же памяти родительского процесса многими потоками. Завершение достигается несколькими вариантами: поток достиг точки завершения (return, pthread_exit(0)), либо поток был завершен извне.

Создание потока происходит с помощью функции pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*function)(void*), void* arg), где: tid - идентификатор потока, attr - параметры потока (NULL - атрибуты по умолчанию, подробности в man), function - указатель на потоковую функцию, в нашем случае threadFunc и arg - указатель на передаваемые данные в поток.

Функция pthread_join ожидает завершения потока thread. Второй параметр этой функции - результат, возвращаемый потоком.

#Linux@hex_warehouse #SysDev@hex_warehouse #Threads@hex_warehouse #CLanguage@hex_warehouse
4👍2
Кратко об обучении программированию

Воможно все. есть разный стартовый "капитал", с одним трудно стать "миллионером", с другим легко. но по сути при сильном желании можно все. Начинай с малого, сделай для себя программу обучения. Попробуй медленно, но верно идти к цели.
Изучите предлагаемый пример кода глазами. Читайте его несколько раз, пока вам не станет всё понятно. Каждая строчка должна быть достаточно очевидной.

Попробуй переписать в тетрадь код. Потом перепиши его в редактор, запусти, проверь на ошибки. Ищи ошибки сам, желательно по докам. Ответь на вопрос - откуда взялась эта ошибка и как ее больше не совершать?

Потом попробуй уйти от примера. Добавь сам что то новое, попробуй изучить новое путем практики. И также понимай сам код.

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

#Learning@hex_warehouse #Code@hex_warehouse
👍41
Абстрактное синтаксическое дерево (AST) в Python — это древовидное представление структуры фрагмента кода. Каждый узел в дереве представляет конструкцию программирования, такую как переменная, функция или оператор потока управления.

Некоторые примеры использования AST:

Линтеры и форматеры кода. Инструменты вроде pylint и Black используют AST для анализа и соблюдения стандартов кодирования и рекомендаций по стилю.
Оптимизация кода. Анализируя и изменяя AST, можно выполнять различные оптимизации кода, например, сворачивать константы, удалять мёртвый код и встраивать функции.
Генерация кода. AST можно использовать для генерации кода из спецификаций высокого уровня, таких как специальные языки или графические среды программирования.
Метапрограммирование. Манипуляции с AST позволяют реализовывать продвинутые методы программирования, такие как декораторы, макросы или переписывание кода.
👍2
Пример создания AST из скрипта на Python:

import ast
code = "x = 5 + 3"
tree = ast.parse(code)
print(tree)

Пример вывода AST для простой программы Python:

import ast
my_tree = ast.parse("3 + 4*x")
print(ast.dump(my_tree))

Пример скрипта для оптимизации кода:

class StringOptimizer(ast.NodeTransformer):
def visit_BinOp(self, node):
# Оптимизация конкатенации строк
if isinstance(node.op, ast.Add):
if isinstance(node.left, ast.Constant) and isinstance(node.right, ast.Constant):
if isinstance(node.left.value, str) and isinstance(node.right.value, str):
return ast.Constant(value=node.left.value + node.right.value)
return node

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

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

- Работа с типами данных и аннотациями через AST
- Создание собственных декораторов с помощью трансформации AST
- Оптимизация циклов и условных конструкций
- Анализ потока данных в программе
👍5
На хабре появились реакции!
👍73🤣22
Channel photo updated
Создал свой сайт портфолио - https://alexeev-prog-personalsite-3cd5.twc1.net/
42
Ближайшие статьи:

написаны, ждут публикации: роадмап DevOps инженера, создание веб Фреймворка на python
в процессе написания: интеграция C-расширений в python-приложения, как устроен BIOS и загрузчики ОС
👍32🔥1
Вы не против, если я открою небольшой новогодний сбор на благо канала?

👍 - не против
👎 - против
👍81
#HEX • IT
Вы не против, если я открою небольшой новогодний сбор на благо канала? 👍 - не против 👎 - против
Приятно что вы не против!

Обязуюсь находить качественный контент и писать качественные статьи.
👍1🔥1
Новогодний Сбор На Благо Канала

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

Сбербанк: 2202208157638702
Ton: UQCeNdt_oTXg9Y-oHuA7RDBA7MEzNKg-u-KCi6VH95VS9Tlh
USDT TRC20: TEWSFXhZmYmSm1ozVcE3615UzkZvRp5HVr

Желательно на карту сбербанка.

Спасибо всем большое! Искренне каждого благодарю и обнимаю. Вы - те, кто дал мне новый буст в жизни.

Обещаю публиковать качественный контент. Возможно, и ютуб канал не за горами!
3👍1
#HEX • IT pinned «Новогодний Сбор На Благо Канала Так как канал растет, а моя аппаратура уже не растет, нужно вложить средства в канал. Я работаю, но если вы хотите, вы можете поддержать наше небольшое сообщество Сбербанк: 2202208157638702 Ton: UQCeNdt_oTXg9Y-oHuA7RDBA7MEzNKg…»
#HEX • IT
Ближайшие статьи: написаны, ждут публикации: роадмап DevOps инженера, создание веб Фреймворка на python в процессе написания: интеграция C-расширений в python-приложения, как устроен BIOS и загрузчики ОС
Интеграция C-расширений в питон очень интересная, кстати. Прикольно писать на си для питона, с его особенностями (например то что в питоне объект). Столько возможностей открывается
1👍1
Командные оболочки Linux

Некоторое время назад я писал статью о том, как создать свою командную оболочку на C: первая часть, вторая часть.

И вот, настало время поговорить о том, какие еще есть оболочки Linux, кроме bash, zsh и fish.

Dash (Debian Almquist Shell) — командная оболочка UNIX, более легковесная, чем bash, при этом POSIX-совместимая. Она заменяет /bin/sh в сценариях по умолчанию и обеспечивает более высокую скорость выполнения при меньшем потреблении ресурсов.

sudo pacman -S dash # Arch
sudo apt install dash # Debian

Tcsh — командная оболочка UNIX, основанная на и обратно совместимая с оболочкой C (csh).

Некоторые возможности tcsh:

редактирование командной строки с поддержкой стилей vi и emacs;
программируемое автодополнение (оболочку можно настроить так, чтобы по нажатию «Tab» дополнялись не только имена команд и пути, но и поддерживаемые командой параметры);
проверка правописания имён файлов, команд и переменных; 5
расширенный механизм навигации по каталогам (команды pushd, popd, dirs);
периодические события (например, отложенное во времени исполнение команды или «сброс» пользователя по истечении тайм-аута);
возможность указания в приглашении различной полезной информации (текущий каталог, время, дата).
В Linux tcsh может быть полезен в качестве альтернативы оболочке bash для тех, кто предпочитает синтаксис C, а также потому, что некоторым программам для выполнения задач установки требуется оболочка C.

sudo pacman -S tcsh # Arch
sudo apt install tsch # Debian

Ksh (Korn Shell) — командная оболочка. Разработана Дэвидом Корном (AT&T) в 1980-х годах. Имеет полную обратную совместимость с Bourne shell и включает в себя возможности C shell.

Некоторые преимущества ksh: cleaner exit codes, пайпы входа, удобный синтаксис для циклов, простое повторение команд, работа с ассоциативными массивами, возможность эмулировать поведение Emacs и V.

sudo pacman -S ksh # Arch
sudo apt install ksh # Debian


#Linux@hex_warehouse #Shell@hex_warehouse #КомандныеОболочки@hex_warehouse #KSH@hex_warehouse #TCSH@hex_warehouse #DASH@hex_warehouse
🔥5👍21
Есть вот такая прикольная визуализация гитхаб-активности в виде чека

Вставляйте свой ник на этом сайте и готово!
44