• Как по содержимому файла (без расширения) определить, что это за ЯП?

    @alexanius
    Можете посмотреть на команду file, она даст неплохое первое приближение.
    Ответ написан
  • Как дать понять пользователю, что функция выделила память (С++)?

    @alexanius
    Избегайте таких ситуаций. В C++ множество усилий было направлено на то чтобы избавиться от гуляющих указателей. Используйте контейнеры (vector, list) или умные указатели (std::shared_ptr).
    Ответ написан
    2 комментария
  • Почему не работает распараллеливание потоков в gcc?

    @alexanius
    К сожалению, у меня сейчас gcc собран без поддержки распараллеливания, поэтому включаю телепатию.

    В-первых прочитайте как работает автораспараллеливание. Например здесь.

    Во-вторых есть подозрение, что без ключа -O3 данные флаги смысла не имеют.

    В-третьих посмотрите дампы. Например по ключу -fdump-tree-parloops в данном случае. И вообще посмотрите в man'е gcc какие можно сбрасывать дампы. Они имеют префикс -fdump.

    Если ни с -O3 не заработает, ни в дампах ничего полезного не найдёте, то спросите в рассылке gcc-help, там объяснят.
    Ответ написан
    1 комментарий
  • Что такое парадигмы программирования?

    @alexanius
    В двух словах это набор базовых принципов (мат. модели, например), на которой работает язык программирования. Сейчас наиболее широко используются три парадигмы: императивная, функциональная и логическая.

    Императивная основана на мат. модели машин Тьюринга. Особенность данной парадигмы в том, что программист чётко, шаг за шагом описывает изменения состояния программы (алгоритм), который компьютер в точности выполняет. Внутри данной парадигмы широко используются процедурный стиль (язык C) и объектно-ориентированный стиль (язык Smalltalk как яркий представитель).

    Функциональная парадигма основана на мат. модели лямбда-исчисления Чёртча. В ней программы представляют из себя вычисление функций именно в их математическом понятии. Здесь (в идеале) нет глобального состояния программы и от него ничего не должно зависеть. Функции не должны иметь побочных эффектов (pure), а данные стараются делать неизменяемыми (immutable). Наиболее яркий представитель - Haskell.

    Логическое программирование основано на мат. модели логики предикатов первого порядка. В рамках этой парадигмы вы не описываете компьютеру алгоритм решения задачи, а задаёте набор фактов, описываете правила вывода, и входные данные, после чего на основе этой информации компьютер выдаёт ответ. Алгоритм решения... нафиг не нужен. Шутка. Как вариант строится дерево решений, в котором ищется ответ подходящий под набор фактов и заданные условия. Яркий представитель - язык Prolog.

    А вообще по теме парадигм есть неплохая глава в книге Сошникова Д.В. "Парадигма логического программирования"
    Ответ написан
    Комментировать
  • Программы для анализа безопасности?

    @alexanius
    Не очень понял в чём фишка диплома (вроде и так понятно, что по бинарнику можно найти константу и поменять её. Тут даже исходник не нужен), но не суть.

    Вообще это как-то отдалённо напоминает системы сертификации ПО (а Вы случаем не в этой сфере работаете?). Соответственно можете поискать литературу про гибридные анализы ПО (статический+динамический). Из известных мне система есть АК-ВС. Можете просто поискать сканеры уязвимостей - их очень много. Соответствено, по данной теме уже можно и литературу искать. Из литературы у этого товарища есть книга "Программная инженерия. Обеспечение качества программных средств методами статического анализа", может там чего найдёте.
    Ответ написан
    Комментировать
  • Как осуществить заполнение длинного массива переменными в СИ?

    @alexanius
    Если нет функции, по которой заполняются значения, то можно делать что-нибудь в таком роде:

    int a = 1, b = 2, c = 3;
    int x[3] = {a, b, c};


    И да, в тэгах поставьте, пожалуйста "C"
    Ответ написан
    Комментировать
  • Какой выбрать парсер c/c++ кода, на c/c++?

    @alexanius
    Если нужно только выделить все числа, то используйте регулярные выражения. Они подойдут и для более сложных задач (например найти присваивания). Я обычно пользуюсь qt'шными regexp'ами, но если проект привязан к mfc, то посмотрите в стандартные. Для целых чисел самый простой паттерн будет таким: [0-9]+. Разумется, в реальной задаче им всё не ограничится.

    Если стоит задача всё же на разбор кода, то тут всё усложняется. Можно писать свой велосипед на flex+bison. В случае с C/C++ Вам гарантировано незабываемое удовольствие .

    Если нужен точный анализ программы, посмотрите в сторону clang.
    Ответ написан
    Комментировать
  • Существует ли пример программы на С++ с полным набором особенностей этого языка?

    @alexanius
    Я не уверен, что именно Вам нужно, но посмотрите эммм.... ну, например Qt. Вроде более или менее всё там есть.

    Только может Вы поясните зачем Вам это нужно и найдётся решение получше?
    Ответ написан
  • Реально ли найти работу, связанную с разработкой компиляторов?

    @alexanius
    Да, вполне реально. Как тут уже заметили во-первых это МЦСТ. Во-вторых можете поискать вакансии в Intel. В России Intel занимаются разработкой компилятора для Itanium (насчёт x86 не знаю). И МЦСТ и Intel разрабатывают собственные, закрытые компиляторы.

    В Samsung (по ситуации ~год назад) был набор для разработки llvm. Ещё разработкой компилятора (gcc, llvm) занимаются в Google. Не знаю отдельный это отдел или просто побочный вид деятельности, но задания там будут крайне интересные.
    Ответ написан
    Комментировать
  • Что нужно для создания нового языка программирования, какие средства и какие языки программирование нужны будут участвовать при создания нового языка?

    @alexanius
    Зависит от того, какой части Вы хотите уделить особое внимание. Если просто создать свой язык с необычным синтаксисом, то напишите фронтэнд к llvm (или gcc, или jvm, или parrot, или что Вам больше нравится). Если хотите потренировать кодогенерацию - соответственно бекенд к llvm или что Вы там выбрали. Если хотите полностью свой коиплятор - придётся ещё и свой оптимизатор и кодогенератор делать. Но если Вам это для обучения, то попробуйте просто поучаствовать в разработке llvm/gcc. Если совсем делать нечего - почитайте как они работают и попробуйте сделать что-то в таком роде.
    Ответ написан
    Комментировать
  • Почитал про различные компиляторы и остановился на gcc, но не понимаю, как им пользоваться?

    @alexanius
    IDE лучше пока не использовать. Если у Вас Windows, то возьмите Nodepad++, если linux, то любой редактор (kate, gedit, vim, emacs, тысячи их). Почитайте статьи о том что такое компиляция вообще и как компилируют программы на Си.

    Теперь, если под Вы под linux (а лучше быть именно под ним), то просто вводите gcc test.c и получаете исполняемый файл.

    Если под Windows - тут несколько сложнее. Скорей всего у Вас установлен mingw, Тогда следует прописать путь к компилятору в переменной PATH, после этого можно также воспользоваться командой gcc test.c (не помню точно - у них вроде бинарь как-то по-другому зовётся).

    В общем, читайте документацию и просто статьи, информации об этом полно.
    Ответ написан
    Комментировать
  • Почему реализовать C настолько сложно?

    @alexanius
    Язык Си очень сложный и написать его нормальную реализацию - весьма нетривиальная задача.

    При написании фронтенда встаёт задача во-первых правильно его распарсить. А с точки зрения построения парсера, Си далеко не самый простой язык. Готовой BNF грамматики для него Вы не найдёте. Плюс необходимо поддерживать пол десятка разных стандартов.

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

    Нужно сделать обработку и вывод ошибок. Например в edg (промышленный фронтенд) разных сообщений об ошибках 2500.
    Ответ написан
    5 комментариев
  • Ubuntu 12.04. Учусь программированию. На чем писать программы в этой системе?

    @alexanius
    Какой встроенный компилятор в какой терминал? Компилятор - отдельная программа, которая никуда не встраивается. От терминала она никак не зависит.

    Для новичка лучше использовать текстовый редактор. Тем более что текстовый редактор без возможностей IDE ещё поискать надо. Используйте vim. Будет непривычно, но потом без него жить не сможете. Лично я использую QtCreator.

    Про компилятор. Есть основной компилятор - gcc. Не знаю установлен ли он там по умолчанию, но можете использовать его. Можете также поставить clang - пока что это не сыграет никакой роли.
    Ответ написан
    4 комментария
  • Как правильно использовать исключения?

    @alexanius
    Эту конструкцию не следует пихать везде где попало. Во-первых срабатывание исключения - очень дорогая штука. Во-вторых этого не следует, например, делать в деструкторах. Это первое что в голову приходит. Может есть ещё какие-то случаи. Советую почитать что на эту тему пишет Мейрес. Вообще советую его почитать. Моё мнение - исключение должно кидаться если программа рушится и нужно полное обрушение как-то проконтролировать.
    Ответ написан
    Комментировать
  • Где найти книгу Стивена Мучника "Углубленный курс проектирования и реализации компиляторов"?

    @alexanius
    Где Вы вообще нашли её на русском? Ни разу не встречал официального перевода. Я бы предложил Вам купить её на амазоне, но она довольно дорогая. Может Ваша организация согласится на неё потратиться. Если хорошо погуглить, то можно найти электронный вариант (я где-то находил).
    Ответ написан
  • В нашей стране проводят научные исследования в IT? И возможно ли туда попасть?

    @alexanius
    Т.к. несколько лет назад у меня была аналогичная проблема - поделюсь опытом.

    Я не уверен, что у нас кто-то занимается чисто академической деятельностью в IT. В своё время я рассматривал вариант пойти в ИСП РАН (Институт Системного Программирования), из непродолжительного общения с ними сделал вывод, что они тоже занимаются вполне себе коммерческими (пусть и opensource) проектами, по которым делают публикации. Думаю это везде так. Пытаться делать чисто академическую карьеру в IT в текущих реалиях на мой взгляд идея сомнительная, т.к. денег вы за это иметь не будете, а кушать хочется всегда. Придётся иметь основную работу, а в свободное время заниматься исследованиями. Качество и того и другого может пострадать.
    Но посмотреть чем занимается ИСП (или другие РАНовские институты) я бы Вам посоветовал. Вполне возможно, что там для Вас будет что-то интересное. Хотя в свете последних реформ могут быть проблемы с аспирантурой.

    Есть вариант устроиться в коммерческую фирму, занимающуюся соответствующей тематикой. Тут всё зависит непосредственно от отношения руководства к научной деятельности. Не знаю, могут ли Вам запретить заниматься наукой из-за, скажем, закрытости разработок (в этом случае руководство скорей всего неадекватно), но могут сказать, что-то вроде "мы не против, но особо помочь не сможем". Этот вариант в целом аналогичен варианту с двумя работами, т.к. придётся самому искать научника и не факт, что его направление исследования и то чем Вы занимаетесь на практике будет совпадать. Есть совсем идеальный вариант - когда фирма поощряет исследования. Это большая редкость, для этого фирма должна заниматься разработкой чего-то фундаментального. Как, например, сказали выше Intel, можете посмотреть как дела обстоят у них.

    В плане сетей или анализа данных можете поинтересоваться как дела обстоят у поисковиков - Mail, Yandex. Как минимум у них стоят интересные задачи в этом плане.

    Также рекомендую посмотреть чем занимаются в МЦСТ (производитель процессоров Эльбрус, а также компилятора, операционки и софта к нему). Лучше смотрите не на сайте - там написано далеко не всё, а сразу пишите куда-нибудь в отдел кадров или секретариат - там Вас перенаправят к представителям соответствующего отдела. Здесь научная работа поощряется, но всё равно в первую очередь придётся заниматься рутинными делами, а уже на её основе делать публикации. Большой минус - это две параллельные линии деятельности. Большой плюс - публикации основаны на вполне реальных рабочих результатах.
    Ответ написан
    Комментировать
  • Что сейчас важнее в языках программирования, скорость работы или удобство использования?

    @alexanius
    Я несколько раз перечитал вопрос, но так и не понял его. Скорость работы чего именно Вас интересует? Железки? Кода? Программиста? Удобство языка - тоже понятие очень субъективное.

    В общем случае ответ простой: как и везде - зависит от конкретной задачи.
    Ответ написан
    Комментировать