Ответы пользователя по тегу C
  • Жизнеспособна ли задумка и реализация "динамического" rpc?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вполне себе жизнеспособна.

    В стандарных туториалах по Hadoop/AVRO есть пример на Java, где схема
    месседжа изначально не известна но ее наполнение появляется в фазе рантайм
    приложения.

    А все компилляторы protobuf, AVRO, thrift просто помогают убрать рутину. Но при
    этом требуют чтобы до компилляции все спецификации были известны.
    Ответ написан
    Комментировать
  • Можно ли использовать в wasm загрузку dll библиотеки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Здесь перечислены языки, которые могут являться источниками кода для WebAssembly

    https://webassembly.org/getting-started/developers...

    и вашего кейса среди них нету.
    Ответ написан
  • Почему clang выдает такой ассемблерный код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если - бы я был бизнесом и автор пришел бы ко мне с таким вопросом - я б спросил : как сильно
    влияет этот код на наш бизнес
    . И как много времени и сил мы хотим потратить на investigation
    этой проблемы.

    Я языках программирования и компилляторах всегда есть много забавных побочных эффектов. Но
    не все из них являются performance issue. Чтоб быть в фокусе. Обычно performance issues изучают
    в
    - циклах
    - векторизированных операциях
    - параллелизм и конкуренция в многопоточке
    - I/O

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

    Что мы имеем в данном примере? Ровно ничего. Совершенно софистический код, который не делает
    полезной работы и мы не можем никак оценить пользу или вред от оптимизаций. К слову если-бы
    инициализация Point стояла бы в теле цикла, то мне не составило-бы труда развалить ее на атомы
    (две переменных int) выполнить над ними все калькуляции и после выхода из цикла собрать снова
    эту-же структуру.

    Оценю в 1 story point вместе с тестами. И это будет дешевле по усилиям даже чем обсуждать этот
    вопрос в хабре. Грубо говоря вопрос будет закрыт даже не появившись.

    Автору еще посоветую посмотреть на GCC. И посмотрет на промежуточный LLVM код, который создает
    clang еще до ассемблера. Возможно это поведение там зафиксировано. Как особенность clang.
    Ответ написан
  • Как правильно реализовать структуру данных для упаковки многомерного(кол-во измерений не известно сразу)массива в JSON / любой другой формат данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если размерности известны. Например 120 на 30 на 200 на 40 то такой гипер-кубик
    можно упаковать в обычный линейный массив. И он будет по длине равен 28800000 элементов.
    Таким образом любой многомерный массив укладывается в одномерный.
    Формула доступа будет достаточно простая. Почти тоже что и для матрицы.

    Тоесть задача хранения - решена.
    Ответ написан
    9 комментариев
  • Нужен ХОРОШИЙ rpc для языка Си, есть ли решения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри еще в Apache Thrift. Это не совсем RPC. Это скорее стандарт на универсальный
    обмен информацией между разными языками и платформами. Но у него в качестве
    примеров есть клиент-сервер на сокетах.

    На нем также описан стандарт файлового формата Parquet для bigdata.

    https://thrift.apache.org/
    Ответ написан
    Комментировать
  • Реализация шифрование части исполняемого кода на Си?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можешь зашифровать ddl-ку и после успешной расшифровки - динамически подгружать ее к коду.
    Но тут возможны нюансы с антивирусом.
    Ответ написан
    Комментировать
  • Как реализовать кроссплатформенную поддержку Unicode в аргументах командной строки в C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе проще всего посмотреть как эта задача уже решена в других Windows/Linux проектах.
    Я думаю что ты тут не первооткрыватель. Уже решали эту задачу миллион раз.
    Ответ написан
  • Может ли язык Си работать на условной stack-based машине?

    mayton2019
    @mayton2019
    Bigdata Engineer
    на условной stack-based машине


    С точки зрения практических стековых машин. Существует язык стек-ориентированный Forth и на нем программируют микроконтроллеры и вообще творят всякие штуки которые можно описать алгоритмом. Гитхабе я находил проекты реализаций языка Lisp на Forth. Тоесть ... скорее всего можно все.

    Является ли Форт в данном вопросе stack-based машиной - я не знаю. Он - скорее всего шире чем просто
    стек машина. По крайней мере есть ссылки на память и стек возвратов.

    Для прояснения - желательно чтобы автор привел свое понимание термина. Потому что есть еще
    push down automata, это тоже термин и его надо как-то сопоставить с тем что пишет автор
    иначе у нас будет оооочень много стековых машин с разными свойствами и мы запутаемся.
    Ответ написан
  • Что стоит учить с или c++ или c#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Добрый вечер! Столкнулся с такой проблемой: Мне очень нравятся семейство языков Си, у меня есть выбор учить C++ либо C#, хочу разрабатывать ПО для ПК. Подумал начать с C++ и говорят что сначала поучить чистый СИ, а после переходить на C++, так что же из этого правильно? Надо ли учить Си? Или может лучше начать с C#, а дальше уже выучу C++?

    Тема сравнения С/C++/C# в публичном пространстве - опасная тема. Она обычно заканчивается
    топиком в 1000 страниц и великой войной всех против всех. Я видел много таких войн.
    Они ничем не заканчиваются. Специалисты остаются при своих мнениях. А зритель просто развлекается.

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

    Чистый СИ учить смысла нет. Учи сразу С++. Но даже его создатель Бьорн Страуструп считает что С++ это
    сложный язык и он настаивает чтобы новички не брались учить все фичи сразу. Исключение по языку
    СИ может быть в том случае, если ты собрался быть инженером по разработке микро-контроллеров
    и у тебя скорее всего будет только СИ как основной (на 80-90%) инструмент взаимодействия с таким железом. Выйти на мидловый или синьорный уровень в С++ очень тяжело. Тяжелее чем в других языках.
    Поэтому будь готов терпеть. Вот когда виски станут седые - тогда и будешь господин-синьор.

    C# - это очень сильно корпоративный стандарт от Microsoft. Никакой связи с С++ он не имеет. Он конечно
    внешне похож но это сходство обманчиво. Да изучать его тоже можно. Он учится легко. Существуют книги
    вроде ".... C# за 14 дней". Разработка бизнес-приложений на шарпах идет гораздо быстрее чем на С++
    например. И завалить систему в синий экран в этом языке гораздо труднее. В нем реализованы методы
    защиты памяти и нельзя грязно трюкачить с указателями как это любят в С или С++. Производительность
    шарпов в численных методах будет слабее чем в С++ но обычно бизнес не ставит таких задач и чаще
    надо будет писать веб-хендлеры или хендлеры MQ-систем. Кач уровней синьорити идет быстрее в шарпах.
    Ответ написан
    2 комментария
  • Почему программа прерывает свою работу на C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возможно scanf при попытки считывать 1 character читает предыдущий enter.

    Попробуй рецепт который пишут тут https://stackoverflow.com/questions/13542055/how-t...
    Ответ написан
    1 комментарий
  • Почему после ассемблера учить Си легче?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть две трудности с которыми сталкиваются студенты изучая С. Это адресная арифметика и работа со строками.
    Эти две темы зайдут легко если вы до этого уже знали Ассемблер.

    Но мне в общем кажется странным такая хронология изучения. Какой ВУЗ такое дает? Если вы до этого
    случайно знали Ассемблер - то это удивительный и исключительный факт. Насколько я знаю даже
    безопасники и системотехники не очень изучают asm. Я-бы сказал факультативно.
    Ответ написан
    Комментировать
  • Нужно ли писать суффиксы литералов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во всех случаях мы описали тип слева. Тоесть задача типизации - выполнена.
    float a = 1.0f;
    unsigned int a = 10u;

    Я думаю что ничего дополнительно указывать не надо. В противном случае у code-reviewer
    это вызывает удивление и очередной WTF. Тоесть вам придется объяснять своему коллеге
    ДЛЯ ЧЕГО вы ввели в исходные код дополнительную информацию.

    Нужно писать так чтобы у коллег к вашему коду вообще не возникало вопросов.
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут как-то странно написано.
    if(m == 'd') racket.x + 1;
    if(m == 'a') racket.x - 1;


    Если хочешь чтоб результат сохранился то надо или инкремент написать или выражение с присваиванием
    racket.x = racket.x + 1;
    Ответ написан
    2 комментария
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю можно. Поищи такие компилляторы как Watcom C, Borland C.
    Они умеют генерить код для DOS. На ваткоме кажется была написана
    игра Doom for DOS.

    UPD +Линка www.openwatcom.org
    Ответ написан
    Комментировать
  • Как управлять значением пикселей на экране в виндовс?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во времена DOS это работало да. Ты мог писать напрямую в банки видеопамяти старых карточек типа VGA/SVGA.
    Примеры кода для C++ можно найти в книжке Шикина и Борескова по графике. Но я не советую потому что
    не актуально. И современный стек графики чуть длиннее.

    Знание того как работает OpenGL и DirectX - скорее всего тебе не даст полной картины как работает железо.
    Потому что железо NVidia и железо Radeon скорее всего будет сильно отличаться. Как будут обобщены отличия - чорт его знает. Скорее всего через драйвер. Но если ты очень хочешь поработать с пикселами отдельно и быстро
    по посмотри в SDL. Я кстати тоже туда хотел посмотреть на днях. Мне чего-то захотелось температурную
    карту IPv4 адресов нарисовать. Я такую видел образца 2009 года. А тут захотел свою.
    Ответ написан
    5 комментариев
  • Как решить задачу на c?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Задача похожа на knapsack problem. Ее можно переформулировать как укладка вещей в рюкзаке с полным заполнением и с сохранением порядка вещей. Или еще как поиск всех сумм целых чисел 1,2,3 равных в сумме n.

    Если представить тернарное дерево где childs - это соотвественно длины прыжков (веса) - тогда задача сводится к генерации всех возможных путей в тернарном дереве где длина пути равна n. У этого дерева будет много лишних ветвей которые можно сразу отбросить на этапе обхода если частичная сумма уже больше чем n.

    Вобщем DFS.
    Ответ написан
    Комментировать
  • Как понять какой стандарт Си используется в проекте?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В исходниках может не быть никакого явного указания стандарта. Можно попробовать собирать проект начиная с самых старых версий и вести учет ошибок. Вот как ошибки уйдут - так и стандарт соотвествует.
    Ответ написан
    Комментировать
  • Как можно передать структуру в printf, а к переменным её обращаться из шаблона?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данная задача решается мета-программированием. Это предполагает 2 фазы компилляции. Поскольку
    речь идет о языке С. У нас нет рефлексии и нет шаблонов. То я вижу только такой выход.

    Вобщем 2 фазы. В первой фазе - объявить структуру TS1 в каком-то обобщенном формате.
    Например в JSON.
    {
      "struct" : {
        "name" : "TS1",
        "fields" : [
          { "name" : "a", "type" : "int" },
          { "name" : "b", "type" : "int" }
        ]
      }
    }


    И сгенерировать из этой структуры код для декларации ее в языке C и для форматной
    печати через printf.
    Ответ написан
    Комментировать
  • Как в языке СИ проверить существует ли файл без создания нового?

    mayton2019
    @mayton2019
    Bigdata Engineer
    FILE *handle = fopen("filename", "r")
    возвращает файловый указатель. Если открываешь на чтение - то он обычно null если файла
    не было или была какая-то другая ошибка. Детали по ошибке выдает другой системный вызов errno, streeror или
    что там еще есть другое не помню точно.
    Ответ написан
    Комментировать
  • Как создать массив из типов данных в си?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для того чтобы это работало в духе ООП, все типы должны иметь базовый тип.

    Для функциональщины - нужно иметь абстрактный тип Any и коллекции типов которые - суть
    подтипы Any. И функцию с pattern matching которая просто кастомизирует size() и прочие
    функции. Короче почти ручная работа.

    Задача интересная и мне кажется что она реально не решаемая в рамках чистого языка С.
    Но если использовать кодо-генерацию (транспилляцию) то можно просто как-то автоматизировать создание
    такой логики. Но будет ли это языком С или вообще чем-то другим - большой вопрос.
    Ответ написан
    Комментировать