LINUX.ORG.RU

Избранные сообщения bonta

ПО для SpaceX разработано на С++

Форум — Talks

"Управляющее полётом Falcon 9 ПО написано на C/C++ и запускается параллельно на каждом из трёх компьютеров. Три дублирующих компьютера необходимы для обеспечения должного уровня надёжности за счёт многократного резервирования. Результат каждого решения сравнивается с результатом, полученным на остальных компьютерах, и только при совпадении на всех трёх узлах команда принимается микроконтроллером, управляющим двигателями и решётчатыми рулями.

В доставляемом на орбиту пилотируемом космическом корабле Crew Dragon также используется Linux и полётное ПО на C++."

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

Перемещено leave из development

 , ,

Lzzz
()

В чем плюсы контейнеров для разработки?

Форум — Development

Вот есть классический подход: наваял тулчейн (например, с помощью crosstool-ng), напихал туда нужных библиотек и таскаешь его с собой между системами в виде архива.

Сейчас модно нахерачить целый докер образ и таскать его с собой.

Вопрос: в чем плюс подобного подхода?

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

 ,

Trunk
()

C++ — сила, а вы не верили

Форум — Talks

Опытный разработчик игр проясняет смузихлебам за С++, линукс и emacs.

Для Ъ: аватар поставил хипсторов на место

P.S. на 02:00:00 самое интересное. Он рекомендует Croco.

Таймкоды в первом комментарии на ютубе.

 , , ,

BceM_IIpuBeT
()

Нашёл алгоритмического видео дядьку - палю годноту

Форум — Development

Залипателям на картинки, таким как я, зайдёт норм. Рассказывает про базовые, но тем не менее фундаментальные вещи. (Хотя я только 4 ролика глянул , может я не прав).

Вот ещё от @xaizek ваще крутые визуализации

 ,

LINUX-ORG-RU
()

Хочу стать программистом C/Linux в 32 года — часть 2

Форум — Talks

Это продолжение моего первого поста.

Перед Новым годом отправил резюме в компанию в своём городе Владивостоке. К сожалению, это единственная компания в нашем регионе, которая нанимает C/C++ программистов. (Если вы не знали, на всём Дальнем востоке есть только две крупные IT-компании: это Farpost и Ронда. Farpost занимается веб-порталами, а Ронда это небольшой Luxoft, которая делает как свои проекты, так и серьёзный софт на заказ для американцев и японцев.)

HR говорит: «Давайте вы сначала напишите наш тест на знание языка C. В отдел встроенных систем они берут только тех, кто хорошо сдал тест на 30-40 баллов.» Я спрашиваю: «А какой максимальный балл?» Ответ: «100 баллов.» Оказывается, у них там какой-то сложный тест, за неправильные ответы снимают баллы, и вообще можно в минус уйти.

Я написал тест на 98 баллов. Они ответили, что это отличный результат и они «очень заинтересованы» в моей кандидатуре и хотят меня нанять, открытие новых вакансий ожидают в начале февраля. Февраль прошёл, а я ещё не нанят. Это не значит, что они лгали, у меня есть причины так полагать. Наверное, хотят «сбросить жир» и не нанимают новых разработчиков на место уволившихся.

Вообщем, я решил также развиваться в C++. Очевидно, что для плюсовиков в разы больше вакансий, чем для сишников. Но продолжаю полировать свой C и изучать устройство Linux. Концепции операционных систем применимы во всех областях, даже в веб.

 , , , ,

Graduate
()

Мы нашли очередную порцию глюков в Linux Kernel

Форум — Development

Используя таинственный инструмент XXX-Xxxxxx, мы вновь нашли кучу ошибок в Linux Kernel. Для желающих словить от этих ошибок Facepalm прошу пожаловать под кат.

Мне вот просто интересно, с какой теперь аргументацией будет бан интересного материала. :)

( Посмотреть ошибки в Linux Kernel и их описание )

 , , , ,

Andrey_Karpov_2009
()

Посмотрел я этот ваш Rust

Форум — Development

Вобщем, дошли руки потыкать палочкой.

Я вот что не пойму - зачем и кому он нужен, ну правда?

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

Close to metal? Нет, извините, мне когда надо будет close to metal - я пойду сишку возьму. Которая реально, и Close To Metal, и со стабильным ABI, так важным для низкоуровневого программирования, и так далее. А если просто производительности не будет хватать, в том числе там из-за GC, так ведь - что в Java, что в Common Lisp, есть огромное количество возможностей затюнить производительность до нужного уровня, при этом не стреляя себе в ногу.

