Расширения файлов языков программирования + видео обзор

Блог Евгения Крыжановского

Я научу вас ремонтировать свой компьютер!

Расширения файлов для программных кодов: cpp — это что?

Расширения файлов языков программированияДанный обзор будет посвящен расширению и важности данного параметра для компьютерных систем. Что же особенного в расширении файла? Читатели наверняка смогут почерпнуть для себя массу полезной и интересной информации. Умение разбираться с расширениями довольно важно и может сослужить неплохую службу, о чем и будет идти речь в данном обзоре.

Какое расширение имеет C++?

C ++ это особый язык программирования. У него есть собственное обозначение файлов. Для файлов, написанных на C++ используется обозначение cpp. В данных файлах содержится не скомпилированный код. Такой код еще не готов для использования, его нужно редактировать. Внесение правок в данный код не вызовет сбоев в работе программы. При помощи данного расширения можно узнать, в каком файле содержится код, написанный на C.

Расширение файлов и важность данного объекта в процессе программирования

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

Чтобы узнать, какой интерпретатор необходимо использовать, какой машинный код применить для воспроизведения файла, и используются расширения. Машинный код дает возможность распознать тип файла. Эту информацию ему предоставляют реквизиты файла. Так, к примеру, расширение cpp, говорит о том, что документ написан на С++. Интерпретатор после распознавания расширения сможет открыть файл, чтобы пользователь смог с ним работать.

Что собой представляет расширение файла?

Поговорим о том, что собой представляет имя файла с точки зрения компьютерных наук. С назначением расширения мы уже определились: оно служит для идентификации типа и формата файла. Расширение отделяется от имени файла при помощи символа точки. В Windows 95 имелось ограничение на число символов, используемых в расширении. Их должно было быть не больше трех. В современных системах таких ограничений нет. Более того, сегодня один файл может иметь несколько типов расширений. Они будут следовать через точку. Однако к формату cpp это не относится. Мошенники часто используются данную возможность.

Вредоносные файлы довольно часто бывают замаскированы под другие программы, скрывая основной тип расширения файлов. Возможна даже такая ситуация, когда настоящие файлы удаляются или прячутся, а вместо низ появляются совершенно другие. В результате оказывается, что файл с расширением сpp вовсе таковым не является. Чтобы защититься от подобной проблемы, можно использовать программу для показа расширений всех типов. Чтобы включить данную функцию, необходимо использовать «Панель управления». Нужно только найти свойства файлов и выбрать необходимый пункт. Это гарантирует, что ваши файлы не станут лазейкой для проникновения вируса. Необходимо всегда обращать внимание на расширение исполняемых файлов.

Точность информации

В некоторых случаях в расширении бывает не точно указан тип файла. Это приводит к возникновению различных проблем при использовании программ. Так, например, знакомое многим пользователям расширение txt не предоставляет пользователю информацию о том, в какой кодировке написан файл. По этой причине при открытии текстовых документов перед пользователем иногда появляется целый массив непонятных символов. Печально видеть документ в таком состоянии, особенно если он использовался для создания программного кода. В этом случае нужно поменять кодировку файла. Для текстовых документов Word используется одно расширение, которое дает понять, работал пользователь с обычным файлом или отформатированным. Расширение не указывает, какая версия программы была использована. Данный недостаток проявляется только при попытке открыть документы, созданные в более ранних версиях программы в последних версиях.

Другие способы указания формата файла

Существуют и другие возможности указать формат файла. Однако они являются не распространенными. Вряд ли вы о них когда-либо слышали. Сохранять информацию о формате файла можно непосредственно в самой операционной системе. При попытке перейти на другой компьютер, чтобы поработать с данным файлом, могут возникнуть неудобства. Также к подобным способам можно отнести использование метода «магических чисел». При использовании данного метода в файле зашифровывается определенная последовательность байтов, указывающая всю необходимую информацию.

Запись опубликована 09.10.2015 автором katrinas11 в рубрике Программы. Отблагодари меня, поделись ссылкой с друзьями в социальных сетях:

Источник

Компьютерное программирование — Файловый ввод / вывод

Компьютерный файл используется для хранения данных в цифровом формате, таких как обычный текст, данные изображений или любой другой контент. Компьютерные файлы могут быть организованы в разных каталогах. Файлы используются для хранения цифровых данных, а каталоги — для хранения файлов.

Ввод / вывод файла

