NutrientElement

NutrientElement

Интересные факты и истории про языки программирования и парадигмы https://t.me/+pL5AfnSRGrc0OTNi
На Пикабу
поставил 0 плюсов и 1 минус
отредактировал 0 постов
проголосовал за 0 редактирований

Первоначальный взнос на квартиру

Коплю, изо всех сил коплю

0 1 200 000
из 1 200 000 собрано осталось собрать
3280 рейтинг 26 подписчиков 2 подписки 102 поста 12 в горячем

Про Golang

Два программиста сидят в баре и обсуждают свои проекты. Один говорит:

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

  • Вау, это потрясающе! А как ты ее назвал?

  • Golang.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Анекдот

  • Почему программисты всегда путают Рождество и Хэллоуин?

  • Потому что 31 окт = 25 дек.

Тайна раскрыта(олды поймут)

Тайна раскрыта(олды поймут) Программирование, Программист, IT, Разработка, IT юмор, Картинка с текстом
Показать полностью 1

Веб разработка

Веб разработка

Вышла новая версия Qt Creator 12

Qt Creator 12 - это новая версия интегрированной среды разработки для Qt и C++, которая содержит исправления ошибок и новые функции.

Вышла новая версия Qt Creator 12 Разработка, Программирование, Программист, IT, Qt

Среди самых важных нововведений можно отметить:

  • Интегрированный Compiler Explorer. Введите код, чтобы исследовать, как он выглядит для разных компиляторов.

  • Отладка CMake и протокол Debug Adapter. Установите точки останова в файлах CMake и выберите Отладка > Начать отладку > Начать отладку CMake, чтобы запустить отладчик CMake.

  • Запись экрана. Легко создавайте записи (части) вашего экрана для отчетов об ошибках, обмена, блогов и т.д.

Qt Creator 12 также улучшил производительность запуска, обновил инструменты Clangd и Clang analyzer до LLVM 17.0.1, добавил настройки для имени и комментариев файлов C++, расширил возможности редактора файлов CMake и многое другое.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Что же такое исключения в C++

Исключения в C++ - это механизм, который позволяет обнаруживать и обрабатывать ошибки во время выполнения программы. Исключения могут быть сгенерированы оператором throw или автоматически при возникновении некоторых ошибок, таких как деление на ноль, выход за границы массива или нехватка памяти. Исключения могут быть перехвачены и обработаны с помощью конструкции try…catch, которая определяет блок кода, в котором может произойти исключение, и блок кода, в котором исключение обрабатывается.

Исключения могут иметь различные типы, которые определяют характер ошибки и передают дополнительную информацию об исключении. Некоторые типы исключений являются стандартными и определены в библиотеке <stdexcept>. Основные из них:

  • logic_error: общий тип исключений, которые возникают из-за ошибок логики или программирования.

  • invalid_argument: исключение, которое возникает, когда аргумент функции недопустим или некорректен.

  • domain_error: исключение, которое возникает, когда аргумент функции выходит за пределы допустимого домена.

  • length_error: исключение, которое возникает, когда попытка создать объект превышает его максимально допустимый размер.

  • out_of_range: исключение, которое возникает, когда попытка доступа к элементу контейнера, который находится за его границами.

  • runtime_error: общий тип исключений, которые возникают во время выполнения из-за ошибок среды или системы.

  • range_error: исключение, которое возникает, когда результат операции выходит за пределы допустимого диапазона.

  • overflow_error: исключение, которое возникает, когда результат арифметической операции превышает максимально допустимое значение.

  • underflow_error: исключение, которое возникает, когда результат арифметической операции меньше минимально допустимого значения.

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

#include <iostream>

#include <exception>

using namespace std;

// Определение собственного типа исключения

class MyException : public exception {

public:

// Переопределение метода what(), который возвращает сообщение об исключении

const char* what() const noexcept override {

return "My exception occurred";

}

};

// Функция, которая генерирует исключение типа MyException

void func() {

throw MyException();

}

int main() {

try {

func(); // Вызов функции, которая генерирует исключение

}

catch (MyException& e) { // Перехват исключения типа MyException

cout << e.what() << endl; // Вывод сообщения об исключении

}

return 0;

}

В этом примере определяется класс MyException, который наследуется от класса exception и переопределяет метод what(), который возвращает сообщение об исключении. Затем в функции func() генерируется исключение типа MyException с помощью оператора throw. В функции main() используется конструкция try…catch для перехвата и обработки исключения типа MyException. В блоке catch выводится сообщение об исключении с помощью метода what().

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

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Про мютексы в golang

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

Мьютекс имеет два состояния:

  • Заблокирован

  • Разблокирован

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

Для работы с мьютексами в golang используется пакет sync, который предоставляет тип sync.Mutex. У мьютекса есть методы Lock() и Unlock(), которые позволяют блокировать и разблокировать доступ к общему ресурсу. Например, если у нас есть переменная counter, которая может быть изменена несколькими горутинами, то мы можем использовать мьютекс для защиты ее значения от гонки данных. Вот пример кода, который демонстрирует это:

package main

import (

"fmt"

"sync"

)

var counter int = 0 // общий ресурс

var mutex sync.Mutex // мьютекс