Продуктивность разработчика? Я сильно в этом сомневаюсь. Потому что вот есть языки программирования, предлагающие наибольшую продуктивность, не ограничивающие пользователя практически никак, и, конечно, вместе с тем, довольно сильно нагружающие межушной нервный узел, довольно нетривиальные для изучения. Как пример, лиспы всевозможные. Но Rust в их число не входит. Там на каждом углу костыли, подпорки, железные двери с замками, и чуть что так обухом по голове можно получить.

Наконец, ну безопасность чтоли, хваленая? Ну, опять нет. Взять тот же unsafe. Если вам нужна прямо таки безопасность-безопасность - берите что-нибудь вроде хаскеля(или какого-нибудь Coq, или что-нибудь подобное, с зависимыми типами, если совсем упоролись), ну или на худой конец, что-нибудь вроде Java, где все безопасно прямо как в дурдоме с мягкими стенами.

Вобщем, не вижу зачем этот язык нужен, нам и C++ хватает, если надо не ехать, а шашечки(т.е. тупо позадротствовать, да).

 ,

lovesan
()

TokyoCabinet: implicit transactions, альтернативы?

Форум — Development

Всем здратути. А работал ли кто с сабжем?

Приспичило мне тут погуглить на предмет embedded NoSQL for C/C++. Нашёлся сабж. Прям идеально что хотел: безо всяких там json-заморочек, тупая бинарщина – кусок памяти под ключ, кусок памяти под значение; есть Hash DB, B+ Tree DB и Fixed-length DB; что ещё здоровому человеку может быть нужно?

Плюс, судя по нагугленному, по скорости его ещё никто не переплюнул, так что вопрос про альтернативы – чисто на всякий случай. Ихний же KyotoCabinet не интересен: (1) GPL; (2) там нет Fixed-length DB; (3) на SO гуглилось что TC в некоторых аспектах всё равно лучше. А тривиальные RAII-обёртки вокруг евойного сишного API любой дурак напишет.

Но непонятно про транзакции. Что случится, если я буду писать без явных вызовов start transaction (…dbtranbegin()) & commit (…dbtrancommit())? Мне не нужно batch writes, я собираюсь писать по одной записи за раз, но нужно чтобы в момент выхода из функции записи база была на диске и консистентная. Т.е. хочу implicit transactions. Вызвать start transaction & commit явно мне не проблема, но мечтается обойтись без WAL-файла (т.к. это замедление).

По этой теме в доках есть только два пассажа:

(1) «database file is not corrupted even under catastrophic situation» – но corruption тут можно трактовать по-всякому; так есть поведение implicit tranasction или нет?

(2) В функциях …dbopen() для всех типов баз есть флаг HDBOTSYNC, «which means every transaction synchronizes updated contents with the device». Будет ли этот флаг действовать, если я НЕ стартую транзакцию явно?

 ,

dimgel
()

X11 опасен?

Форум — General

Подсобите советом, только осваиваю Linux, в частности Debian, и возник вопрос, а так ли опасен X11, в плане кейлогеров и т.п.?

Если я правильно понимаю, то доступ к «прослушиванию» клавиаутры/мыши/экрана есть у приложений, запущенных из-под текущего пользователя (конечно, если не делать xhost +). Если данные приложения я устанавливаю из оф. репозитория, получается, что вероятность кейлогеров и прочего минимально, отсюда вроде как напрашивается вывод, что и не сильно опасен X11 по умолчанию, я не прав? Почему рекомендуют запуск в отдельном сервере (Xpra, Xephyr и т.п.)?

Пробовал запуск программ в отдельном Xephyr, но так и не придумал, как быть с тем же буфером обмена. Не удобно получается, когда браузер допустим в отдельном сервере запускается, а менеджер паролей в другом и пользоваться буфером обмена не получается. Разве что какой-то общий файл в темпе делать, но это неудобно.

 ,

Dstart
()

Радикальная альтернатива браузеру

Форум — Web-development

На тему натолкнули 2 статьи

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

Так почему бы не сделать некую виртуальную машину ? Например WebAssembly и некое видеопространство на котором можно рисовать. Но не HTML и прочее, а тупо как на десктопе, набор точек.

