Задать вопрос
Ответы пользователя по тегу Трансляторы
  • Какие есть книги/руководства по разработке "простого языка программирования" для новичка?

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    Руководитель дипломной работы предложил разработать "простой язык программирования для целей обучения". Я поняла его так - многие учебные задачи с использованием современных языков теряют смысл. (перевернуть массив? для этого есть готовая функция. написать сортировку - тоже есть. а если задача на динамических списках - студент сложит их в массив и радуется) только вручную проверять, правильно ли написал. А хорошо если есть язык в котором опцией выключаются массивы например или циклы. И конечно минимум готовых функций.


    А кто мешает написать свою структуру данных, и методы для работы с ней, и не "отключать массивы", а просто не пользоваться ими?

    Писать свой язык проблематично с начальными знаниями, потому что нужно хотя бы знать как примитивы работают.
    Опять же какой язык - компилируемый или интерпретируемый? Написать свой компилятор непростая задача, как минимум нужно разобраться с архитектурой ОС, разобрать форматы исполняемых файлов, это куча дополнительной работы.

    Я бы на твоем месте уточнил бы детали у препода, на каком уровне требуется это сделать.
    Ответ написан
    2 комментария
  • Как работают интерпретаторы компилирующего типа?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    в java вообще не запускается интерпретатор команд высокого уровня.
    Сперва при помощи компилятора javac вы компилируете текст (file.java) в байт-код (file.class), и объединяет все байт-коды в исполняемый файл (file.jar), а потом уже джава рантайм (виртуальная машина) выполняет пакет с байт-кодом (файл.jar)
    Ответ написан
  • Как первоначально компилировали сами компиляторы написанные на яву?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Так дочитайте историю создания языка С, об этом полно вполне интересных статей, в том числе и на русском.

    Сперва были только инструкции, которые вводили напрямую, потом через перфокарты/перфоленты, затем написали уже язык ассемблер, затем написали язык b, на котором написали C, затем уже на C перекомпилировали С и так далее.
    Ответ написан
    Комментировать
  • Какова зависимость качества и производительности кода Си в зависимости от используемого стандарта при компиляции?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Ни то ни другое особо не зависит

    Качество кода зависит от исходников, а не от компилятора, а стандарт больше о том, что можно использовать в исходниках.

    Но косвенно конечно более новый стандарт означает что компилятор более новой версии, следовательно в нем просто может быть больше улучшений и оптимизаций под более новые процессоры.
    Ответ написан
    2 комментария
  • Как работает интерпретация в Java JVM?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Ibragim123987, Пример вашего алгоритма вообще некорректный.
    Никакой язык программирования не оперирует кипячением или чайниками.
    Все языки программирования оперируют данными (переменные, ячейки памяти).
    Циклы и условия также оперируют исключительно именно этими данными - числа, строки(которые внутри тоже числа).
    Поэтому на базе вашего алгоритма вообще никак
    Ответ написан
    Комментировать
  • Возможно ли создание языка, который бы пришёл на замену С по производительности?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Всем привет!

    Правильно ли я считаю, что С-программы работают быстрее программ на других языках после Ассемблера?

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

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

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

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

    Опять же. "быстрые программы" это что?
    Где-то быстрее Go, где-то С++, где-то чистый асм, где-то даже питон.
    Скорость программ обычно не так критична. А конкретный алгоритм можно вылизать почти на всем.
    Ответ написан
    Комментировать
  • Как сделать трансляцию кода в exe файл для языковой ВМ?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    exe это контейнер для операционной системы.
    Непонятно что у вас за ВМ - каждая операционная система должна подерживать какой-то формат для исполняемых файлов и запустить его, то есть
    1. создать новый процесс
    2. Загрузить в память исполняемый код из файла, возможно часть кода, возможно код и какие-то данные
    3. Передать управление на точку входа

    Как и что грузить - указано в исполняемом файле (exe, elf), либо файлы делаются шаблонными (.com).

    Вы сейчас путаете функциональность компилятора, и линкера.
    Ответ написан
    Комментировать
  • Правильно ли я понимаю отличие компиляции от интерпретации?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Компилятор берет текст исходного кода программы и переводит его в исполняемый код. Часто это машинный код.
    При этом компилятор код программы не выполняет. Но результат может быть готовый исполняемый файл, или библиотека, которую уже можно выполнять или пользоваться без компилятора.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    Если копать слишком глубоко, то идеального совпадения не будет.

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

    Другими словами, не копайте слишком далеко - формальный язык в ИТ сфере, все-таки ближе к физике, а не к математике.

    Например - не путайте машинный язык и ассемблер - при вопросе компиляции и интерпретации это разные вещи.

    Можно перейти к простому определению - интерпретатор выполняет команды программы.

    Следовательно интерпретация - это когда ваш текст программы выполняется непосредственно интерпретатором.

    Компиляция - когда ваш текст программы преобразуется в нечто другое, и при выполнении используется уже результат компиляции, а не ваш текст программы.

    Трансляция - неоднозначная вещь, перевести код из одного языка в другой не всегда возможно, но при компиляции, трансляция используется для первичной подготовки исходного текста к компиляции. Чистая трансляция - вещь специфическая.
    Ответ написан
    Комментировать
  • В чём разница между транслятором и транспилятором?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    transpiler следует не переводить, а принимать как устоявшийся термин для трансляции кода между двумя языками, у которых примерно одинаковый уровень абстракции или другие зависимости.

    Грубо говоря, каждый транспилер - транслятор, но не каждый транслятор - транспилер.
    Ответ написан
    Комментировать
  • Написать компилятор на C# или C++ или Python?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Какая разница на чем писать? Пишите на том, что знаете.
    Компилятор он просто парсер исходного кода в исполняемый код, от него не особо что-либо зависит.

    Как вам пишут выше, этот вопрос показывает, что вам рано писать компилятор. Напишите лучше несколько прикладных программ, можно даже банальных парсеров.
    Ответ написан
    Комментировать
  • Можно ли написать компилятор в машиный код на языке очень высокого уровня?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Конечно можно. Собственно так и делают.
    Чаще всего используют С/С++ как язык, широко использующийся в системном программировании, но на ЛЮБОМ языке, даже на скриптовом, можно написать компилятор.
    Ответ написан
    Комментировать