Обычно вы создаете файлы с помощью текстовых редакторов, таких как блокнот, MS Word, MS Excel или MS Powerpoint и т. Д. Однако, часто нам также нужно создавать файлы с помощью компьютерных программ. Мы можем изменить существующий файл с помощью компьютерной программы.

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

Пока достаточно вспомнить, что запись в файл — это ввод файла, а чтение чего-либо из файла — вывод файла.

Режимы работы с файлами

Прежде чем мы начнем работать с любым файлом с помощью компьютерной программы, нам нужно либо создать новый файл, если он не существует, либо открыть уже существующий файл. В любом случае мы можем открыть файл в следующих режимах:

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

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

Режим чтения и записи — если вы собираетесь читать и писать в один и тот же файл, то вы откроете файл в режиме чтения и записи.

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

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

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

Режим чтения и записи — если вы собираетесь читать и писать в один и тот же файл, то вы откроете файл в режиме чтения и записи.

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

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

Открытие файлов

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

Открывает существующий текстовый файл для чтения.

Открывает текстовый файл для записи. Если он не существует, то создается новый файл. Здесь ваша программа начнет писать содержимое с начала файла.

Открывает текстовый файл для записи в режиме добавления. Если он не существует, то создается новый файл. Здесь ваша программа начнет добавлять содержимое в существующий файл содержимого.

Открывает текстовый файл для чтения и записи как.

Открывает текстовый файл для чтения и записи. Сначала он обрезает файл до нулевой длины, если он существует; в противном случае создает файл, если он не существует.

Источник

Расширения существующих языков программирования

Другим примером служит язык mpC, разработанный в Институте системного программирования РАН как расширение ANSI С. Основное назначение mpC — создание эффективных параллельных программ для неоднородных вычисли­тельных систем. Пользователь может задать топологию сети, распределение данных и вычислений и необходимые пересылки данных. Посылка сообщений организована с использованием интерфейса MPI.

DVM-система предназначена для создания переносимых и эффективных вы­числительных приложений на языках C-DVM и Fortran-DVM для параллельных компьютеров с различной архитектурой. Аббревиатура DVM соответствует двум понятиям: Distributed Virtual Memory и Distributed Virtual Machine. Первое отражает наличие единого адресного пространства. Второе отражает использо­вание виртуальных машин для двухступенчатой схемы отображения данных и вычислений на реальную параллельную машину. Модель программирования предполагает задание DVM-указаний с помощью спецкомментариев, а значит, один вариант программы для последовательного и параллельного исполнения. Поддерживаются три группы директив: директивы распределения данных, ди­рективы распределения вычислений и спецификации удаленных данных. Ком­пилятор переводит программу на язык Фортран или Си, используя для органи­зации межпроцессорного взаимодействия одну из существующих технологий параллельного программирования (MPI, PVM, Router). В систему DVM также входят библиотека поддержки LIB-DVM, DVM-отладчик, предсказатель вы­полнения DVM-программ, анализатор производительности DVM-программ. Система разработана в Институте прикладной математики им. М.В.Келдыша РАН.

Специальные языки программирования

Если нужно точнее отразить либо специфику архитектуры параллельных сис­тем, либо свойства какого-то класса задач некоторой предметной области, то используют специальные языки параллельного программирования. Для про­граммирования транспьютерных систем был создан язык Occam, для програм­мирования потоковых машин был спроектирован язык однократного присваи­вания Sisal. Очень интересной и оригинальной разработкой является деклара­тивный язык НОРМА, созданный под руководством И.Б.Задыхайло в Институ­те прикладной математики им. М.В.Келдыша РАН для описания решения вы­числительных задач сеточными методами. Высокий уровень абстракции языка позволяет описывать задачи в нотации, близкой к исходной постановке про­блемы математиком, что условно авторы языка называют программированием без программиста. Язык с однократным присваиванием, не содержит традици­онных конструкций языков программирования, фиксирующих порядок вычис­ления и тем самым скрывающих естественный параллелизм алгоритма.

Библиотеки и интерфейсы, поддерживающие взаимодейст­вие параллельных процессов