Что это дает ?

  • Скорость, используются только необходимые вызовы.

  • Надежность, отрисовка не происходит через чудовищного монстра с названием браузерный движок.

  • Гораздо легче замутить свой браузер, все будет состоять из компонентов

  • Сайт можно писать на любом языке

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

Десктоп и Delphi возвращаются :)

 ,

ism
()

SObjectizer-5.7.0 с поддержкой send_case в select() и so5extra-1.4.0 под BSD-лицензией

Форум — Development

Вышли очередные версии библиотек SObjectizer и so5extra.

SObjectizer – это один из немногих все еще живых и развивающихся «акторных фреймворков» для C++ (еще есть QP/C++, CAF: C++ Actor Framework и совсем молодой еще проект rotor). Краткий обзор SObjectizer-а можно найти в этой презентации или в этой довольно старой уже статье. Хотелось бы подчеркнуть, что SObjectizer поддерживает не только модель акторов, но еще и такие модели как Publish-Subscribe и Communicating Sequential Processes. А so5extra – это набор дополнительных полезных прибамбасов для SObjectizer-а (например, реализованные на базе Asio диспетчер с пулом нитей и env_infrastructures, дополнительные типы message box-ов, средства для реализации синхронного взаимодействия и т.д.)

Если в двух словах, то:

  • SObjectizer-5.7 теперь позволяет использовать send_case в функции select(). Это делает SObjectizer-овский select() гораздо более похожим на select из Golang-а. Но это нововведение нарушило совместимость с предыдущей версией 5.6, т.к. теперь старая функция case_ стала называться receive_case;
  • в версии 5.7 устранен недочет в механизме доставки обернутых в конверты сообщений (т.е. enveloped messages) в случае использования transfer_to_state() и suppress() у агентов-получателей;
  • код so5extra теперь распространяется под BSD-3-CLAUSE лицензией, что позволяет бесплатно использовать so5extra при разработке закрытого программного обеспечения. Предыдущие версии распространялись под двойной лицензией (GNU Affero GPL v.3 и коммерческой);
  • в so5extra-1.4 реализованы mchain-ы фиксированной емкости для случаев, когда эта емкость известна на этапе компиляции.

Если же рассказывать более подробно, то основная фишка SObjectizer-5.7 – это возможность использования select() для отсылки исходящих сообщений (по аналогии с тем, как это происходит в Golang-е). Так что теперь можно делать вот такие вещи:

using namespace so_5;

struct Greetings {
   std::string msg_;
};

// Попытка отослать сообщения в соответствующие каналы,
// но все операции должны уложиться в 250ms.
select(from_all().handle_n(3).total_time(250ms),
   send_case(chAlice,
      message_holder_t<Greetings>::make("Hello, Alice!"),
      []{ std::cout << "message sent to chAlice" << std::endl; }),
   send_case(chBob,
      message_holder_t<Greetings>::make("Hello, Bob!"),
      []{ std::cout << "message sent to chBob" << std::endl; }),
   send_case(chEve,
      message_holder_t<Greeting>::make("Hello, Eve!"),
      []{ std::cout << "message sent to chEve" << std::endl; }));

В одном select() можно использовать и send_case() и receive_case() вместе. Например, вот SObjectizer-овская версия вычисления чисел Фибоначчи из в отдельном рабочем потоке (по мотивам из Golang’s tour):

using namespace std;
using namespace std::chrono_literals;
using namespace so_5;

struct quit {};

void fibonacci( mchain_t values_ch, mchain_t quit_ch )
{
   int x = 0, y = 1;
   mchain_select_result_t r;
   do
   {
      r = select(
         from_all().handle_n(1),
         // Отсылка сообщения типа 'int' со значением 'x' внутри.
         // Отсылка выполняется только когда values_ch готов для приема
         // новых исходящих сообщений.
         send_case( values_ch, message_holder_t<int>::make(x),
               [&x, &y] { // This block of code will be called after the send().
                  auto old_x = x;
                  x = y; y = old_x + y;
               } ),
         // Ожидание сообщения типа `quit` из канала quit_ch.
         receive_case( quit_ch, [](quit){} ) );
   }
   // Продолжаем операции пока что-то отсылается и ничего не прочитано.
   while( r.was_sent() && !r.was_handled() );
}

