• Почему не создают компьютеры с машинным языком на C/C++?

    15432
    @15432
    Системный программист ^_^
    Процессор это тупая железяка из транзисторов. Ну ладно, не настолько тупая, в современных x86 процессорах машинные коды на лету транслируются в еще более низкий уровень встроенным микрокодом. Но все все равно предположим, что это тупая железяка типа Intel 8086. Как происходит выполнение программы - процессор считывает очередной байт кода и смотрит, что же он такое считал. По значению байта, он определяет, что это за команда (сложение, вычитание) и сколько ещё нужно считать байт конкретно этого машинного слова (а они в x86 могут быть разной длины). Все это происходит на уровне железа, то есть нечто вроде "пятый бит 0, третий бит 1, ага! Это команда сложения двух восьмибитных регистров, надо переключить линию данных на арифметико-логическое устройство и считать туда еще два байта на шину данных. То есть операции очень и очень простые, на уровне бит, сигналов и чтения данных, никакого анализа кода и уж тем более никаких имен переменных. Вы же предлагаете на аппаратном уровне парсить сишный код, в котором при последовательном чтении иногда невозможно определить, что делать в данный момент!! А процессор в это время будет простаивать и считывать из памяти кучу ненужного текста.
    Я вообще не представляю, как на уровне железа и транзисторов можно сделать синтаксический и лексический анализ сишного файла. Разве что сделать настоящий электронный мозг с миллиардом нейронов. Это уж точно не будет быстро, это вообще работать не будет. Изучите устройство компьютера, как именно работает процессор, научитесь думать на языке ассемблера, и поймёте всю абсурдность вашего предложения.
    Ответ написан
    4 комментария
  • При завершении работы программы падает исключение, что делать?

    @Mercury13
    Программист на «си с крестами» и не только
    Это испорченная память, где-то ошибка в управлении памятью (например, запись за границами массива).
    UPD. Ваша ошибка: в составе std::string есть внутренние неконтролируемые поля, и его нельзя побайтово сохранять в файл. Такими неконтролируемыми полями могут быть указатели, кэши-ускорители и многое другое. Вообще std::string состоит из указателя или двух, и отсюда следуют две вещи. 1) При сохранении в файл не попадут строковые данные, попадёт только указатель. К тому же в Windows нет хорошего 16-ричного просмотрщика, а без него при работе с файлами как без рук (по крайней мере начинающему, я давно обхожусь). 2) Как только вы этот указатель загрузите, std::string портится, и на деструкторе может случиться что угодно.

    Вам надо самим придумать формат файла и реализовать загрузку/сохранение, используя length(), data() и front().

    Важное правило: ткни в любой байт дампа вашего файла — вы должны сказать, что он значит. Из-за сложности формата это может быть сложно. Байт может быть неиспользуемым или оставленным для совместимости, но какое-то значение должно быть. Если формат многоуровневый, надо сказать назначение на всех уровнях: например, «это значение атрибута XML» на уровне XML и «это имя студента» на прикладном уровне.

    Исключение: если есть объект-«чёрный ящик», который написан не нами и сериализуется гарантированно корректно, достаточно сказать: «это часть чёрного ящика». (Сериализуется — это переводится в цепочку байтов, например, файл или сетевой поток.)

    Что ещё пока вижу (но это не причина ошибки).
    1.
    unsigned short int *exam_t = new unsigned short int[5];
    Нет нужды new, невелик массив. Хватает локального массива на стеке. Аналогично остальные два new.
    2. Нет нужды давать clear/close. Это фишка Си++, автоматически сработает деструктор.
    3. Не называйте переменную flag, называйте wasFound (или что она реально значит).
    4. sizeof(&student_r) только чудом совпадает с sizeof(student_r).
    5. Не надо писать flag == false, надо !flag.
    6. Функция del_reversive делает излишнюю работу и переставляет студентов, к тому же есть стандартный алгоритм remove_if.
    7. while (!flag) в del_rev бессмысленно.
    8. Вы же работаете со string’ами — зачем вводить информацию в буфер ограниченной длины?
    9. Программа не модульная, нет нужды в хедере.
    Ответ написан
    Комментировать
  • Как запоминать код, который писал две недели назад?

    @nirvimel
    1. Как писать много кода, оставляя его простым, как в начале?
    2. Также советую прочесть "Совершенный код" С.Макконнелла.
    3. Качественный код не требует того, чтобы его запоминали. Качественный код может быть забыт сразу после того, как он начнет проходить все тесты. Держать в голове нужно только программные интерфейсы, но даже не все, а только, используемые на текущем уровне абстракции.
    Ответ написан
    Комментировать
  • Redmine: для чего вы её используете? Переходили ли на альтернативы?

    GavriKos
    @GavriKos
    Офигенный вопрос. "Для чего вы используете систему управления проектами" - внезапно - для управления проектами!
    Ответ написан
    1 комментарий
  • Как задать структуру в vector?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Дело в том что в компараторе сравниваются не значения в строк, а указатели на нулевой символ. Надо делать так:
    struct database{
      std::string myName; //char myName[124];
      std::string city; //char city[124];
      int age;
    };

    или так:
    sort(infa.begin(), infa.end(), [](const infa& a, const infa& b) {
            return strcmp(a.myName, b.myName) < 0;
        });
    Ответ написан
    5 комментариев
  • Как сделать динамическое увеличение кол-ва структур?

    TrueBers
    @TrueBers
    Гуглю за еду
    Если у вас С++, а не чистый Си, то конечно используют std::vector. А вместо char[] используют std::string.
    Если Си, то придётся выделять динамически через malloc.
    Ответ написан
    9 комментариев
  • Как правильно рассчитать зарплату программистов?

    @su0
    Учет рабочего времени приведет к тому что люди будут сидеть с 9 до 5 и ровно в 5 убегать недописав строчку.
    Учет строчек кода за месяц раздует исходники в 10 раз.

    Единственная возможность реально учитывать сделанную работу - по реализованной функциональности. Но тут либо надо предоставить программистам свободу в определении сроков, либо назначать сроки самому (требуется опыт и немного предвидения). И как-то разбираться с ситуациями когда Вася сделал тяпляп и быстро, а Петя потом 2 недели убирал за ним.
    Вобщем, создавайте команду, где каждый чувствует ответственность за проект. Даже если вы берете студентов.
    Ответ написан
    Комментировать
  • Скрипт, выполняемый на JavaScript за секунду, на PHP за 30 секунд проходит только 20%. В чём причина?

    Adamos
    @Adamos
    А вам никто еще руки не оторвал за такой код? Привыкли, что за вас компиляторы думают?
    Например, проверять $a != $b внутри десяти вложенных циклов - это [к сожалению, цензурных слов не нашлось].
    Кстати, РНР проверяет условия по порядку, и ставить первым самое тяжелое - это [ну, скажем, саботаж...].
    Ответ написан
    4 комментария
  • Операционная система для умного дома на C++ c полного нуля. Как?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!

    КОММЕРЧЕСКУЮ систему умный дом.
    Брать что-то за основу для подобного проекта - не солидно, и поэтому было решено делать свою ОС


    Дальше можно не читать... Но если в порядке бреда предположить, что это не толстый-толстый троллинг, то начинать надо с бизнес-плана. А вовсе не с выбора железа, софта, ЯП и т.д. Вы же хи-хи, КОММЕРЧЕСКУЮ систему собираетесь пилить :ROFL: Поэтому, прежде чем делать очередной недо-линух, сядьте и подумайте:
    - кто потребитель
    - каковы затраты
    - каковы предполагаемые продажи
    - какая схема лицензирования
    ...
    и если после всех вопросов еще не barf от всей этой скуууууучной совсем не технической нудной ерунды - дерзайте. Поди еще и протоколы взаимодействия будете сами разрабатывать? А чо? Существующие протоколы - несолидно...

    :ROFL:
    Ответ написан
    Комментировать
  • Операционная система для умного дома на C++ c полного нуля. Как?

    GavriKos
    @GavriKos
    А почему арм и малина? Это ж несолидно. Делайте свои микроконтроллеры! Добывайте кремний, разрабатывайте схему. А там и свой ASM и ось подтянутся.
    Вот ваш вопрос примерно из той же категории, если что.
    Ответ написан
    Комментировать
  • Указатели и динамическая память в С++?

    Нет, нельзя. Указатели повсюду, даже тем, где явно их не видно. Например контейнер, созданный на стеке, хранит данные всё равно в куче. Если вы даже с этим не разберётесь, то ничего из вас толкового не выйдет.

    Указатели в программировании на C++, это как таблица сложения в математике.
    Ответ написан
    8 комментариев
  • В чем суть данной конструкции?

    AxianLTD
    @AxianLTD
    ИМХО код переносили с другого языка, например из C, где false - 0, а true - любое другое число, а хотелось определенности ;-)
    Ответ написан
    Комментировать
  • Как монетизируются языки программирования и бесплатные фреймворки?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Вы, простите, много видели программистов 1С, работающих на языке программирования 1С без 1С? Я - ни одного. Закрытый "клуб по интересам", который генерит такие велосипеды, что диву даешься.
    Закрытый язык программирования никто не будет учить, на закрытом фреймворке никто работать не будет, даже если будут обучать. Для чего его учить, время тратить? Чтобы потом иметь возможность устроиться только в компанию Х? Потеря сообщества - это смерть любой технологии, любого языка, любой ОС.
    Была такая замечательная ось - OS/2. То, что она замечательная, я знаю не понаслышке - все-таки два года проработал под ней. Погубило ее как раз отсутствие поддержки - не было софта, не было программистов, не было сообщества - все постепенно разбегались кто куда. Где нынче OS/2 - да никто и не вспомнит. А отдал бы IBM ее в опен сорс - глядишь, нашлись бы пара-тройка энтузиастов.
    Продавать продукт невыгодно - его можно продать один раз. Гораздо выгоднее продавать поддержку - ее можно продавать постоянно.
    Ответ написан
    4 комментария
  • Как избавиться от double free or corruption при выгрузке библиотеки?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Выкиньте глобальные переменные. Глобальные переменные, созданные в библиотеках, несут еще большее количество проблем, чем обычные глобальные переменные.

    Всякая глобальная сущность - удар по репутации архитектора.
    Ответ написан
    Комментировать
  • Как сделать капчу?

    @Akellacom
    CTO
    Капча это зло. Для чего она вам?

    Если оградиться от ботов, то сделайте hidden поле с каким-нибудь age, name, lastname и если оно будет заполнено – то это бот.
    Ответ написан
    Комментировать
  • Есть ли разница между char* и char[число] при передаче аргументов функции?

    @abcd0x00
    Разницы нет. Вообще, принято скобки писать просто пустыми, без числа. Но в идеале, чисто стилистически для повышения читаемости, когда передаётся указатель, пишется указатель, а когда передаётся массив, пишется массив.

    Вот пример:
    Обычно пишут так
    int main(int argc, char *argv[])
    Но это можно записать и так
    int main(int argc, char **argv)
    Так как разницы нет.
    Но пишут первым способом, чтобы подчеркнуть для читателя исходника, что там массив указателей, а не просто указатель на указатель какой-то непонятный (можно его двигать, или нельзя его двигать - неясно). А в первом варианте читателю сразу понятно, что там можно применять argv++, так как движение по массиву происходит.
    Ответ написан
    Комментировать
  • Созданный проект не запускается на других компьютерах. Что делать?

    @Ariox41
    Судя по всему, вы компилируете 64-разрядный *.exe, который не может запуститься на 32-разрядной системе. Соответственно, нужно компилировать 32-разрядный, покопайтесь в настройках проекта.
    Если это не так, предоставленной информации недостаточно (какая хоть ошибка возникает?).
    Ответ написан
    7 комментариев
  • Как вы начинаете свой проект?

    Gomerkucher
    @Gomerkucher
    Frontend developer
    Настраиваю сам, create react app не позволяет насколько я знаю настроить компиляцию scss, а это критично. Да и вообще разработчик должен уметь настраивать свою среду. Мало ли какие задачи ещё встретятся в процессе разработки.
    Ответ написан
    2 комментария
  • C# Как создать структуру с полем типа массив?

    petermzg
    @petermzg
    Самый лучший программист
    [StructLayout(LayoutKind.Sequential)]
            public unsafe struct PLUGININFO
            {              
                public fixed byte name[101];      
                public fixed byte describe[201];
                public short version;
    
                // либо
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 101)]
                public string name;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)]
                public string describe;
    
                public short version;
            }
    Ответ написан
    1 комментарий