Скачать 354.13 Kb.
|
.5. ПримерОбработка ошибок –пожалуй, самая распространённая подзадача для системного программирования. В подавляющем большинстве современных языков реализован специальный механизм обработки на основе исключений с раскручиванием стека вызовов. Подход довольно трудоёмкий с точки зрения реализации, снижает скорость работы программ по сравнению с анализом кодов ошибок, но код получается на вид простым и компактным. Насколько велики накладные расходы, в точности сложно определить, но обычно речь идёт о процентах. Этого достаточно, чтобы разработчики на C++ отказывались от исключений везде, где важна производительность. В CSeL можно легко реализовать эффективную обработку ошибок, основанную условных переходах, предложив выразительные средства как при работе с исключениями. Начнём с описания удобной регистрации синтаксических подстановок: //syntax { ir(def pattern ids types replace, {ir(pattern, replace, ids, types, '_syntax #0 #1 #2 #3')}, (pattern,ids,types,replace), (0,0,0,0), '_syntax #0 #1 #2 #3') } Теперь опишем идею на примере: try { do init; check(status == 'ready'); do work; check(status == 'done') } catch { … } Блок try регистрирует именованную метку, указывающую на код-обработчик catch. Если условие внутри check не выполнено, происходит переход к обработчику. При вложении блоков try-catch проблем не будет, так как внутренняя регистрация метки скроет внешнюю. Рассмотрим реализацию: def (try x catch y)(x,y)(0,0) { ir(catch, '_link &0 0'); x; ir ' jmp 1 *0 nop '; y; ir'*1 nop' }; def (check x) x 0 { ir(x; catch; ' *0 load %0 *1 _label &1 test 0 je 1 ') } При необходимости в check можно передавать дополнительно контекст возникновения ошибки, проводя в обработчике более подробный анализ. Приведённый способ напоминает технику применения макросов в Си, но за счёт именованных меток код получается гораздо ближе к исключениям C++, но без потерь в производительности, связанных с проходом по стеку вызовов. Другие примеры кода на CSeL приведены в Приложении 2. ЗаключениеВ ходе работы на C# .Net Framework 4.0 был разработан компилятор языка, генерирующий промежуточный код, c учётом требований:
Так же была написана CSeL-библиотека, реализующая примитивы для:
В будущем в ядро языка будут добавлены функции и замыкания. Кроме того планируется использование LLVM для генерации машинного кода. Литература
ПРИЛОЖЕНИЕ 1Конфигурация/proc/cpuinfo
… /proc/meminfoMemTotal
… компиляторGCC 4.3.2 “g++ X.cpp -O3 -o Y.out” или “gcc -x objective-c X.m -lobjc -O3 -o Y.out” Тестовые задачи
РезультатыМетод: 50 запусков каждой из программ, время среднее арифметическое.
Приложение 2Переменныеdef (x y)(x,y)(type,0) { x; ir(x, y, '*0 _var %0 &1'), x } Типыdef (newtype(x,s))(x,s)(0,number) { ir(type, x, s, ' *0 _type %2 &1 *1 _var %0 &1 _store 0 1 ') } Целые числаnewtype(int,4); def (x-y)(x,y)(int,int) { int z; x; y; ir(x, y, z, ' *0 load %0 *1 load %1 *2 sub 0 1 store 2 %2 '), z } Конструкции, управляющие потоком исполненияifdef (if x y)(x,y)(0,0) { x; ir(x, ' *0 load %0 test 0 je 1 '); y; ir'*1 nop' } if-elsedef (if x y else z)(x,y,z)(0,0,0) { x; ir(x, ' *0 load %0 test 0 je 1 '); y; ir'jmp 2 *1 nop'; z; ir'*2 nop' } for-breakdef (`break)(x)(0) { ir(break, '*0 _label &0 jmp 0') }; def (for(a;b;c)d)(a,b,c,d)(0,0,0,0) { a; ir'*0 nop'; b; ir(b, break, ' *1 load %0 test 1 je 2 _link &1 2 '); d; c; ir(for, ' jmp 0 *2 nop ') } 1 Трасса – последовательность операций, включая переходы, проверку типов, вызовы методов. 2 Static Single Assignment form – форма записи, при которой значения переменных после первого присвоения не меняются 3 Foreign Function Interface – возможность вызывать код, написанный на другом языке. 4 Используем форму записи из предыдущей работы [16]. 5 Шестнадцатеричные коды символов соответствуют US-ASCII. 6 Вопрос о подключении модулей с бинарным или промежуточным представлением пока открыт. 7 IR – Intermediate Representation – промежуточное представление, промежуточный код. |
Реферат: Коваленко А. Е. Разработка системы научной визуализации.... Коваленко А. Е. Разработка системы научной визуализации. Квалификационная работа на степень магистра наук по направлению «Математика.... | Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических... Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению... | ||
Реферат Флягина Т. А. Проблемы разработки многооконных интерфейсов,... Флягина Т. А. Проблемы разработки многооконных интерфейсов, квалификационная работа на степень бакалавра наук | Рабочая программа составлена в соответствии с требованиями фгос впо... Математика и компьютерные науки по профилю подготовки: «Вычислительные, программные, информационные системы и компьютерные технологии»... | ||
Рабочая программа для студентов очной формы обучения, направление... Иванов Д. И. Криптография и криптоанализ. Учебно-методический комплекс. Рабочая программа для студентов очной формы обучения, направления... | Рабочая программа для студентов очной формы обучения, направление... Иванов Д. И. Дополнительные главы дискретной математики. Учебно-методический комплекс. Рабочая программа для студентов очной формы... | ||
Литература Погрешности вычислений Программа предназначена для подготовки к вступительным испытаниям в аспирантуру по направлению 02. 06. 01 «Компьютерные и информационные... | Учебно-методический комплекс Программа для студентов направления... Рассмотрено на заседании умк института математики и компьютерных наук, протокол №2013 г | ||
Рабочая программа дисциплины (модуля) опубликована на сайте ТюмГУ «Математика и компьютерные науки» по профилю подготовки «Вычислительные, программные, информационные системы и компьютерные технологии... | Г. Л. Воронин Н. В ларшина социология учебно-методическое пособие Программа предназначена для бакалавров очной формы обучения механико-математического факультета математика 010100, математика и компьютерные... | ||
Учебно-методический комплекс учебной дисциплины «Философские образы... Аспирантура – самостоятельный уровень высшего образования, нацеленный на подготовку специалистов высшей квалификации. К поступлению... | Рабочая программа для студентов направления 010200. 62 Математика... Девятков А. П. Банаховы алгебры и гармонический анализ. Учебно-методический комплекс. Рабочая программа для студентов направления... | ||
Учебно-методический комплекс для студентов не психологических специальностей... Гидрология 010100. 62 Математика 010101. 65 Математика 010101. 65 Математика 010101. 65 Математика 010300. 62 Математика. Компьютерные... | Рабочая программа и методические указания для студентов очной формы... Рабочая программа и методические указания для студентов очной формы обучения направлений 010300. 62 «Математика. Компьютерные науки»... | ||
Диссертация На соискание степени Магистра по направлению 030100 Философия... Едеральное государственное бюджетное образовательное учреждение высшего профессионального образования | Рабочая программа составлена в соответствии с требованиями фгос впо... Дёгтев А. Н. Теория алгоритмов. Учебно-методический комплекс. Рабочая программа для студентов направления 010200. 62 – математика... |