int main()
{
   wrapped_env_t sobj;

   thread fibonacci_thr;
   auto thr_joiner = auto_join( fibonacci_thr );

   // Канал для чисел Фибоначчи будет иметь ограниченный объем.
   auto values_ch = create_mchain( sobj, 1s, 1,
         mchain_props::memory_usage_t::preallocated,
         mchain_props::overflow_reaction_t::abort_app );

   auto quit_ch = create_mchain( sobj );
   auto ch_closer = auto_close_drop_content( values_ch, quit_ch );

   fibonacci_thr = thread{ fibonacci, values_ch, quit_ch };

   // Читаем первые 10 значений из values_ch.
   receive( from( values_ch ).handle_n( 10 ),
         // Отображаем каждое прочитанное значение.
         []( int v ) { cout << v << endl; } );

   send< quit >( quit_ch );
}

Полное описание нововведений версии 5.7.0 можно найти здесь.

Основное изменение в so5extra-1.4 – это смена лицензии на BSD-3-CLAUSE. Поэтому теперь все множество дополнений к SObjectizer-у из so5extra могут бесплатно использоваться в разработке закрытого коммерческого ПО.

Единственное нововведение в so5extra-1.4 – это реализация mchain для случая, когда максимальный объем mchain-а известен на этапе компиляции. Подобные mchain-ы зачастую используются в сценариях request-response, где ожидается всего одно ответное сообщение на запрос:

#include <so_5_extra/mchains/fixed_size.hpp>
#include <so_5/all.hpp>
...
using namespace so_5;

// Канал для получения ответного сообщения.
auto reply_ch = extra::mchains::fixed_size::create_mchain<1>(env,
   mchain_props::overflow_reaction_t::drop_newset);
// Отсылаем запрос.
send<SomeRequest>(target, ..., reply_ch, ...);
// Ждем и обрабатываем ответ.
receive(so_5::from(reply_ch).handle_n(1), [](const SomeReply & reply) { ... });

Надеюсь, что SObjectizer/so5extra кому-нибудь окажется полезен. Если есть вопросы, то спрашивайте, постараюсь ответить.

 , , ,

eao197
()

Инструмент для обнаружения гонки данных?

Форум — Development

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

А теперь как мне проверить что это правильно работает?;-)

Ну то есть понятно, что я могу запустить последовательную версию и сравнить ее результаты с параллельной. Но может есть какая то хитрая утилита которая сразу ткнет меня носом - вот тут конфликт между потоками?

 , , ,

AntonI
()

Максимально допустимый размер массива на стеке?

Форум — Development

Есть некая функция которая использует временный массив. Если массив маленький, хочется создавать его на стеке (что бы не дергать менеджер памяти), если большой приходится делать его в куче (иначе сегфолт). Я че то не пойму, как построить правильный критерий выбора того или иного варианта?

Какой то вот такой кривой пример кода:

int Nmax = 1024; // максимально возможный размер буфера на стеке
void func(){
  int N = ...;
  T p_buf[(N<=Nmax)*N];
  T* p = p_buf; if(N>Nmax) p = new T[N];
  ...
  if(N>Nmax) delete [] p;
}

 

AntonI
()

Стали доступны видео докладов с C++ CoreHard Autumn 2019

Форум — Development

На YouTube на канале corehard стали доступны видеозаписи следующих докладов с прошедшей в конце ноября конференции C++ CoreHard 2019:

Ссылка на плейлист: https://www.youtube.com/playlist?list=PLgsLnJ-wgYTaGUCiwpLKtJ4XkSy_vf9C-

 

eao197
()

Ultimate++ (U++)

Форум — Development

Нашел недавно интереснейший «инструмент». Из вики:

Ultimate++ (известен также как U++ и UPP) — кросс-платформенный инструментарий разработки ПО на языке программирования C++. Целью U++ является уменьшение сложности типичных десктопных приложений за счёт интенсивного использования особенностей C++.
...
Представляет собой фреймворк, призванный не только обеспечить быструю разработку GUI-приложений, но и, в идеале, заменить все сторонние библиотеки и инструменты для С++, включая даже STL

Например, минимальное приложение:

#include <CtrlLib/CtrlLib.h>

using namespace Upp;

GUI_APP_MAIN 
{

}

Создание окна:

#include <CtrlLib/CtrlLib.h>

using namespace Upp;

class MyWindow : public TopWindow {
public:
    MyWindow() {
        Title("Hello world!");
        MinimizeBox();
        MaximizeBox();
        Sizeable();
        SetRect(0, 0, 300, 300); 
    }
};