func main() {

ch := make(chan bool) // канал

for i := 1; i < 5; i++ {

go work(i, ch) // запускаем горутину

}

for i := 1; i < 5; i++ {

<-ch // ожидаем завершения горутины

}

fmt.Println("The End")

}

func work(number int, ch chan bool) {

mutex.Lock() // блокируем мьютекс

counter = 0 // сбрасываем значение счетчика

for k := 1; k <= 5; k++ {

counter++ // увеличиваем счетчик

fmt.Println("Goroutine", number, "-", counter) // выводим результат

}

mutex.Unlock() // разблокируем мьютекс

ch <- true // отправляем сигнал в канал

}

Этот код гарантирует, что только одна горутина имеет доступ к переменной counter в один момент времени, и выводит корректный результат.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Реализация собственного контейнера с помощью initializer_list

Initializer_list - это специальный класс шаблона, который представляет собой список инициализации, то есть набор значений, заключенных в фигурные скобки. Например, {1, 2, 3} - это список инициализации, который содержит три целых числа. Initializer_list позволяет передавать такие списки в качестве аргументов функций или конструкторов, а также использовать их для инициализации объектов различных типов, включая собственные контейнеры1.

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

  • Определить класс контейнера, который хранит элементы в некоторой структуре данных, например, в массиве, векторе или списке. Класс контейнера должен иметь методы для доступа, добавления и удаления элементов, а также другие операции, которые необходимы для работы с контейнером.

  • Определить конструктор контейнера, который принимает в качестве параметра объект типа initializer_list. В теле конструктора нужно скопировать элементы из initializer_list в структуру данных контейнера, используя методы begin() и end() для получения итераторов на начало и конец списка инициализации.

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

Вот пример реализации собственного контейнера, который хранит элементы в векторе:

#include <iostream>

#include <vector>

#include <initializer_list>

// Класс контейнера

template <typename T>

class MyContainer {

private:

std::vector<T> data; // Структура данных для хранения элементов

public:

// Конструктор по умолчанию

MyContainer() {}

// Конструктор, принимающий список инициализации

MyContainer(std::initializer_list<T> il) {

// Копирование элементов из списка инициализации в вектор

for (auto it = il.begin(); it != il.end(); ++it) {

data.push_back(*it);

}

}

// Оператор присваивания, принимающий список инициализации

MyContainer& operator=(std::initializer_list<T> il) {

// Очистка старых данных

data.clear();

// Копирование элементов из списка инициализации в вектор

for (auto it = il.begin(); it != il.end(); ++it) {

data.push_back(*it);

}

return *this;

}

// Метод для вывода элементов контейнера на экран

void print() const {

for (const auto& elem : data) {

std::cout << elem << " ";

}

std::cout << std::endl;

}

};

int main() {

// Создание объекта контейнера с помощью списка инициализации

MyContainer<int> c1 = {1, 2, 3, 4, 5};

c1.print(); // 1 2 3 4 5

// Присваивание контейнеру нового списка инициализации

c1 = {6, 7, 8, 9, 10};

c1.print(); // 6 7 8 9 10

return 0;

}

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Интересная история Вконтакте

История разработки вконтакте довольно интересна и полна разных событий. Вконтакте была создана в 2006 году Павлом Дуровым, который вдохновился идеей социальной сети для студентов СПбГУ.

Интересная история Вконтакте IT, Разработка, Программирование, Программист, Маркетинг, ВКонтакте, Россия, Информационная безопасность

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

Вконтакте также привлекала инвесторов, таких как Digital Sky Technologies, которые вложились в проект и получили часть акций. Однако не все шло гладко в истории вконтакте. В 2014 году Павел Дуров покинул компанию после конфликта с акционерами и властями, которые требовали от него выдать данные пользователей и удалить оппозиционные страницы.

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

Сегодня вконтакте является самой популярной социальной сетью в России и одной из крупнейших в мире. Ее ежемесячная аудитория составляет около 100 миллионов пользователей. Вконтакте также входит в экосистему VK, которая объединяет разные сервисы и платформы под одним брендом.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

Почему синтаксис языка C именно такой

Синтаксис языка C был разработан Деннисом Ритчи в 1970-х годах как упрощенная и универсальная версия языка B, который в свою очередь был основан на языке BCPL.

Почему синтаксис языка C именно такой Разработка, Программирование, Программист, IT, Инновации, Linux

Язык C был спроектирован так, чтобы быть близким к машинному коду и эффективно работать с памятью и процессором. Он также был вдохновлен некоторыми идеями из других языков, таких как ALGOL 68 и PL/I.

Синтаксис языка C характеризуется следующими особенностями:

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

  • Использование фигурных скобок для обозначения блоков кода и точки с запятой для разделения операторов.

  • Использование префиксной нотации для объявления переменных и функций, а также для указания их типов и модификаторов.

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

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

  • Использование указателей для работы с адресами памяти и динамическим выделением памяти.

  • Использование препроцессора для включения других файлов, определения макросов и условной компиляции.

Синтаксис языка C оказал влияние на многие другие языки программирования, такие как C++, C#, Java и Objective-C, которые расширили или модифицировали его для своих целей. Некоторые языки, такие как Perl и Python, также заимствовали некоторые элементы синтаксиса C, такие как операторы и скобки, но сильно отличаются в других аспектах.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1
Отличная работа, все прочитано!