Язык программирования HyperNlang с инвертированным временем
─# ./nlang
[nothing] Демонстрация что сначала запускается nothing
[nothing]Демонстрация что nothing всё равно выше по рангу
[being]Даже после того как нижняя функция сработала можно дальше работать
[being]Так как being запускается после nothing, то снова можно вызвать функцию test()
[nothing] Также можно вызвать функцию которая была декларирована ниже даже после return
[being] Первое начало функции как ни в чём не бывало.
[being] Можно сделать другой return и приоритет будет отдан being. Можно даже вызывать функции из nothing
515
[being] Если не делать return, то return приоритет будет отдан nothing
2705
[being]Можно продолжать написание программы вниз, а можно наверх
[being]Через being можно пользоваться nothing переменными, а через nothing нельзя пользоваться being переменными
Про утечку памяти в C++ и как с ней быть
Утечка памяти в C++ - это ситуация, когда выделенная динамически память не освобождается после использования, что приводит к постепенному уменьшению свободной памяти и замедлению работы программы.
Утечка памяти может быть вызвана разными причинами, например:
Неправильное использование операторов new и delete, когда для каждого выделения памяти не соответствует освобождение.
Забывание освободить память, возвращаемую из функций или методов.
Потеря указателей на выделенную память, когда они перезаписываются или выходят из области видимости.
Некорректная работа сторонних библиотек или компонентов, которые сами выделяют и освобождают память.
Для предотвращения утечек памяти в C++ существуют разные подходы и инструменты, например:
Отказ от динамической памяти и использование статических или автоматических переменных, если это возможно.
Владеющие указатели (smart pointers), которые автоматически освобождают память при уничтожении объекта или выходе из области видимости.
Сборка мусора (garbage collection), которая периодически проверяет, какие области памяти больше не используются, и освобождает их. В C++ сборка мусора может быть реализована с помощью специальных библиотек или фреймворков.
Перезапуск программы (rebooting), который полностью очищает память от всех данных программы. Этот способ может быть полезен для долго работающих программ, которые не могут полностью избежать утечек памяти.
Для обнаружения утечек памяти в C++ можно использовать различные средства отладки и анализа кода, такие как:
Отладчики (debuggers), которые позволяют просматривать состояние памяти во время выполнения программы и находить места, где происходят утечки.
Профилировщики (profilers), которые измеряют, сколько памяти используется разными частями программы и как она изменяется со временем.
Статические анализаторы (static analyzers), которые проверяют код программы на наличие потенциальных ошибок или уязвимостей, связанных с управлением памятью.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Преимущество и недостатки контейнера set в С++
Контейнер set - это ассоциативный контейнер, который содержит отсортированный набор уникальных объектов типа Key. Сортировка выполняется с помощью функции сравнения ключей Compare. Операции поиска, удаления и вставки имеют логарифмическую сложность.
Преимущества контейнера set:
Он гарантирует, что все элементы в нем уникальны, и повторения запрещены.
Он позволяет быстро проверять, принадлежит ли элемент множеству или нет, так как элементы хранятся в дереве поиска.
Он поддерживает операции над множествами, такие как объединение, пересечение, разность и симметрическая разность.
Недостатки контейнера set:
Он занимает больше памяти, чем другие контейнеры, такие как vector или list, так как он хранит не только значения, но и дополнительную информацию о структуре дерева.
Он не позволяет изменять значения элементов, так как это нарушит порядок сортировки. Для изменения значения нужно сначала удалить элемент, а потом вставить новый.
Он не поддерживает произвольный доступ к элементам по индексу, так как он не имеет последовательной структуры. Для доступа к элементам нужно использовать итераторы.
В зависимости от задачи и требований к производительности и памяти, вы можете выбрать контейнер set или другой контейнер. Например, если вам нужно хранить только уникальные значения и быстро проверять их наличие, то set может быть хорошим выбором. Но если вам нужно часто изменять значения или обращаться к ним по индексу, то set может быть неэффективным.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Вспомним историю великого и могучего С++
Язык программирования C++ был создан в начале 1980-х годов Бьерном Страуструпом, который работал в компании Bell Laboratories. Он хотел расширить возможности языка C, добавив в него поддержку объектно-ориентированного и обобщённого программирования. Изначально язык назывался “C с классами” (C with Classes), но позже был переименован в C++ в 1983 году. Символ “++” означает операцию инкремента (увеличения на единицу) в языке C и символизирует развитие языка .
С тех пор язык C++ постоянно эволюционировал и стандартизировался. В 1998 году был выпущен первый международный стандарт ISO/IEC 14882:1998, который определял основные правила и синтаксис языка. В 2003 году был выпущен второй стандарт ISO/IEC 14882:2003, который исправлял некоторые ошибки и неоднозначности первого стандарта. В 2011 году был выпущен третий стандарт ISO/IEC 14882:2011, который добавлял много новых возможностей, таких как автоматический вывод типов, лямбда-выражения, перемещающий семантику, умные указатели и другие. В 2014 году был выпущен четвертый стандарт ISO/IEC 14882:2014, который улучшал некоторые аспекты третьего стандарта и добавлял новые библиотеки. В 2017 году был выпущен пятый стандарт ISO/IEC 14882:2017, который расширял возможности языка и библиотек, например, добавляя поддержку параллельного и распределенного программирования. В 2020 году был выпущен шестой стандарт ISO/IEC 14882:2020, который также вводил множество новшеств, таких как модули, кортежи, концепты, корутинны и другие .
Язык C++ оказал большое влияние на другие языки программирования, такие как Java, C#, Python и другие. Язык C++ широко используется для разработки различных видов программного обеспечения, такого как операционные системы, приложения для настольных и мобильных устройств, игры, серверы, встраиваемые системы и другие. Язык C++ отличается высокой производительностью, эффективным использованием ресурсов, гибкостью и мощностью.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Способы оптимизации кода в C++
Оптимизация кода в C++ - это процесс улучшения эффективности, скорости и качества кода, написанного на языке C++.
Оптимизация кода в C++ может быть выполнена на разных уровнях, таких как:
Оптимизация на уровне алгоритмов и структур данных. Это означает выбор наиболее подходящих и эффективных алгоритмов и структур данных для решения задачи, учитывая сложность, память, время и другие факторы. Например, использование сортировки слиянием вместо сортировки пузырьком, или использование хеш-таблицы вместо списка для поиска элементов.
Оптимизация на уровне языка. Это означает использование возможностей и особенностей языка C++, которые могут повысить производительность кода. Например, использование константных ссылок вместо копирования объектов при передаче аргументов функциям, использование шаблонов вместо дублирования кода для разных типов данных, использование лямбда-выражений вместо обычных функций для передачи поведения в качестве параметра.
Оптимизация на уровне компилятора. Это означает использование параметров компилятора, которые могут изменить способ генерации исполняемого кода компилятором. Например, использование параметра /O2 для включения оптимизации по скорости выполнения, использование параметра /Ob2 для включения раскрытия функций (inline expansion), использование параметра /GL для включения оптимизации по всему программному модулю.
Оптимизация кода в C++ требует знания того, какие части программы должны выполняться быстро, какой размер и скорость выполнения кода, какие затраты на реализацию новых возможностей, какой минимальный объем работы, необходимый для выполнения задания5 Оптимизация кода в C++ также требует тестирования и профилирования кода для измерения и анализа его характеристик работы, таких как время выполнения, потребление памяти, количество вызовов функций и других. Для этого можно использовать различные инструменты, такие как Visual Studio Debugger, Visual Studio Profiler, Intel VTune Amplifier и другие.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Интересные факты про массивы в C++
Массивы в C++ - это одна из основных структур данных, которая позволяет хранить и обрабатывать множество однотипных значений. Массивы в C++ имеют много интересных фактов и особенностей, которые могут быть полезны для изучения и практики.
Массивы в C++ имеют фиксированный размер, который должен быть известен на этапе компиляции. Это означает, что нельзя динамически изменять размер массива или присваивать один массив другому. Для работы с динамическими массивами нужно использовать указатели и операторы new и delete, либо стандартные контейнеры, такие как std::vector или std::array.
Массивы в C++ являются непрерывными блоками памяти, в которых элементы расположены последовательно. Это позволяет быстро обращаться к элементам по индексу, но также ограничивает количество доступной памяти для массива. Кроме того, это означает, что имя массива является константным указателем на его первый элемент, поэтому можно использовать арифметику указателей для работы с массивами.
Массивы в C++ могут иметь несколько размерностей, то есть быть многомерными. Многомерные массивы представляют собой массивы массивов, которые могут использоваться для моделирования матриц, таблиц, сеток и других структур. Для объявления многомерного массива нужно указать количество элементов в каждой размерности в квадратных скобках.
Массивы в C++ поддерживают различные способы инициализации, которые позволяют задавать значения элементов при объявлении массива. Для этого можно использовать фигурные скобки и перечислить значения через запятую6. Например, int numbers5 = {1, 2, 3, 4, 5} - это одномерный массив из пяти целых чисел. Если количество значений меньше размера массива, то оставшиеся элементы будут заполнены нулями. Если количество значений больше размера массива, то компилятор выдаст ошибку. Также можно опустить размер массива и позволить компилятору вывести его из количества значений. Например, int numbers[] = {1, 2, 3} - это эквивалентно int numbers[3] = {1, 2, 3}.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Только программисты поймут )
Источник: https://vk.com/wall-119334888_69174