С появлением массивно-параллельных компьютеров широкое распространение получили библиотеки и интерфейсы, поддерживающие взаимодействие па­раллельных процессов. Типичным представителем данного направления являет­ся интерфейс Message Passing Interface (MPI), реализация которого есть прак­тически на каждой параллельной платформе, начиная от векторно-конвейерных супер-ЭВМ до кластеров и сетей персональных компьютеров. Программист сам явно определяет какие параллельные процессы приложения в каком месте про­граммы и с какими процессами должны либо обмениваться данными, либо син­хронизировать свою работу. Обычно адресные пространства параллельных процессов различны. В частности, такой идеологии следуют MPI и PVM. В других технологиях, например Shmem, допускается использование как локаль­ных (private) переменных, так и общих (shared) переменных, доступных всем процессам приложения, и реализуется схема работы над общей памятью с по­мощью операций типа Put/Get.

Несколько особняком стоит система Linda, добавляющая в любой последова­тельный язык лишь четыре дополнительные функции in, out, read и eval, что и позволяет создавать параллельные программы. К сожалению, простота зало­женной идеи оборачивается большими проблемами в реализации, что делает данную красивую технологию скорее объектом академического интереса, чем практическим инструментом.

Параллельные предметные библиотеки

Часто на практике прикладные программисты вообще не используют никаких явных параллельных конструкций, обращаясь в критических по времени счета фрагментах к подпрограммам и функциям параллельных предметных библио­тек. Весь параллелизм и вся оптимизация спрятаны в вызовах, а пользователю остается лишь написать внешнюю часть своей программы и грамотно восполь­зоваться стандартными блоками. Примерами подобных библиотек являются Lapack, ScaLapack, Cray Scientific Library, HP Mathematical Library, PETSc и многие другие.

Некоторые параллельные предметные библиотеки

• ScaLAPACK включает подмножество процедур LAPACK, перера­ботанных для использования на MPP-компьютерах, включая: реше­ние систем линейных уравнений, обращение матриц, ортогональ­ные преобразования, поиск собственных значений и др.

Специализированные пакеты и программные комплексы

И, наконец, последнее направление, о котором стоит сказать, это использование специализированныю пакетов и программныю комплексов. Как правило, в этом случае пользователю вообще не приходится программировать. Основная зада­ча — это правильно указать все необходимые входные данные и правильно воспользоваться функциональностью пакета. Так, многие химики для выполне­ния квантово-химических расчетов на параллельных компьютерах пользуются пакетом GAMESS, не задумываясь о том, каким образом реализована парал­лельная обработка данных в самом пакете.

Источник

Типы файлов, созданные для проектов Visual Studio C++ File Types Created for Visual Studio C++ Projects

Многие типы файлов связаны с проектами Visual Studio для классических настольных приложений. Many types of files are associated with Visual Studio projects for classic desktop applications. То, какие файлы фактически войдут в ваш проект, зависит от типа проекта и параметров, выбранных при работе с мастером. The actual files included in your project depend on the project type and the options you select when using a wizard.

При создании проекта Visual Studio вы можете создать его в новом решении или добавить проект в существующее решение. When you create a Visual Studio project, you might create it in a new solution, or you might add a project to an existing solution. Нетривиальные приложения обычно разрабатываются как решения, содержащие множество проектов. Non-trivial applications are commonly developed with multiple projects in a solution.

Обычно выходным файлом проекта является EXE- или DLL-файл. Projects usually produce either an EXE or a DLL. Проекты могут зависеть друг от друга; в процессе сборки среда Visual Studio проверяет зависимости как внутри, так и между проектами. Projects can be dependent on each other; during the build process, the Visual Studio environment checks dependencies both within and between projects. Каждый проект обычно имеет основной исходный код. Each project usually has core source code. В зависимости от типа проекта он может иметь много других файлов, содержащих различные аспекты проекта. Depending on the kind of project, it may have many other files containing various aspects of the project. Указанием на содержимое этих файлов являются их расширения. The contents of these files are indicated by the file extension. В среде разработки Visual Studio по расширениям файлов определяется способ обработки их содержимого в ходе построения. The Visual Studio development environment uses the file extensions to determine how to handle the file contents during a build.

В следующей таблице показаны общие файлы в проекте Visual Studio, а также указаны их расширения файлов. The following table shows common files in a Visual Studio project, and identifies them with their file extension.

Файлы проекта распределены по папкам в обозревателе решений. Project files are organized into folders in Solution Explorer. Visual Studio создает папку для исходных файлов, файлов заголовков и файлов ресурсов, но вы можете реорганизовать эти папки или создать новые. Visual Studio creates a folder for source files, header files, and resource files, but you can reorganize these folders or create new ones. С помощью папок можно явно создавать логические группы файлов в иерархии проекта. You can use folders to organize explicitly logical clusters of files within the hierarchy of a project. Например, можно создать папки, содержащие все исходные файлы пользовательского интерфейса. For example, you could create folders to contain all your user interface source files. Или папки для спецификаций, документации или наборов тестов. Or, folders for specifications, documentation, or test suites. Имена папок должны быть уникальными. All file folder names should be unique.