GUI_APP_MAIN
{
    MyWindow().Run();
}

Собственно сам сайт: http://www.ultimatepp.org/

Интересная страничка сравнения U++ с аналогичным по функциональности кодом Qt, Java, wxWidgets, C++ STL, D. Код на U++ выгладит короче и читабельнее.

На лоре про него тему нашел довольно старую. Больше, вроде бы, упоминаний нет. Интересно почему U++ остался не замечен?

В комплекте отличная, самодостаточная IDE с атокомплитом и подсказками. Так же есть лайоут-редактор для формо-шлепства мышкой. Куча примеров, многопоточность и т.д.

То есть отличный вроде бы инструмент. Лицензия BSD. Пожалуйста, пользуйтесь. Но нет — люди пишут на скриптах, запускают на электроне.

Пользуетесь ли вы U++? А почему нет?

Просто хотел поделиться, вдруг кто не знал, но искал такое.

 ,

ult
()

Uinput передвижение мыши

Форум — Development

Привет,

Мне нужно написать функции, которые двигают курсор, кликают мышкой. До некоторого момента, реализовывал это через Xtst, X11 - работало. Сейчас на ноутбуке имею Debian с Wayland и соотвественно работать перестало. Нашел решение в виде uinput. Набросал пару функции. И тут в чем особенность поведения - он один раз , ПЕРВЫЙ, передвинул. Под первым имею в виду первую запись в дескриптор uinput. Потом перестает. Клики мышки также работают, но только один раз.

Вот код : https://pastebin.com/zF5KKTVC

Захостил на всякий случай сдесь, может пригодиться кому.

https://gist.github.com/regular-dev/7a214f8b52911a63afe803693d467863

Помогите люди добрые !

 , ,

xionovermazes
()

Курс лекций «Современный и эффективный С++»

Форум — Development

На Хабре выложили список лекций, посвященный языку C++. Рассматриваются такие темы как: С++11, C++14, C++17, STL, метапрограммирование, неопределенное поведение.

 

Dvorak
()

Баг или фича?

Форум — Development

#include <vector>

const size_t i = 20;


int main()
{
    //auto p = std::make_pair<void*, size_t>(nullptr, i); // doesn't work
    auto p = std::pair<void*, size_t>(nullptr, i); //works
}

gcc 9.2.0, собираю с -std=c++17

 

Dudraug
()

Вышел Milton 1.9.0 – программа для компьютерной живописи и рисования

Новости — Мультимедиа
Вышел Milton 1.9.0 – программа для компьютерной живописи и рисования
Группа Мультимедиа

Состоялся релиз Milton 1.9.0, программы для рисования на бесконечном холсте, ориентированной на компьютерных художников. Milton написан на С++ и Lua, лицензирован под GPLv3. Для отрисовки используются SDL и OpenGL.

Доступны бинарные сборки для Windows x64. Несмотря на наличие сборочных скриптов для Linux и MacOS, официальной поддержки данных систем нет. Если хотите собрать у себя, возможно, поможет старое обсуждение на GitHub. Пока известны только случаи успешной сборки предыдущих версий.

Разработчики предупреждают: «Милтон — не редактор изображений и не редактор растровой графики. Это программа, позволяющая вам создавать рисунки, эскизы и картины». Обычно использование векторного представления подразумевает преобразование графических примитивов. Milton в работе больше напоминает растровые аналоги: поддерживаются слои, можно рисовать при помощи кистей и линий, есть размывание. Но за счет использования векторного формата возможна почти бесконечная детализация изображений. Приложение использует цветовую схему HSV, уходящую корнями в классические теории цвета. Процесс рисования в Milton можно посмотреть на YouTube.

Milton сохраняет каждое изменение и поддерживает бесконечное количество отмен и восстановлений правок. Доступен экспорт в JPEG и PNG. Программа совместима с графическими планшетами.

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

  • мягкие кисти;
  • зависимость прозрачности от давления;
  • поворот (с помощью Alt);
  • размеры кистей, задаваемые относительно холста.

>>> Новость на OpenNet

 milton, ,

Bagrov
()

Стали доступны видео докладов с C++ CoreHard Spring 2019

Форум — Development

На YouTube на канале corehard стали доступны видеозаписи следующих докладов с прошедшей весной конференции C++ CoreHard 2019:

 

eao197
()