Задать вопрос
  • Как конвертировать java в exe?

    virtual_universe
    @virtual_universe
    Питонист:)
    Знаете... java был создан что-бы один файл работал везде.. Это уже анти-джавизм какой-то.
    Ответ написан
    Комментировать
  • Написать компилятор на C# или C++ или Python?

    @denismaster
    Видел парня на хабре. В 11 лет не каждый может такого достичь, как он, но все же.

    Итак, вы хотите написать компилятор. Это не так сложно, как кажется(иначе не было бы такого количества языков).
    1. Понадобится выучить, что такое грамматики, формальные и регулярные языки, контекстно-свободные грамматики и так далее. Необходимо достаточно глубоко понимать, что это и для чего. Также нужны знания структур данных, ассемблера, паттернов проектирования.
    2. Для опыта необходимо посмотреть грамматики современных языков, благо, они есть в свободном доступе. Пример раз, пример 2
    3. На основе полученных знаний, а также опыта изучения грамматик существующих языков необходимо написать свою грамматику
    4. К этому моменту вы сильно подрастете, если не физически, то скиллом уж точно, поэтому заведите себе хобби или девушку, чтобы отвлекаться от этой дребедени, иначе сойдете с ума.
    5. На основе данной грамматики пишется на любом известном вам языке лексер и парсер, которые переводят эту грамматику в набор токенов(задача лексера), а парсер эти токены в Абстрактное Синтаксическое Дерево (Abstract Syntax Tree)
    6. На основе данного дерева вы можете проводить анализ кода, проверку на ошибки, оптимизации.
    7. Данное дерево мы можем трансформировать в другую форму. После чего на его основе сгенерировать код, который мы хотим получить.
    8. Крайне советую посмотреть исходники открытых компиляторов, например, Roslyn для шарпа или аналогов для других языков, чтобы посмотреть, как оно вообще работает.


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

    И да, придется оооочень много читать, а также хороший английский, на русском намного меньше литературы по данной специфике.
    Ответ написан
    6 комментариев
  • Синтаксический анализатор if-else конструкции на основе контекстно свободной грамматики в БНФ?

    @so-olitary
    1) Да, ты правильно построил БНФ - там нет ничего сверхъестественного.
    Только вот это Expression := Expression;, в общем говоря, всё-таки неверно, т.к. нельзя присвоить: a + b = 5.
    И на мой вкус:
    Expression := Expression | ID=Expression
    Block := Expression; | Expression; Block
    ArrayExpression := { Block }
    BoolExp, как и в С, можно отдельно не выделять, 0 - false, !0 - true


    2) Можно использовать готовый синтаксический анализатор, который разбивает на токены сам по сгенерированным тобой правилам (yacc, bison), можно писать вручную.
    3) Как вручную:

    Я писал в своё время интерпретатор языка программирования.
    БНФ - есть алгоритм - собственно как ты будешь парсить файл. Можешь смотреть на свою структуру, она описывает всевозможные варианты того, что ты можешь увидеть в файле с программой. Читаешь по файлу и проверяешь, что ты оказался прав.

    Сначала регулярными выражениями выдели "токены", что у тебя есть "слово языка":
    1. (\d)+ - Integer
    2. \w (\w | \d )* - identificator
    3. + | - | * | / | % | := | < | > | <= | >= | != | == | ( | )  | ... - arithmetic sign
    4. ; | [ | ] | { | } | ... - separators


    Приступай к разбору:
    Введи понятие функционального оператора, а также понятие ID, которое включает в себя имя переменной или обращание к массиву, как единый "токен" с числовым значением (или Expression) внутри [...].
    Рассматривай файл, как подряд идущие инструкции языка.
    Сначала ты должен понять в какой из них ты находишься - это (1) объявление переменной, (2) арифметическое выражение, (3) условный оператор. Как это понять? Просто читай подряд по словам. например:
    1. если это if - то за ним
    (а) идёт ( Expression ) - это какое-то арифметическое выражение:
    Первое, что с ним нужно делать - это избавиться от скобок и пересобрать в последовательность операций для выполнения, имея в виду приоритеты операций. Проще всего это сделать переведя в польскую аннотацию, делается это при помощи стека - можешь в википедии посмотреть алгоритм. Смысл: (a + b) * c + d = +*+abcd.

    Хотя тебе не надо выполнять программу, я всё-таки рекомендую переводить в польскую нотацию - так ты сможешь проверить корректность арифм.выражения и понять, где оно завершилось.
    Либо можно придумать какие-то правила чтобы это понять, непример: не может быть 2 знака подряд (кроме унарного оператора), ... но так ИМХО сложнее.

    (b) затем за ним идёт Expression | ArrayExpressions, их тоже парсишь.
    (в) может быть Else или следующая инструкция
    И так далее.
    Ответ написан
    1 комментарий
  • А можно ли использовать язык BrainFuck на ЕГЭ?

    dmlogv
    @dmlogv
    Универсальный человек
    Вот он, лучший язык для ЕГЭ, — Petooh
    Ответ написан
    Комментировать
  • А можно ли использовать язык BrainFuck на ЕГЭ?

    Anonym
    @Anonym
    Программирую немного )
    Один знакомый написал вступительный в вуз на php и ждал 3 часа, когда приедет преподаватель, который знает php.
    Ответ написан
    1 комментарий
  • Можно ли использовать пиратские VST для музыки в играх?

    «Авторское право» ... «Можно ли использовать пиратские ... ?» — нет, нельзя.

    Всё прочее — вопрос совести и юриспруденции. С помощью Content-id некоторые сэмплы узнать можно, некоторые нет. Должны ли вы доказывать легальность используемого софта и сэмплов — указывается (или забывается) в контракте с заказчиком музыки, как и то, какие риски и объём ответственности вы принимаете на себя.

    Очистка от копирайта / проверка прав использованной музыки, графики и пр. — головная боль выпускающих игру на рынок.

    Disclaimer. Этот ответ не основан на реальном опыте и является лишь моей интерпретацией здравого смысла.
    Ответ написан
    2 комментария
  • Как программист может быть полезен на войне?

    3d6
    @3d6
    Что все о беспилотниках забыли? Сейчас они в зародышевом состоянии — но это быстро меняется. Очевидно что когда получится создать ИИ такого уровня, который сможет взять под управление железяку за 10 килобаксов, и использовать ее с эффективностью в 0.1 от солдата-человека, это коренным образом изменит принцип ведения военных действий.
    Ответ написан
    Комментировать
  • Как программист может быть полезен на войне?

    @Kiborg777
    Программист, DevOps
    Израильская система «железный купол» (уничтожает в полете ракеты малой дальности) создана программистами. Система во-первых эффективно защищает гражданское население, во-вторых развязала руки израильской армии в борьбе с палестинскими террористами — если раньше ликвидация очередного пахана могла привести к ракетным обстрелам населенных пунктов с потенциальными жертвами, то теперь практически все палестинские ракеты, летящие на населенные пункты сбиваются в воздухе. Разработчики системы получили специальную премию от правительства Израиля на прошлой неделе.
    Ответ написан
    Комментировать
  • Как программист может быть полезен на войне?

    sl_bug
    @sl_bug
    1. Взлом копьютерных систем противника.
    2. Построение непредсказуемого (но все же к заданной цели) полета ракеты (чтобы сложно было сбить).
    3. Взлом шифров противника.
    4. Разрботка шифров.
    и т.д.
    Ответ написан
    1 комментарий
  • Почему не работает простенькая игра на питоне?

    @twistfire92
    Python backend developer
    в конце пропишите
    if __name__=='__main__':
        game()

    или просто
    game()
    вы же только объявили функцию, но не вызвали ее

    В сообщение при победе значения не вставятся. Это не f-строка. Перед кавычками f поставьте
    Ответ написан
    Комментировать
  • Как изменить центр у префаба?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Нужно подвинуть внутренние объекты, чтобы они были по центру.
    Ответ написан
    1 комментарий
  • Как скачать видео с YouTube?

    @rPman
    почему youtube замаскирован звездочками? это стало ругательством?

    по теме, лучший способ не бороться с мельницами (гугл периодически меняет структуру страницы и устаревший код быстро становится нерабочим) - использовать проект youtube-dl (питон), вызывая его утилиту как внешнюю

    точно знаю были врапперы для c# (гугл выдает старый код, может заработает) если надо именно библиотеку
    Ответ написан
    Комментировать
  • Есть ли смысл в написании игр на чистом OpenGL в целях обучения?

    afiskon
    @afiskon
    Конечно же стоит.
    Ответ написан
    Комментировать
  • Есть ли смысл в написании игр на чистом OpenGL в целях обучения?

    MikhailD
    @MikhailD
    Developer
    Я когда-то тоже начинал изучение разработки игр с низкого уровня, OpenGL, DirectX. Потом, конечно, писал свой мега-движок )) В итоге моя текущая деятельность никак не связана с разработкой игр, поэтому не скажу что полученные знания были мега-полезны, но мне это было интересно, поэтому не жалею о потраченном времени.
    Писать коммерческий продукт на чистом OpenGL, в ряд ли имеет смысл, как и написание своего движка. Если только узкоспециализированного, под конкретную небольшую задачу. Поэтому если хочется получить результат как можно скорее - берите готовый инструмент, выбор, кстати, сейчас большой. Если все же интересно узнать как оно там внутри работает, то можно смело разбираться с OpenGL
    Ответ написан
    Комментировать
  • Есть ли смысл в написании игр на чистом OpenGL в целях обучения?

    Zerstoren
    @Zerstoren
    В целях обучения, любые велосипеды хороши.
    Чтоб лучше понимать что делают библиотеки, нужно знать low-level. Если вы знаете как это делается на низком уровне, то прочитать исходники либы будет не проблема, а значит понять, где что можно выиграть как скорости так и на качестве.

    Как минимум это вам точно не навредит.
    Ответ написан
    Комментировать
  • Какой движок используется в игре HAY DAY и CLASH OF CLANS?

    @YoungSkipper
    Что касается CLASH OF CLANS.

    Никаком. Своя разработка, в основном С++ плюс платформозависимый код на ObjectC++ и т.п.
    Вот тут например больше деталей - www.pocketgamer.biz/feature/45814/chart-rush-makin...
    Ответ написан
    Комментировать
  • Почему скорость разных языков разная?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Допустим нам нужно сложить два числа - 2 и 3

    На ассемблере:
    Кладем 2 в регистр ax, 3 - в регистр bx, выполняем команду сложения регистров - в результате у нас в ax ответ.
    Грубо говоря - у нас выполнились всего 3 команды на уровне процессора.

    На С:
    Сохранили значения регистров, сделали инициализации, выполнили 3 предыдущих команды сложения - восстановили значения регистров. Потратили уже как минимум на несколько команд больше на регистры/инициализацию.

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

    @dponyatov
    Для написания интерпретатора очень важно понять самый главный принцип: интерпретация структур данных

    Программа представляется в виде структуры данных, чаще всего это дерево (или граф) объектов, в каждом узле находится объект, представляющий различные элементы языка: константа, функция, цикл и т.п.
    Каждый элемент обязательно должен иметь возможность содержать в себе
    (а) элементы адресуемые по имени (ассоцифтивный массив) и
    (б) вложенные элементы причем в контролируемом порядке (массив или список).
    Интерпретатор бегает по дереву/графу программы, и выполняет действия через вызовы методом объектов.
    Например у class Operator -> Plus задается метод add() { return nest[0].add( nest[1] }
    nest это список вложенных элементов (операнды)

    Некоторые объекты умеют создавать новые исполняемые структуры данных в памяти интерпретатора, реализация и хранение переменных делается через атрибуты любого объекта (ассойиативный массив), например объект global хранит в своих атрибутах глобальные переменные.

    кое-что есть здесь в глубокой преальфе (интерпретатор на питоне) https://github.com/ponyatov/hico/releases/latest
    Ответ написан
    Комментировать
  • Factorio - игра с настоящим 2D?

    Графика в полном 2д. Поезда в том числе, они рендерят спрайты на каждые n градусов поворота.
    Про пайплайн создания графики они писали тут: https://www.factorio.com/blog/post/fff-146
    Кстати, почитайте другие посты их блога, там очень много технической информации о внутренностях игры.
    Ответ написан
    1 комментарий
  • Как научиться рисовать пиксель арт??

    lxsmkv
    @lxsmkv
    Test automation engineer
    Ну начните с таблички с текстом например, а потом украшайте и украшайте - так сцены и делают. Вы наверняка видели сцены в пиксель-арт, они создаются впихиванием еще одной штуки рядом с другой. Никакого изначального замысла картины там нет.

    И вот еще дам вам ссылку на серию статей, которые мне в свое время очень пришлись по вкусу своей обстоятельностью:
    https://habr.com/post/247333/
    Ответ написан
    Комментировать