При добавлении элемента в проект этот элемент добавляется ко всем конфигурациям этого проекта. When you add an item to a project, you add the item to all configurations for that project. Элемент добавляется независимо от того, является ли он создаваемым. The item is added whether it’s buildable or not. Например, если добавить элемент в проект с именем MyProject, то этот элемент появится также в отладочной (Debug) и окончательной (Release) конфигурациях проекта. For example, if you have a project named MyProject, adding an item adds it to both the Debug and Release project configurations.

Источник

Методы расширения языков программирования (часть 2) Текст научной статьи по специальности « Компьютерные и информационные науки»

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Михеева Вероника Дмитриевна

Programming language extension methods (Part 2)

In this paper, an overview of the modern programming languages extension methods is presented. The methods defined by the author are used to classify programming language extensions by various kinds of the extension source code integration and execution ways. In the second part of the paper, the extension integration method with new language features and a set of extension execution methods are considered. Also considered is an example of the domain-specific language extension of a generalpurpose language with the table-oriented programming features. The extension is implemented by the author on the base of the specialized programming system named ERA (Ephemeris Research in Astronomy).

Текст научной работы на тему «Методы расширения языков программирования (часть 2)»

методы расширения языков программирования

старший инженер по программному обеспечению,

Российское отделение компании «Интел»

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

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

Метод 4. Расширение новыми языковыми конструкциями

Все три рассмотренных метода [1] внесения расширенных возможностей в БЯ не изменяют имеющихся языковых конструкций, а лишь отличаются способом интеграции основной программы с внешней реализацией расширений. Рассматриваемый здесь четвертый способ представляет собой наиболее тесную интеграцию выразительных средств БЯ с конструкциями расширений. А именно, имеется в виду буквальное совмещение программного кода на двух языках в одной программе, что удобнее пользователю (программисту) по ряду причин. Во-первых, появляется возможность выражать специализированную функциональность с помощью наиболее подходящих языковых конструкций и, во-вторых, облегчается поиск ошибок в процессе разработки приложений, поскольку синтаксический и семантический контроль конструкций расширений наряду с контролем конструкций БЯ может быть выполнен компилятором на этапе трансляции.

Обычно при таком совмещении текст на специализированном языке выделяется в программном коде на БЯ с помощью окружающих маркирующих конструкций, легко выделяемых лекси-

1 Научный руководитель — кандидат физ.-мат. наук, заведующий лабораторией астрономического программирования Института прикладной астрономии РАН Ф. А. Новиков. Окончание. Начало в № 4.

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

Совмещение языков с явным выделением кода расширений.

Типичным примером совмещения разных языков с использованием маркирующих конструкций для явного выделения кода расширения можно считать ассемблерные вставки в код C/C++. Рассмотрим пример такого кода — программу на C для компилятора GNU (GNU C compiler — GCC) с использованием кода встроенной функции на ассемблере (пример 7) [2]. Эта программа вычисляет наибольший общий делитель двух заданных чисел с помощью алгоритма Евклида, реализованного в виде встроенной функции на ассемблере в целях оптимизации производительности исполняемого кода.

Пример 7. Программа на C со встроенным кодом на ассемблере.

3 int gcd( int a, int b ) <

5 /* Compute Greatest Common Divisor using Euclid’s Algorithm */

