программа переводящая языки программирования в машинные коды
Трансляторы. Для перевода программы с языка программирования в машинные коды, понятные компьютеру, существуют специальные программы – трансляторы
Для перевода программы с языка программирования в машинные коды, понятные компьютеру, существуют специальные программы – трансляторы. Трансляторы бывают двух видов: интерпретаторы и компиляторы.
Интерпретаторыпереводят в машинный код (или некое промежуточное представление) и сразу выполняют каждый оператор программы. Причем только после того, как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. При этом если один и тот же оператор должен выполняться в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встретил впервые. Поэтому недостатком интерпретатора является то, что программы, в которых требуется осуществить большой объем повторяющихся вычислений, могут работать медленно. Можно сказать, что интерпретатор моделирует некую виртуальную вычислительную машину, для которой базовыми инструкциями служат не элементарные команды процессора, а операторы языка программирования. Для выполнения этой же программы на другом компьютере, там также должен быть установлен интерпретатор.
С помощью интерпретатора допустимо в любой момент остановить работу программы, исследовать содержимое памяти, организовать диалог с пользователем, выполнить сколь угодно сложные преобразования данных и при этом постоянно контролировать состояние окружающей программно-аппаратной среды, благодаря чему достигается высокая надежность работы. Интерпретатор при выполнении каждого оператора проверяет множество характеристик операционной системы и при необходимости максимально подробно информирует разработчика о возникающих проблемах. Кроме того, интерпретатор очень удобен для использования в качестве инструмента изучения программирования, так как позволяет понять принципы работы любого отдельного оператора языка.
Компиляторы переводят весь текст программы в машинный код, затем его можно использовать отдельно от исходного текста. Компиляторы полностью просматривают весь текст программы (исходный код) в поисках синтаксических ошибок, выполняют определенный смысловой анализ и затем автоматически переводятна машинный язык — генерируют машинный код. Нередко при этом выполняется оптимизацияс помощью набора методов, позволяющих повысить быстродействие программы (например, с помощью инструкций, ориентированных на конкретный процессор, путем исключения ненужных команд, промежуточных вычислений и т. д.). В результате законченная программа получается компактной и эффективной, работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора, и может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
Основной недостаток компиляторов — трудоемкость трансляции языков программирования, ориентированных на обработку данных сложной структуры, часто заранее неизвестной или динамически меняющейся во время работы программы. Тогда в машинный код приходится вставлять множество дополнительных проверок, анализировать наличие ресурсов операционной системы, динамически их захватывать и освобождать, формировать и обрабатывать в памяти компьютера сложные объекты, что на уровне жестко заданных машинных инструкций осуществить довольно трудно, а для ряда задач практически невозможно.
В реальных системах программирования перемешаны технологии и компиляции и интерпретации. В процессе отладки программа может выполняться по шагам, а затем компилироваться в машинный код.
Трансляторы и их виды
Поскольку текст, записанный на языке программирования, непонятен компьютеру, то требуется перевести его на машинный код. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется она специальными программами – трансляторами.
В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы.
Вместе с тем, язык ассемблера, кроме аналогов машинных команд, содержит множество дополнительных директив, облегчающих, в частности, управление ресурсами компьютера, написание повторяющихся фрагментов, построение многомодульных программ. Поэтому выразительность языка намного богаче, чем просто языка символического кодирования, что значительно повышает эффективность программирования.
Эмуляторы используются достаточно часто в самых различных целях. Например, при разработке новых вычислительных систем, сначала создается эмулятор, выполняющий программы, разрабатываемые для еще несуществующих компьютеров. Это позволяет оценить систему команд и наработать базовое программное обеспечение еще до того, как будет создано соответствующее оборудование.
Очень часто эмулятор используется для выполнения старых программ на новых вычислительных машинах. Обычно новые компьютеры обладают более высоким быстродействием и имеют более качественное периферийное оборудование. Это позволяет эмулировать старые программы более эффективно по сравнению с их выполнением на старых компьютерах.
Макропроцессоры используются и с языками высокого уровня. Они увеличивают функциональные возможности таких языков как PL/1, C, C++. Особенно широко макропроцессоры применяются в C и C++, позволяя упростить написание программ. Макропроцессоры повышают эффективность программирования без изменения синтаксиса и семантики языка.
Любой транслятор выполняет следующие основные задачи:
- анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;
— генерирует выходную программу (ее часто называют объектной) на языке машинных команд;
— распределяет память для объектной программы.
Транслятор – это программа, которая переводит в машинные коды текст программ, написанных на языке высокого уровня.
1.Интерпретатор: анализирует текст программы по частям, сразу выполняет обработанную команду.
Компилятор: переводит всю программу в машинный код, строит исполняемый файл.
14) Алгоритм, его свойства и способы записи.
1. Алгоритм – это однозначное, точное и полное описание последовательности элементарных действий для решения данной задачи.
Слово алгоритм происходит от имени арабского математика Аль-Хорезми (точнее – латинизи-рованной формы его имени – Аlgorithmi), который еще в IX веке сформулировал правила выполнения четырех арифметических действий. Эти правила называли правилами Аль-Хорезми (algorithmi), а позднее просто стали называть алгоритмом.
p>3. Способы записи алгоритма
2) на алгоритмическом языке (или языке программирования: Бейсик, Паскаль и т.д.),
3) на языке блок–схем.
15) Что такое блок – схема алгоритма. Основные блоки и структуры.
1. Блок–схема алгоритма – это графический способ записи алгоритма, представляющий собой систему определенным образом связанных блоков, изображаемых в виде плоских геометрических фигур.
Элементы блок –схемы располагаются сверху вниз, линии соединения отдельных блоков показывают направление процесса обработки схемы. Каждое такое направление называют ветвью.
2. Основные блоки
3. Структурами называют ограниченный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий.
Блок–схема алгоритма – это графический способ записи алгоритма, представляющий собой систему определенным образом связанных блоков, изображаемых в виде плоских геометрических фигур.Элементы блок – схемы располагаются сверху вниз, линии соединения отдельных блоков показывают направление процесса обработки схемы. Каждое такое направление называют ветвью.
Перечислим типы блоков:
1. “Начало” и “конец” алгоритма изображаются овалом:
2. Блок “действия” изображается прямоугольником. Внутри его указываются необходимые вычисления и присваивания результата:
3. Блок “условия” изображаются ромбом. Внутри блока записываются условия выбора направления действия алгоритма:
4. Блоки “ввода” и “вывода” информации изображаются параллелограммами. С их помощью вводят исходные данные задачи, выводят результат решения:
Структурами называют ограниченный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий. Алгоритмы “собирают” из трех основных (базовых) структур:
1. Структура “ следование” состоит из двух (или более) блоков “действие”:
2.Структура “развилка” состоит из логического элемента с проверкой некоторого условия и функциональных блоков, которые в простейшем случае есть блок “действие”.
“Развилка” может быть двух видов:
а) полная условная конструкция: б) неполная условная конструкция:
3. Структура “цикл” состоит из логического элемента с проверкой условия и функционального блока, называемого телом цикла. Ясно, что тело цикла может выполняться неоднократно. Данная структура может быть двух видов:
цикл – ПОКА цикл – ДО
В случае “цикл – ПОКА” функциональный блок размещен после проверки условия, поэтому может оказаться, что тело цикла не выполниться ни разу. Однако если условие выполняется – выполняется и весь цикл. Проще говоря, “цикл – ПОКА” выполняется, пока выполняются условие.
В “цикле – ДО” функциональный блок размещен до проверки выполнения условия, так что в этом варианте тело цикла в любом случае будет выполнено, по крайней мере, один раз. Условие в данном случае является условием выхода из цикла. Проще говоря, “цикл – ДО “ выполняется до наступления выполнения условия.
16) Компьютерная сеть и типы сетей.
1. Компьютерная сеть – это группа компьютеров, соединенных линиями связи.
Компьютерные сети – «за» и «против»
u внешние устройства
Сервер –это компьютер, предоставляющий свои ресурсы в общее использование.
Клиент – это компьютер, использующий ресурсы сервера.
17) Протокол в компьютерной сети. Пакетный режим передачи и состав пакета.
1. Пакетный режим был наиболее распространен при централизованной организации решения экономических задач, когда большой удельный вес занимали задачи отчетности о производственно-хозяйственной деятельности экономических объектов разного уровня управления.
2. Протокол в компьютерной сети. Сетевым протоколом называется набор правил, позволяющий осуществлять соединение и обмен данными между двумя и более включёнными в сеть компьютерами. Фактически разные протоколы зачастую описывают лишь разные стороны одного типа связи; взятые вместе, они образуют так называемый стек протоколов. Названияитакже указывают на программное обеспечение, которым реализуется протокол.
Протокол – это набор правил и соглашений, определяющих порядок обмена данными.
Шлюз (конвертер) – устройство, которое объединяет сети с разными протоколами.
18) Топология компьютерной сети (определение и примеры)
1. Топология сети – геометрическая форма и физическое расположение компьютеров по отношению к друг другу. Топология сети позволяет сравнивать и классифицировать различные сети. Различают три основных вида топологии:
Шина – это линия связи, которую несколько устройств используют для обмена данными.
4. «Дерево» = многоуровневая звезда
19) Локальная сеть и типы локальных сетей.
1. Локальная сеть объединяет компьютеры в одном или нескольких соседних зданиях.
LAN (Локальная сеть/локальные сети) – это компьютерная сеть, которая, дает возможность нескольким подключаться к сети интернет, используя единую точку доступа.
Сетевая ОС поддерживает:
2. Типы локальных сетей:
Сети с выделенным сервером
Сервер — специальный управляющий компьютер, предназначенный для: хранения данных для всей сети; подключения периферийных устройств; централизованного управления всей сетью и определения маршрутов передачи сообщений.
20) Маска подсети. Нахождение адреса сети и номера компьютера в сети по IP адресу.
TCP (Transfer Control Protocol)– протокол управления передачей данных
IP (Internet Protocol) – межсетевой протокол
Протоколы уровня приложений
HTTP (HyperText Transfer Protocol)– передача гипертекста
FTP (File Transfer Protocol) – передача файлов
SMTP (Simple Mail Transfer Protocol) – отправка эл. почты
POP3 (Post Office Protocol Version 3) – приём эл. почты
IMAP (Internet Message Access Protocol) – приём эл. Почты
21) Доменные имена и серверы доменных имен.
Доменное имя — это уникальное сочетание символов латинского алфавита, по которому можно идентифицировать ваш сайт среди множества других. Кроме букв, в домен могут входить цифры от 1 до 9 и символы дефиса «-», но дефис не может находиться в начале и в конце домена. Длина домена может быть от 2 до 63 символов. Для того чтобы конкретному цифровому IP-адресу поставить в соответствие символьное доменное имя вашего сайта, существуют специальные DNS-серверы(программы, осуществляющая преобразование доменного имени в цифровой IP-адрес и наоборот).
Каждое доменное имя состоит из нескольких частей, разделённых точками — это домены разных уровней. Число уровней доменов, как правило, ограничивается двумя-тремя. Длинное доменное имя и большое число уровней домена неудобны для использования. Крайнее правое поле называется Доменом верхнего уровня, далее, справа налево, следуют имена доменов более низкого уровня.
O Домены верхнего уровня (доменными зонами).
Все домены верхнего уровня можно разделить на две группы:
— национальные или географические домены, они определяют принадлежность сайта к той или иной стране или географической территории.
— домены общего пользования. Они могут устанавливать принадлежность сайта к определенной категории или виду деятельности.
O Домены второго уровня
Второй и все последующие уровни домена имеют важное ограничение — они должны быть уникальны в группе своего родительского домена. Иначе говоря, в Интернет может быть только один домен второго уровня в домене верхнего уровня. Доменные имена второго уровня регистрируются у организаций-регистраторов. Право владения на домен второго уровня выдается организации или человеку только на год, на каждый следующий год заявку надо продлевать.
O Домены третьего уровня
Домены третьего уровня регистрируются у организаций, владеющих доменами второго уровня. Обладатель домена второго уровня имеет возможность создавать неограниченное количество адресов третьего и далее уровней. Обычно, услугу регистрации домена третьего уровня предоставляют провайдеры– поставщики интернет услуг.
22) Информационная безопасность и защита информации.
1. Информационная безопасность — это защищённость информации от любых действий, в результате которых владельцам или пользователям информации может быть нанесён недопустимый ущерб.
2. Защита информации — это меры, направленные на то, чтобы не потерять информацию, не допустить её искажения и неправомерного доступа к ней.
Статьи к прочтению:
Daphne Koller: Was wir vom Online-Lernen lernen
Похожие статьи:
Человеку в жизни и практической деятельности приходится решать множество различных задач. Решение каждой из них описывается своим алгоритмом, и…
Введение Интернет полностью меняет то, как мы работаем, живем, развлекаемся и учимся. Эти изменения будут происходить в уже известных нам областях…
Транскомпилируемые языки: проекты конвертации код-в-код
Источник: Ward Cunningham
Транспиляция — это конвертация кода одного языка в другой. С помощью специального транспилера (транскомпилятора) один язык программирования общего назначения можно перенести на любой другой язык программирования общего назначения.
Если необходимо переключиться на другой язык, транспилеры помогут разработчикам сохранить бóльшую часть существующего кода, не переписывая весь код вручную. Например, при преобразовании программ из Python 2 в Python 3, или при переносе софта от старого API в новый.
Термины «транспилер» и «транскомпилятор» часто взаимозаменяемы, но все же считается, что различия есть. Например, для преобразования кода C++ в C потребуется транспилер, а для конвертации Python-Ruby — транскомпилятор. Babel для JavaScript — это транспилер, а TypeScript — транскомпилирумый язык.
Иногда после конвертации транспилером для правильной работы кода требуется ручная настройка, в то время как в транскомпилируемых языках код должен работать без изменений. Сегодня поговорим о тех и о других, но главное — расскажем о популярных транс-проектах, которые разработчики могут использовать в повседневной работе.
Транспилирование во фронтенде
Конвертация — важная часть фронтенд-разработки: поскольку новые фичи в браузерах появляются медленно, были созданы языки с экспериментальными возможностями, которые транспилируются в совместимые с браузерами языки.
За буйный расцвет транс-языков для JavaScript также несут ответственность разработчики браузеров, использующие в каждом проекте свой механизм JavaScript. В результате браузеры имеют различную производительность, реализуют свой набор функций JavaScript, и к полному соответствию спецификации приближаются с разной скоростью.
Sass, Less и Stylus упрощают создание CSS-кода. Так Sass обладает гибким синтаксисом, логикой (@if, each), математикой (можно складывать числа, строки и цвета), за счет чего все богатство кода транспилируется ruby-программой в обычный CSS.
Less (Leaner Style Sheets) выглядит так же, как CSS, но имеет удобные дополнения: переменные, миксины, арифметические операции (как у Sass) и т.д.
Stylus написан на Node.js и отличается от Sass и Less более чистым синтаксисом. Но фактически эти три языка очень похожи друг на друга, поэтому не ошибетесь, если выберите любой из них.
Скажем «Hello, World!» на CoffeeScript — что может быть проще:
CoffeeScript долгое время оставался самым популярным проектом для JavaScript. Это неудивительно: совмещая доступность (документация умещается на одной странице), функциональные фичи (скобки, отступы и т.д.) и чистый, вдохновленный Ruby, синтаксис, этот язык дает разработчикам много степеней свободы и позволяет сделать JS более выразительным.
TypeScript — конкурирующий проект под JavaScript, скриптовый язык с добавлением опциональной статичной типизации. Позволяет более полно описывать свойства и методы объектов и классов, в отличие от JS, избавляя от необходимости осуществлять проверку всех аргументов, входящих в метод или функцию.
Существует мнение, что JavaScript — это язык с фундаментальными изъянами. Иначе трудно объяснить популярность транс-языков, работающих именно над исправлением его недостатков. Помимо вышеназванных проектов есть еще гибкий язык веб-программирования Dart, компилятор из JavaScript в JavaScript Closure Compiler и многие другие решения, узнать о которых вы можете на странице «Список языков, которые компилируются в JS».
Конвертируем в С
В 2006 г. появился проект Vala, состоящий из двух языков: Vala и Genie, транслирующих самый обычный код на С, который, в свою очередь, компилируется в исполняемый файл или библиотеку.
Синтаксис Vala очень похож на C#, но адаптирован для лучшей совместимости с системами GObject, в то время как Genie имеет много общего с Python. Первый язык сейчас более распространен, чем Genie, поэтому рассмотрим его подробнее.
Почему возникла необходимость в таком проекте? Многие разработчики хотели писать приложения и библиотеки для GNOME на высокоуровневых языках, но по разным причинам не могли или не хотели использовать C# или Java. Vala позволяет быстро создать сложный объектно-ориентированный код, поддерживая стандартные C API и ABI при низких требованиях к памяти.
Библиотеки C# и Java нельзя использовать так же, как нативные библиотеки GObject из C и других языков, и нельзя считать их частью платформы GNOME. Valac, транскомпилятор Vala, создает файлы C из исходных файлов Vala так, словно вы написали свою библиотеку или приложение непосредственно на C. Использование библиотеки Vala из приложения C не отличается от использования любой другой библиотеки на основе GObject.
Читаем и записываем файл на Vala:
С другими примерами кода вы можете ознакомиться на сайте.
От Flash до мультиплатформенности
Haxe создавался одновременно с Vala, но предназначен для транспилирования во Flash, JavaScript и Neko. С таким набором скиллов язык был обречен на вымирание, однако он не только выжил, но и завоевал большую популярность.
Секрет успеха заключается в мультиплатформенности. Со временем Haxe разросся до мощного набора инструментов, поддерживающих транскомпиляцию на разные языки и платформы, включая JavaScript, C++, C#, Java, JVM, Python, Lua, PHP и Flash.
Haxe — современный, высокоуровневый, строго типизированный язык программирования. В то же время он довольно простой и практичный, благодаря чему компиляцию можно приспособить к различным целевым платформам. Его синтаксис в основном соответствует стандарту ECMAScript, но при необходимости изменяется.
«Hello World» на Haxe:
В JavaScript эти строчки кода будут выглядеть следующим образом:
Бóльшая часть кода Haxe организована в классы и функции, что делает его ООП-языком, напоминающим Java, ActionScript 3 и C#. Тем не менее Haxe разрабатывался с упором на прагматичность и легкость синтаксиса.
И о транспилерах
Заключение
Существует огромное количество других языков, поэтому для своего проекта вы всегда можете подобрать самый подходящий. Но ситуации, когда необходима конвертация код-в-код — не такая уж редкость, так как транспиляции C++ в C, PHP в C++ и «что угодно в JavaScript» случаются довольно часто.
«Переводчик» с одного языка на другой — хорошая идея, но лишь до тех пор, пока результат можно четко предсказать и использовать без рисков. Так, переход с COBOL на Java давался тяжело, поскольку в Java до версии JDK 1.4 не было memory-mapped files. А упомянутые в статье C2Rust и Corrode на выходе дают не идиоматичный код, помеченный как unsafe и наполненный «сырыми» указателями.