LINUX.ORG.RU

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

Форум — Talks

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

 , ,

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

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

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

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

Lzzz
()
Форум — Development

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

 ,

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

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

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

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

Trunk
()
Форум — Talks

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

 , , ,

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

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

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

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

BceM_IIpuBeT
()
Форум — Development

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

 ,

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

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

LINUX-ORG-RU
()
Форум — Talks

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

 , , , ,

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

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

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

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

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

Graduate
()
Форум — Development

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

 , , , ,

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

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

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

Andrey_Karpov_2009
()
Форум — Development

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

 ,

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

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

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

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

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

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

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

lovesan
()
Форум — Development

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

 ,

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

Приспичило мне тут погуглить на предмет 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
()
Форум — General

X11 опасен?

 ,

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

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

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

Dstart
()
Форум — Development

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

 ,

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

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

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

Что это дает ?

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

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

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

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

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

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

ism
()
Форум — Development

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

 , , ,

Вышли очередные версии библиотек 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
()
Форум — Development

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

 

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

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

eao197
()
Форум — Development

Ultimate++ (U++)

 ,

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

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
()
Форум — Development

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

 , ,

Привет,

Мне нужно написать функции, которые двигают курсор, кликают мышкой. До некоторого момента, реализовывал это через 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, ,

Вышел 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 (opennet.ru)

Bagrov
()
Форум — Development

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

 

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

eao197
()