6 asm volatile ( “movl %1, %%eax;”

15 “dOnE: movl %%eax, %0;” : “=g” (result) : “g” (a), “g” (b)

22 int first, second ;

23 printf( “Enter two integers : “ ) ;

В примере 7 представлена основная C-функция main, вызывающая вспомогательную C-функцию gcd, в теле которой присутствует сегмент встроенного ассемблерного кода (строки 6-16), реализующий тело алгоритма Евклида на уровне инструкций микропроцессора. Маркером начала и конца сегмента данного языкового расширения является синтаксическая конструкция asm (. ), внутри которой располагаются строки кода на языке ассемблер для микропроцессора семейства Intel x86. Заметим, что спецификатор volatile здесь не является маркером, а только указывает компилятору, что данный код не подлежит автоматической оптимизации. Существует множество стилей написания подобных ассемблерных вставок. В данном примере применена конструкция в стиле AT&T, соответствующая стандарту [3] и поддерживающаяся компилятором GCC. Компиляторами C/C++ компании Microsoft для таких расширений используется другая нотация — в стиле Intel.

Можно привести другой пример, в настоящее время еще экзотический, поскольку речь идет об инновационной разработке компании Intel — об архитектуре Intel, поддерживающей интеграцию с различными акселераторами. Это архитектура IA с технологией расширения Exoskeleton Sequencer (EXO) и специально разработанные средства программирования с поддержкой языковых расширений — C for Heterogeneous Integration (CHI) [4]. «Интегрированная среда программирования CHI предоставляет разработчикам приложений возможность встраивать специализированный ассемблерный код для акселераторов или

код на предметно-ориентированном языке в исходный код на традиционном языке C/C++»2 [4, р. 185]. В примере 8 [4] представлен фрагмент кода для CHI, содержащий встроенный код на предметно-ориентированном языке DPL (Data-stream Programming Language), специально разработанном для программирования реконфигурируемого акселератора SCC-DPE [4, р. 190].

Пример 8. Программа на C со встроенным кодом на языке DPL.

4 void *in_desc = (void *)chi_alloc_buffer_desc

5 (DPE_INPUT_BUFFER, Vin, 4, 1);

6 void *out_desc = (void *)chi_alloc_buffer_desc

7 (DPE_OUTPUT_BUFFER, Vout, 4, 1);

9 #pragma omp parallel target(dpe) shared(Vin,Vout)

13 configuration^] cfgMult( vector val[1], vector coeff[1] )

15 result bs( mull(val, coeff), 13 ):

17 flow[4] multiFlow( vector vec[4], vector coeffs[4])

19 vector ret[4]; result out;

20 selector[iter : 4] sel[1] = << iter >>;

22 ret[sel] = cfgMult(vec[sel], coeffs[selRev]);

27 Vout = multiFlow(Vin, cf);

Среди разнообразия современных средств программирования можно найти еще немало примеров совмещения различных языков программирования в одной программе с явным синтаксическим разделением кода на разных языках. Например, совмещение кода на языке разметки гипертекста HTML и описания функций на языке сценариев, таких как JavaScript, VBScript.

без явного выделения кода расширений.

Рассмотрим пример 9 [8], созданный на основе образца кода LINQ.

Пример 9. Программа на C# с конструкциями LINQ.

1 public void SimpleQuery()

3 Northwind db = new Northwind(. );

4 db.Log = Console.Out;

5 var query = from customer in db.Customers

6 where customer.City == “Paris”

9 foreach (var Customer in query) Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

В примере 9 представлен код процедуры на языке C#, включающий конструкцию на языке описания запросов (строки 5-7, начиная с ключевого слова from), близком по синтаксису к SQL. Здесь среди конструкций C# употребляется конструкция совсем другого рода — описание запроса к БД, и заметим, без каких бы то ни было окружающих ее маркирующих символов. В этом слу-

