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

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

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

18 Темы 38 Сообщения

  • 1 Темы
    1 Сообщения
    kirilljsK
    Привет, народ! Если вы только начинаете знакомство с Shell или уже чувствуете себя уверенно, но хотите расширить свой арсенал — эта статья для вас! Shell — это мощный инструмент, который может сделать вашу жизнь проще… если вы знаете, как им пользоваться. А если нет, то он может превратить ваш рабочий день в кошмар. Но не переживайте, я покажу вам несколько полезных команд, которые помогут избежать большинства проблем. Основы: Начнем с простого Если вы только начинаете, вот несколько базовых команд, без которых никуда: ls ls -la Это команда для просмотра содержимого директории. -l показывает детальную информацию (размер файлов, права доступа и т.д.), а -a отображает скрытые файлы. Без этих флагов вы будете чувствовать себя как слепой котёнок. cd cd /path/to/directory Двигайтесь по директориям! Просто укажите путь, куда хотите попасть. И да, если забудете, где сейчас находитесь, используйте: pwd mkdir и rm mkdir new_folder rm -rf folder_to_delete Создание новых директорий (mkdir) и удаление ненужных (rm). Внимание: будьте осторожны с rm -rf. Это как дробовик в толпе людей — один неверный шаг, и всё, что вы любили, исчезнет навсегда. Не говоря уже о том, что можно случайно удалить / и получить “поздравляю, ты сломал систему!”. Работа с файлами: Когда текстовые документы нападают cat cat file.txt Просмотр содержимого файла. Если файл слишком большой, лучше использовать less или more. grep grep "искомая строка" file.txt Поиск строки в файле. Очень полезная штука, особенно когда вы ищете что-то конкретное в логах или конфигурационных файлах. Можно комбинировать с другими командами через | (pipe) : ps aux | grep python touch touch new_file.txt Создание нового файла. Просто и элегантно. Управление процессами: Когда система начинает тормозить ps ps aux Показывает все запущенные процессы. Используйте его, чтобы найти, кто жрёт всю вашу память. top и htop top Мониторинг системы в реальном времени. Если у вас есть htop, используйте его — он намного удобнее. kill kill -9 PID Убивает процесс по его ID (PID). Если процесс не хочет умирать, добавьте -9 — это как сказать “умри, сволочь!” Поиск и замена: Магия sed и awk sed sed -i 's/old_text/new_text/g' file.txt Замена текста в файле. Потрясающая вещь, если нужно быстро исправить ошибки в коде или конфигурациях. awk awk '{print $1}' file.txt Обработка столбцов данных. Например, если у вас есть файл с IP-адресами, вы можете легко выбрать первый столбец. Работа с сетью ping ping google.com Проверка соединения с сервером. Если не работает, значит либо сервер мертв, либо ваш интернет — говно. curl curl -I https://example.com Получение заголовков HTTP. Великолепная команда для тестирования API или проверки работы сайтов. netstat netstat -tuln Просмотр открытых портов и соединений. Если что-то странное происходит с сетью, начните с этой команды. Дополнительные советы: На закуску history history Просмотр истории команд. Если вы забыли, какую команду использовали вчера, просто посмотрите историю. alias alias ll='ls -la' Создание собственных команд. Например, если вы часто используете ls -la, сделайте себе алиас ll — сэкономите время и нервы. man man ls Руководства по командам. Если забыли, как что работает, всегда можно обратиться к справке. Хотя иногда она кажется написанной на марсианском языке. Итоги Shell — это как магия, но с меньшим количеством искр и больше стресса. Однако, освоив эти команды, вы сможете работать эффективнее и избегать многих типичных ошибок. Главное — практикуйтесь, экспериментируйте и помните: если что-то идет не так, всегда можно перезагрузить систему (или купить новую). А теперь идите, пробуйте, и да прибудет с вами терминал! P.S. Если сломаете систему — не вините меня. Это ваш выбор.
  • 1 Темы
    1 Сообщения
    kirilljsK
    Привет, народ! Хочу поделиться своими мыслями о языке программирования Dart. Начну с того, что я не пишу на Dart — я JavaScript-программист до мозга костей, и мне нравится мой выбор. Но время от времени я присматриваюсь к другим языкам, чтобы понять, какие инструменты есть у других разработчиков, и как они решают задачи. И знаете что? Dart действительно вызывает интерес! Dart был создан Google в 2011 году, и сейчас он активно используется для разработки мобильных приложений (Flutter), веб-приложений, серверных решений и даже десктопных программ. Давайте посмотрим, чем этот язык так привлекателен. Статическая типизация Первая вещь, которая бросается в глаза — это статическая типизация. Для меня, как JavaScript-разработчика, это было шоком. В JS мы все привыкли к динамической типизации, где можно написать что-то вроде: let x = "hello"; x = 42; // Why not? А в Dart такое невозможно. Типы строго проверяются во время компиляции: String x = "hello"; x = 42; // Ошибка: нельзя присвоить int переменной String Null Safety Вот еще одна фишка, которая заставила меня задуматься. Dart имеет встроенный механизм Null Safety — защиту от null и undefined. Если вы когда-либо сталкивались с ошибками типа Cannot read property 'foo' of null в JavaScript, то поймете, почему это важно. В Dart нужно явно указать, может ли переменная быть null, используя знак ?: String? name; // Может быть null name = null; // OK print(name?.length); // Безопасный вызов метода Это спасает от множества глупых ошибок. Хотя, честно говоря, в JavaScript мы уже можем использовать TypeScript для подобного, но в Dart это работает из коробки. Ориентация на производительность Dart был разработан с учетом производительности. Он может компилироваться как в машинный код (для Flutter-приложений), так и в JavaScript (для веба). Это позволяет создавать быстрые и эффективные приложения без необходимости жертвовать кроссплатформенностью. Например, если вы пишете мобильное приложение на Flutter, Dart компилируется в нативный код для Android и iOS. А если вы пишете веб-приложение, Dart преобразуется в оптимизированный JavaScript. Удобно, правда? Асинхронность через async/await Если вы знакомы с JavaScript, то знаете, как удобно работать с асинхронным кодом через async/await. В Dart эта концепция реализована практически один в один: Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); // Симулируем задержку return "Data loaded!"; } void main() async { print(await fetchData()); // Выведет "Data loaded!" через 2 секунды } Для меня это было приятным сюрпризом. Dart не пытается изобрести велосипед, а просто берет лучшие практики из других языков. Flutter — главный козырь Dart Если вы никогда не слышали о Flutter, это фреймворк для создания кроссплатформенных приложений на Dart. Он позволяет писать один код и запускать его на Android, iOS, вебе, Windows, macOS и Linux. Это огромное преимущество для команд, которые хотят экономить время и ресурсы. Как JavaScript-разработчик, я могу сравнить Flutter с React Native. Только Flutter использует собственный рендеринг, что делает его более производительным и гибким. Но вот проблема: для работы с Flutter нужно учить Dart. А я пока не готов отказаться от моего любимого JavaScript . Богатая стандартная библиотека Dart предлагает мощную стандартную библиотеку, которая покрывает множество задач: работа с коллекциями, файлами, сетью, регулярными выражениями и т.д. Например: import 'dart:convert'; void main() { Map<String, dynamic> data = jsonDecode('{"name": "John", "age": 30}'); print(data['name']); // Выведет "John" } Это удобно, потому что вам не нужно искать сторонние библиотеки для базовых операций. Сильное сообщество и поддержка Google Google активно развивает Dart и Flutter, что обеспечивает язык хорошей документацией, регулярными обновлениями и большим количеством учебных материалов. Сообщество тоже растет, поэтому найти ответы на вопросы становится всё проще. Итоги Dart — это интересный язык, который предлагает много преимуществ для тех, кто хочет создавать кроссплатформенные приложения. Его статическая типизация, Null Safety и интеграция с Flutter делают его особенно привлекательным для мобильной разработки. Однако, как JavaScript-программист, я пока не готов полностью переключаться на Dart. Мне нравится гибкость и свобода, которую дает JavaScript, особенно в сочетании с современными фреймворками вроде React или Vue.js. Но я определенно буду следить за развитием Dart и Flutter — кто знает, может быть, однажды я решу попробовать их в реальном проекте. А вы уже работали с Dart? Какие ваши впечатления? P.S. Если хотите научиться писать на Dart — начните с официальной документации. Она отличная!
  • 5 Темы
    6 Сообщения
    kirilljsK
    const name = user.data.name; // Ошибка, если `user.data` может быть `undefined` Причина: Не проверена возможность undefined или null. Решение: Использовать опциональную цепочку (user.data?.name) или проверку: if (user.data) { ... }
  • 8 Темы
    23 Сообщения
    kirilljsK
    Ох бекендеры, пришли со своим ООП и типизацией в наш функциональный и динамичный JS…
  • 1 Темы
    1 Сообщения
    kirilljsK
    [image: 1739519680072-c460d5cb-8ee3-4383-ac9d-f08be111326c-image.png] Привет, друзья! Сегодня рассмотрим Rust — одном из самых интересных и быстрорастущих языков последних лет. Если вы еще не слышали о нем или только начинаете знакомство, то эта статья для вас. Мы разберем ключевые особенности Rust, его преимущества, недостатки и области применения. И так поехали! Что такое Rust? Rust — это системный язык программирования, разработанный Mozilla в 2010 году. Он был создан с целью предоставить разработчикам инструмент, который сочетает в себе высокую производительность (как у C/C++) и безопасность (особенно при работе с памятью). Rust стремится предотвратить распространенные ошибки, такие как утечки памяти, гонки данных и использование освобожденной памяти. Ключевые особенности Rust 1. Безопасность памяти Одна из главных фишек Rust — это гарантия безопасности памяти без использования сборщика мусора (Garbage Collector). Это достигается благодаря уникальной системе владения (Ownership) и заимствования (Borrowing). Владение (Ownership): В Rust каждая переменная “владеет” своим значением, и только один владелец может существовать в любой момент времени. Когда владелец выходит из области видимости, память автоматически освобождается. { let s = String::from("hello"); // Создаем строку // `s` владеет строкой } // Здесь `s` выходит из области видимости, и память освобождается Заимствование (Borrowing): Вы можете временно “заимствовать” значение через ссылки, но Rust строго контролирует, чтобы не было одновременного изменения и чтения данных. fn main() { let mut x = 5; let y = &mut x; // Заимствуем `x` как изменяемую ссылку *y += 1; // Изменяем значение через ссылку println!("{}", x); // Выведет 6 } Эта система позволяет избежать утечек памяти, гонок данных и других проблем, которые часто встречаются в C/C++. 2. Высокая производительность Rust компилируется в машинный код, что делает его невероятно быстрым. Благодаря отсутствию сборщика мусора и оптимизациям компилятора, Rust по производительности сравним с C и C++. При этом он предлагает гораздо более безопасную среду разработки. 3. Строгая типизация Rust — это статически типизированный язык. Компилятор проверяет все типы на этапе компиляции, что помогает избежать ошибок, связанных с несоответствием типов. fn add(a: i32, b: i32) -> i32 { a + b } Здесь мы явно указываем типы аргументов (i32) и возвращаемого значения. Это делает код более предсказуемым и надежным. 4. Параллельность и многопоточность Rust предоставляет мощные инструменты для работы с параллельностью и многопоточностью. Благодаря системе владения, Rust гарантирует отсутствие гонок данных (data races) даже в многопоточных приложениях. use std::thread; fn main() { let handle = thread::spawn(|| { println!("Hello from a thread!"); }); handle.join().unwrap(); } Здесь создается новый поток, который выполняет код внутри замыкания. Rust гарантирует, что данные, используемые в разных потоках, будут обрабатываться безопасно. 5. Обширная стандартная библиотека Rust имеет богатую стандартную библиотеку, которая покрывает множество задач: работа с файлами, сетью, коллекциями, многопоточностью и т.д. Например: Работа с файлами: use std::fs; fn main() { let contents = fs::read_to_string("file.txt").expect("Failed to read file"); println!("{}", contents); } Обработка HTTP-запросов: use reqwest::blocking::get; fn main() { let response = get("https://example.com").unwrap(); println!("{}", response.text().unwrap()); } 6. Кроссплатформенность Rust поддерживает множество платформ, включая Windows, macOS, Linux, а также различные архитектуры (ARM, x86 и др.). Это делает его отличным выбором для создания кроссплатформенных приложений. 7. Система макросов Rust предоставляет мощную систему макросов, которая позволяет автоматизировать повторяющиеся задачи и расширять функциональность языка. Например, макрос println! используется для вывода текста: fn main() { let name = "Rust"; println!("Hello, {}!", name); // Выведет "Hello, Rust!" } Макросы в Rust работают на уровне абстрактного синтаксического дерева (AST), что делает их более гибкими и безопасными, чем макросы в C/C++. Преимущества Rust Безопасность: Система владения и заимствования гарантирует отсутствие утечек памяти и гонок данных. Производительность: Rust компилируется в машинный код и работает так же быстро, как C/C++. Надежность: Строгая типизация и проверки на этапе компиляции минимизируют количество ошибок в рантайме. Кроссплатформенность: Поддержка множества платформ и архитектур. Активное сообщество: Rust активно развивается, и вокруг него существует большое сообщество разработчиков. Недостатки Rust Крутая кривая обучения: Система владения и заимствования может быть сложной для новичков. Особенно если вы привыкли к языкам с автоматическим управлением памятью (например, JavaScript или Python). Длинное время компиляции: Rust компилятор очень строгий и выполняет множество проверок, что увеличивает время компиляции. Меньше библиотек, чем в экосистемах Python/JavaScript: Хотя Rust имеет много полезных библиотек, его экосистема пока не так развита, как у более старых языков. Области применения Rust Rust становится все популярнее в различных областях разработки. Вот основные направления, где он особенно востребован: 1. Системное программирование Rust идеально подходит для написания операционных систем, драйверов устройств, встраиваемых систем и других низкоуровневых приложений. Его безопасность и производительность делают его отличной альтернативой C/C++. Примеры: Операционная система Redox , написанная полностью на Rust. Проект Theseus , исследовательская ОС. 2. Веб-разработка Хотя Rust не является классическим языком для веб-разработки, он активно используется для создания серверных приложений и микросервисов. Фреймворки вроде Actix и Rocket позволяют создавать высокопроизводительные веб-серверы. Пример: use actix_web::{web, App, HttpServer, Responder}; async fn index() -> impl Responder { "Hello, Rust web development!" } #[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new().route("/", web::get().to(index)) }) .bind("127.0.0.1:8080")? .run() .await } 3. Игровая индустрия Rust начинает набирать популярность в игровой индустрии благодаря своей производительности и безопасности. Он используется для создания движков, инструментов и игр. Примеры: Игровой движок Bevy , написанный на Rust. Игра Veloren , voxel-based RPG. 4. Blockchain и криптовалюты Rust активно используется в разработке блокчейн-проектов и криптовалют благодаря своей производительности и безопасности. Примеры: Криптовалюта Solana , написанная на Rust. Блокчейн-платформа Polkadot. 5. Инструменты разработки Rust часто используется для создания инструментов разработки, таких как компиляторы, линтеры и анализаторы кода. Пример: Инструмент Cargo , менеджер пакетов и сборщик проектов для Rust. Итоги Rust — это мощный и современный язык программирования, который предлагает уникальное сочетание производительности, безопасности и удобства разработки. Хотя он требует времени для освоения, его преимущества делают его отличным выбором для системного программирования, веб-разработки, игровой индустрии и других областей. Если вы хотите попробовать что-то новое и готовы потратить время на изучение, Rust определенно стоит вашего внимания. А если вы уже пишете на Rust, делитесь своими впечатлениями в комментариях! P.S. Не забудьте заглянуть в официальную документацию Rust — она одна из лучших в мире программирования. Ссылки для дальнейшего изучения: Официальный сайт Rust The Rust Programming Language (книга) Rust by Example
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 0 Темы
    0 Сообщения
    Нет новых сообщений