[ C#3.0 I [ VB 9.0 ) [ Others..

■ Обзор технологии LINQ

чае конструкция расширения БЯ автоматически определяется компилятором исходя из анализа структуры выражения и по контексту (без синтаксических «подсказок» с помощью маркеров).

Примечательно, что в LINQ возможна также альтернативная запись запроса — через интерфейс API [7] (согласно первому методу интеграции расширений [1]). Поэтому строки 5-7 примера 9 (декларация переменной query, содержащей описание запроса) могут быть переписаны так, как показано в примере 10, и их исполнение приведет к получению такого же результата (т. е. обе формы записи эквивалентны по смыслу).

Пример 10. Программа на C# с конструкциями LINQ.

5 var query = db.Customers

Методы Where и Select реализованы с помощью механизма C# введения так называемых методов расширения — возможности добавлять новые методы к уже описанным типам объектов. А логические выражения в скобках в вызовах методов представляют собой встроенные функции, называемые лямбда-выражениями.

В реализации LINQ форма описания запроса примера 9 преобразуется компилятором в конструкцию вида, описанного в примере 10, т. е. с использованием средств БЯ и применением интерфейса API (методов Where и Select), с помощью которого реализовано данное расширение.

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

Методы исполнения кода расширений

Помимо нескольких способов интеграции кода расширений в БЯ, можно также выделить несколько способов реализации описанных расширениями действий во время исполнения основной программы. По мнению автора, классификация расширений современных языков программирования в соответствии с основными методами исполнения их кода представляет собой список следующих категорий, перечисленных в порядке возрастания сложности реализации.

1. Программный код расширений (обычно библиотеки функций, иногда семейство классов) реализован на БЯ.

2. Расширения в виде внешних библиотек функций реализованы на другом языке программирования и, в некоторых случаях, встроены в систему исполнения.

4. Аппаратная интерпретация расширенных возможностей, например с помощью сопроцессора.

Первый метод исполнения расширений (для первой категории расширений) является наиболее простым с точки зрения его реализации. Он может применяться в сочетании с первым или вторым методами интеграции расширений [1]. Второй метод обычно применяется в сочетании также с первым методом интеграции расширений. Третий метод подходит для реализации расширений третьего [1] и четвертого методов интеграции расширений. Четвертый метод применяется в сочетании с первым или четвертым методами интеграции расширений.

Четвертый метод исполнения кода расширений является наиболее сложным с точки зрения его реализации, поскольку требует наличия и интеграции дополнительных специализированных аппаратных возможностей у основной вычислительной машины. Но благодаря такому способу достигается наибольшая производительность при исполнении кода расширений (хотя этот эффект может несколько ослабляться накладными расходами на передачу данных сопроцессора). Например, аппаратная интерпретация расширений применяется в системе программирования EXO-CHI для архитектуры IA с технологией интеграции с различными акселераторами (о которой говорилось при описании четвертого метода интеграции расширений). В частности, в качестве средства программирования микропроцессора архитектуры IA, интегрированного с акселератором DPE, разработана интеграция языка C со специализированным языком DPL [9]. Язык DPL является предметно-ориентированным, он предназначен для описания параллельных вычислений на акселераторе процессов обработки сигналов DPE [10].

Пример предметно-ориентированного расширения языка общего назначения средствами таблично-ориентированного программирования

Рассмотрим предметно-ориентированное расширение языка общего назначения средствами решения задач с данными в табличной форме, на-

страиваемое на предметную область3. Оно имеет рабочую настройку на предметную область эфе-меридной астрономии и применяется для автоматизации вычислений в этой области [15].

Возникновение задачи разработки этого расширения связано со следующими историческими предпосылками, обусловливающими актуальность этой задачи. Специализированная система ЭРА, включающая средства программирования на предметно-ориентированном языке СЛОН (слежение и обработка наблюдений), более 20 лет успешно применяется в Институте прикладной астрономии (ИПА) РАН для автоматизации вычислительных задач эфемеридной астрономии. Ее создание и развитие продолжалось с середины 80-х гг. и нашло широкое применение в практической работе института. Ключевой идеей, положенной в основу системы ЭРА, является предложение Г. А. Красин-ского об использовании таблиц и алгебры таблиц как основных элементов программирования для решения задач эфемеридной астрономии в форме так называемых табличных операторов [12]. Используемая в системе ЭРА методика применения табличного подхода к обработке данных получила в дальнейшем название таблично-ориентированного программирования. Другой примечательной особенностью системы ЭРА является возможность настроить ее на выбранную предметную область [13]. И, наконец, высокое качество вычислительных моделей, положенных в основу функционального предметного наполнения, его полнота и регулярное обновление позволили системе ЭРА стать безусловным лидером в сфере программного обеспечения эфемеридной астрономии.

В процессе многолетнего опыта эксплуатации системы ЭРА назрела потребность в расширении средств, предоставляемых специализированным языком СЛОН [12, 14], средствами, доступными в традиционном языке программирования (а именно, Object Pascal [16]), что, согласно исследованиям [17, р. 15], вполне типично для предметноориентированных языков вообще. Эта потребность явилась побудительным мотивом к разработке нового языка Дельта на основе двух языков — СЛОН и Object Pascal, с объединением их функциональных возможностей путем расширения языка Object Pascal табличными операторами языка СЛОН. Выбор языка Object Pascal в качестве прототипа требующихся средств программирования общего назначения обусловлен несколькими причинами, в частности, тем, что Object Pascal тоже применяется для разработки вспомогательного функционального наполнения

3 Это расширение реализовано автором под руководством канд. физ.-мат. наук В. И. Скрипниченко [11] на базе специализированной системы ЭРА (эфемерид-ных расчетов в астрономии) 12.

системы ЭРА, а отдельные конструкции языков Object Pascal и СЛОН схожи [18].

Рассмотрим выбор методов, примененных в реализации данного расширения. Простейший способ интеграции кода расширений на основе языка СЛОН с помощью библиотеки специализированных функций API в данном случае является неприемлемым — он неэффективен с точки зрения удобства программирования и продуктивности разработки с помощью таких расширений. Данный тезис проиллюстрирован в примере 2 [1] БД. Чтобы добиться желаемой эффективности целевого инструмента программирования при разработке языка Дельта, требуется более высокий уровень абстракции, чем уровень API, — а именно такой, как в исходном предметно-ориентированном языке СЛОН. Поэтому при проектировании языка Дельта выбран метод интеграции расширений в основной язык программирования (Object Pascal) в виде новых языковых конструкций — табличных операторов языка СЛОН в исходном виде, т. е. метод 4. При этом новые конструкции явно обозначаются в тексте на языке Object Pascal с помощью маркирующих конструкций, что позволяет выделять эти расширения на этапе предварительной трансляции (препроцессирования).

Теперь рассмотрим выбор метода исполнения данного расширения. В системе ЭРА 12 для исполнения программ на языке СЛОН, состоящих из табличных операторов, применяется программная интерпретация с помощью специальной программы, названной процессором языка СЛОН (СЛОН-процессором). Эта программа выполняет трансляцию табличных операторов в промежуточное представление, а затем его интерпретирует.

В отличие от способа, принятого для языка СЛОН, в целях исполнения программного кода на языке Дельта было решено сначала транслировать табличные операторы в промежуточный код на языке Object Pascal, а затем компилировать и компоновать всю программу с помощью имеющихся инструментов в системе Borland Delphi. В результате такого двойного преобразования получается исполняемый код. Таким образом, в системе Дельта применяется «двухпроходная» трансляция. Этот подход позволяет разделить способы исполнения отдельных частей табличного оператора — табличного выражения и использованных в нем блоков действий, а также предметно-ориентированных функций. Благодаря этому в реализации языка Дельта удалось ограничиться интерпретацией лишь части табличных операторов — табличных выражений — конструкций, не имеющих прямых аналогов в языке реализации Object Pascal (на этапе предварительной трансляции они преобразуются в строковые параметры функции интерпретации согласно ме-

тоду 3 [1] интеграции расширений). Остальная часть табличных операторов программы на языке Дельта (блоки действий, включая вызовы предметно-ориентированных функций и процедур), наряду с основным текстом программы на Object Pascal, компилируется в исполняемый код с помощью двухпроходной трансляции. На первой фазе трансляции выполняется преобразование в промежуточный код на Object Pascal с вызовами функций API интерпретатора (согласно методу 1 [1] интеграции расширений), а на второй — преобразование в целевой исполняемый код.

Таким образом, в результате анализа разнообразных методов расширения языков программирования сделан обоснованный выбор следующих методов, подходящих для реализации языка Дельта [15].

• Для интеграции расширений в БЯ используются новые языковые конструкции (метод 4 интеграции расширений) на уровне разработки исходного кода приложений Дельта и вызовы функций API реализации расширений со специальными строковыми параметрами (методы 1 и 3 [1]) на уровне представления промежуточного кода на Object Pascal.

• Для исполнения кода расширений используется сочетание программной интерпретации с предварительной трансляцией в код на БЯ программирования (методы 1 и 3 исполнения расширений).

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

Выбор метода исполнения кода расширений в общем случае во многом определяется условия-

ми конкретного проекта: составом имеющихся инструментальных средств программирования на БЯ; требованиями к производительности исполнения кода на расширенном языке; возможностями целевой аппаратной платформы по исполнению специализированных функций; наличием временных и человеческих ресурсов, необходимых для доработки базовых инструментальных средств программирования.

В приведенном обзоре систематизированы сведения о разновидностях расширений в совре-

1. Михеева В. Д. Методы расширения языков программирования. Ч. 1 // Информационно-управля-ющие системы. 2010. № 4. С. 46-52.

2. Using Inline Assembly in C/C++: revision 14.10.2006 // The Code Project (a community of Software development and Design developers). http://www.codeproject. com/KB/cpp/edujini_inline_asm.aspx (дата обращения: 10.09.2009).

3. International standard: ISO/IEC 9899:1990, Information technology —Programming Languages — C; ISO/IEC JTC1/SC22/WG14 — The international standardization working group for C. http://www. open-std.org/JTC1/SC22/WG14/ (дата обращения: 10.09.2009).

4. Wang P. et al. Accelerator Exoskeleton — Tera-scale Computing // Intel Technology Journal. Aug. 2007. Vol. 11. Is. 03. Р. 185-196.

6. Введение в LINQ // Библиотека MSDN. Нояб. 2007. http://msdn.microsoft.com/ru-ru/library/bb397897. aspx (дата обращения: 14.07.2009).

7. Hejlsberg A. DEV223: LINQ Overview // Microsoft Tech Ed Developers, 2006.

8. Calvert Ch. LINQ and Deferred Execution // MSDN Blogs. Charlie Calvert’s Community Blog. http://blogs. msdn.com/charlie/archive/2007/12/09/deferred-execution.aspx (дата обращения: 10.08.2009).

9. Mironov S., Pavlov V., Yakoushkin S., Ivanov V. DPL: Domain specific programming language and tools //

XI Intern. Symp. on Problems of Redundancy in Information and Control Systems, St.-Petersburg, July

10. Hoffman J., Ilitzky D., Chun A., Chapyzhenka A. Overview of the Scalable Communications Core // IEEE Computer Society Annual Symp. on VLSI (ISVLSI ‘07),y/

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

9-11 May 2007, Porto Alegre, Brazil. P 3-8. http:// ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber= 4208886 (дата обращения: 21.03.2010).

11. Михеева В. Д., Новиков Ф. А., Скрипниченко В. И. Дельта-язык и система программирования для решения прикладных задач с табличными данными // Научно-технические ведомости СПбГПУ. 2007. № 4. Т. 2. С. 57-60.

12. Krasinsky G. A., Novikov F. A., Skripnichenko V. I. Problem Oriented Language for Ephemeris Astronomy and its Realization in System ERA // Cel. Mech. 1989. Vol. 45. Р. 219-229.

13. Новиков Ф. А. Архитектура системы «ЭРА» — табличный подход к обработке данных // Препринт ИПА АН СССР / Л., 1990. № 16. — 32 с.

14. Krasinsky G. A., Vasiljev M. V. ERA-7. Knowledge Base and Programming System for Dynamical Astronomy: manual / IAA RAS. St.-Petersburg, 2001. — 232 p.

15. Михеева В. Д. Разработка предметно-ориентированных приложений с помощью инструментальных средств Дельта // Сообщения ИПА РАН / СПб.,

16. Object Pascal Language Guide. 2001 // Borland Software Corporation. 100 Enterprise Way, Scotts Valley, CA 95066-3249. http://www.borland.com, http://docs. embarcadero.com/products/rad_studio/cbuilder6/ EN/CB6_ObjPascalLangGuide_EN.pdf (дата обращения: 21.03.2010).

17. Horowitz E. Fundamentals of Programming Languages. Second Edition. — USA: Computer Science Press, 1984. — 446 p.

18. Михеева В. Д., Скрипниченко В. И. Расширение языка Object Pascal (Delphi) таблично-ориентированными средствами решения задач эфемеридной астрономии // Сообщения ИПА РАН/ СПб., 2006. № 168. — 20 с.

Источник

Видео

Расширения и форматы файлов

Расширения и форматы файлов

ЧТО ВНУТРИ ФАЙЛОВ? | РАЗБОР

ЧТО ВНУТРИ ФАЙЛОВ? | РАЗБОР

Языки и сферы их применения. Какой язык программирования выбрать?

Языки и сферы их применения. Какой язык программирования выбрать?

Пишем расширение для Chrome, Часть 1 (Программирование вживую)

Пишем расширение для Chrome, Часть 1 (Программирование вживую)

Форматы файлов и не только [GeekBrains]

Форматы файлов и не только [GeekBrains]

Меняем расширение файла.

Меняем расширение файла.

5 ХУДШИХ языков программирования, которые не стоит учить!

5 ХУДШИХ языков программирования, которые не стоит учить!

Как показать расширения файлов Windows 10, 8.1 и Windows 7

Как показать расширения файлов Windows 10, 8.1 и Windows 7

Конвертируем файлы с расширением HEX и BIN, в файл с расширением DFU

Конвертируем файлы с расширением HEX и BIN, в файл с расширением DFU

JavaScript практика. Расширение файла, булевые операции #7

JavaScript практика. Расширение файла, булевые операции #7
Поделиться или сохранить к себе:
Добавить комментарий

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

Sr.NoРежим и описание
1