Описание среды компилятора AmigaE 3.3a

Автор: MindEngine
Источник: "PowerAmiga#6"



Вводная часть (для тех, кто любит погорячее...)

E - объектно-ориентированный, процедурный, высокоуровневый язык программирования, во многом схожий с языками Си++, Ада, Лисп и другими. Являясь языком общего назначения, в своей реализации на Ammy, основной упор сделан на разработку приложений.

Скорость компиляции более 20000 строк в минуту на "голой" A500, включаемый ассемблер и линковщик интегрированы в компилятор, большой набор встроенных функций, великолепная концепция модулей, реализованная во вложениях v39, гибкая система типов, наследование, методы, обработка прерываний (в контексте компилятора), выделение регистров, быстрая работа с памятью, унификация, Лисп-ячейки, средства разработки графического интерфейса, (макро-) препроцессор, гибкий и мощный отладчик на уровне исходника, легкая линковка библиотек и многое другое...

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

Это показывает уровень гибкости языка... Требования к железу минимальны - голой A1200 с винтом хватит по уши! Любой проект будет Вам по плечу! Е вобрал в себя все лучшее, что было в языках программирования. Смотрите сами: Вывод "Hello, World!" в CLI-окно 1000 раз, дана соответствующая информация о компиляторе, длине полученного кода и скорости выполнения...

Language Size (bytes) Ticks
GCC 2.7.2 58,804 687
G77 Fortran 47,992 1,158
Fortran2C & GCC 2.7.2 40,744 1,123
ACE 2.40 (Phx) 28,832 684
SAS C 6.56 (7.01) 17,104 717
Maxon/Hisoft Basic 3.0 16,076 750
Turbo Modula-2 10,324 714
GFA-Basic 3.51 9,284 656
StormCPP 2.0 6,772 668
MaxonPASCAL 3.0 4,628 720
Oberon-A 4,360 770
HighSpeed Pascal 1.2 4,120 713
BB2 2.1 4,084 720
vbcc 0.6a 3,912 731
PCQ Pascal 2.0 (A68kN) 2,964 727
PCQ Pascal 2.0 (Phx) 2,540 727
PCQ Pascal 1.2d (Phx) 2,520 723
BB2 (optimized version) 2,328 699
Cyclone 0.92 1,612 715
MaxonC++ 3.1 856 689
AmigaE 3.3a 704 706

По материалaм гайда "Comparison of programming languages" by Frank Reibold. Как Вы сами можете видеть по размеру генерируемого кода, компилятор AmigaЕ - абсолютный рекордсмен, да и по скорости не на последнем месте!

Для того, чтобы подогреть Ваш интерес, далее по тексту будет дано описание редактора ЕЕ (версия 0.9.2 beta), и его настроек (крайне простых), чтобы Вы могли во всеоружии начать программировать на E! ;-)

И еще несколько примеров на растерзание!

Как обычно - Hello World и еще несколько, посложнее!


Описание редактора EE 0.9.2 beta

Главное меню редактора

Project (работа над проектами)

Clear

очистить текущий проект 
Open... загрузить исходник в редактор 
Open New... открыть новое окно и сделать запрос на загрузку файла 
New Window просто открыть новое окно 
Save сохранить текущий проект 
Save As... сохранить текущий проект под другим именем 
Quit закрыть текущий проект 
Quit All... закрыть редактор 

Edit (редактирование проекта)

Cut вырезать в буфер обмена 
Copy копировать в буфер обмена 
Paste вставить из буфера обмена 
Dupe Line продублировать строку
Mark Block выделить блок
Comment сделать комментарием выделенный блок или строку под курсором
Uncomment операция обратная Comment
To Upper перевести выделенный блок в верхний регистр
To Lower перевести выделенный блок в нижний регистр
Undo отмена последней операции (откат)

Find (операции поиска)

Find Selected взять выделенную область в качестве аргумента и найти следующее совпадение
Find Forward... искать в направлении вперёд
Find Backward... искать в направлении назад
Find Next найти следующее совпадение
Find Prev найти предыдущее совпадение
Replace Forward... заменить в направлении вперёд
Replace Backward... заменить в направлении назад
Replace Next заменить следующее совпадение
Replace Prev заменить предыдущее совпадение
Replace All заменить всё
Case Sensetive переключатель определяющий имеет ли значение регистр букв

Settings (установки)

Insert Mode вкл./выкл. режим вставки
Save Before Compiling вкл./выкл. сохранение проекта перед компиляцией
Backup Project вкл./выкл. cоздание резервной копии с добавлением расширения .bak
Report Unreferenced вкл./выкл. вывод сообщения об объявленных, но неиспользованных в программе переменных
Fast File Loading вкл./выкл. быструю загрузку файлов (требуется больше памяти)
No Fold When Loading отключение закладок при загрузке. В этом случае, если после загрузки проект будет сохранен, все закладки будут потеряны!
Default Pub Screen вкл./выкл. "общий" экран для редактора EE
Shanghai Pub Screen вкл./выкл. открытие всех окон на экране редактора EE
Free-form Cursor вкл./выкл. режим построчного редактирования
Justify New Line вкл./выкл. "умный" отступ при создании новой строки
Trim End Of Line вкл./выкл. "обрезание" концов строк
Indent Width... установка ширины отступа
Tab Width... установка ширины табуляции (имеет значение только при загрузке файла)
Fold Extra Lines... установка числа пустых строк для закладки при обработке операторов ENDPROC и ENDOBJECT
Select Font... установка пользовательского шрифта для текста
Edit Prefs... вызвать редактор настроек (EE Configuration Tool)
Load Prefs... загрузить настройки
Macros
определение макросов
Edit Command определение команд

Tools (инструментарий)

Goto Line... переход на указанную строку
Next Window переход на следующее окно
Previous Window переход на предыдущее окно
Switch To Window переход на указанное окно выбираемое из списка
Tall Window развернуть окно на весь экран
Fold/Unfold установить/снять закладку
Complete взять помеченный блок в качестве аргумента для поиска подходящего окончания и замены блоком из файла окончаний.
Compile компиляция текущего проекта
Compile And Run компиляция и исполнение полученной программы
Goto Last Error переход на последнюю обнаруженную ошибку
Show Editor Info вывести служебную информацию о редакторе EE
Collect Garbage очистить кэш редактора EE
Execute исполнение одной из пяти вспомогательных команд.

Settings/Edit Prefs.../Commands... (определение вспомогательных команд)

Пример определения вспомогательных команд
Пример определения вспомогательных команд

Settings/Edit Prefs.../Compiler... (определение настроек компилятора)

Пример определения настроек компилятора
Пример определения настроек компилятора

Settings/Edit Prefs.../Global Settings... (глобальные установки среды редактора EE)

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

Settings/Edit Prefs.../Key Assignments... (присвоение "горячих" клавиш)

Пример присвоения "горячих" клавиш
Пример присвоения "горячих" клавиш

Settings/Edit Prefs.../Menu Command Hotkeys... - переопределение "горячих" клавиш в системе меню редактора.

Settings/Macros/Begin Recording... - начать определение макроса.

Settings/Macros/End Recording - закончить определение макроса.

Settings/Macros/Cancel Macro - прервать определение макроса.

Settings/Macros/Delete... - удалить существующий макрос.

Settings/Macros/Save... - сохранить определённые макросы.

Settings/Macros/Load... - загрузить определения макросов.

Settings/Macros/Clear... - очистить список определённых макросов.

Settings/Edit Command/1... - определение первой вспомогательной команды.

Settings/Edit Command/2... - определение второй вспомогательной команды.

Settings/Edit Command/3... - определение третьей вспомогательной команды.

Settings/Edit Command/4... - определение четвёртой вспомогательной команды.

Settings/Edit Command/4... - определение пятой вспомогательной команды.

Settings/Edit Command/Compiler... - определение строки вызова компилятора и его аргументов.


Определение закладок (folding)

Закладки служат для улучшения удобочитаемости Ваших программ, путём сворачивания программных блоков. Это очень удобно при объектно-ориентированном и процедурном подходах в программировании. Для определения закладок (fold) служит опция "Fold/Unfold" из меню "Tools" ("RAmiga+h", по умолчанию). Если вы хотите пользоваться закладками, убедитесь сначала в том, что опция "No Fold When Loading" из меню "Settimgs" не активирована. В противном случае определяемые закладки не будут запоминаться в сохраняемых проектах.

Существует два способа определения границ закладки:

  1. По выделенному тексту;
  2. Начиная с текущей строки до первого встреченного оператора "конца закладки" ("->endfold").

Механизм действия закладок:

Обратите внимание на точность написания оператора "конца закладки!"

Установленная закладка выглядит как строка с парой символов ">>" в начале. Закладка не может быть скопирована, она может быть только перенесена (Cut & Paste). Вложенность закладок никак не ограничена. Сама закладка будет храниться в виде комментария, в конце файла содержащего исходный текст Вашей программы - следовательно, не будет мешать при просмотре исходника другими средствами. В случае повреждения этой информации, используйте опцию "No Fold When Loading" из меню "Settings" - это позволит редактору EE нормально загрузить исходник.


Функция автодополнения (complete) и файл окончаний

Автодополнение (complete) - удобная функция позволяющая Вам не тратить время на ввод программных блоков, наиболее часто используемых в Ваших программах. Для вызова автодополнения используется опция "Complete" из меню "Tools" ("RAmiga+/", по умолчанию). При этом происходит поиск окончания для выделенного блока текста в файле окончаний. В случае, когда окончание для выделенного блока текста было найдено - происходит замена этого блока на блок найденный в файле окончаний. В противном случае, текст Вашей программы останется неизменным.

Например: Вы выделили строку "rand" в Вашей программе, нажали комбинацию клавиш "RAmiga+/" и эта строка дополнилась до: "randnum:=Rnd(max)" - присвоение переменной randnum случайного значения. Удобно использовать автодополнение для завершения путей к ресурсам, библиотекам и т.д. подключаемым в Ваших программах. Вы можете и сами придумать подходящие применения для этой функции.

Файл окончаний (CompletionFiles) хранится в директории "prefs" и может быть отредактирован в любом имеющемся у Вас текстовом редакторе (включая EE).


Примеры программ на языке E для AmigaOS

/* Самый занудный пример */

PROC main()
   WriteF('Hello, World!\n')
ENDPROC
/* Получение аргументов из командной строки. Здесь, arg - специально 
 * зарезервированная для этих целей переменная языка E.
 */
 
PROC main()
   WriteF( IF arg[]=0 THEN 'No Args!\n' ELSE 'You wrote: \s\n', arg )
ENDPROC
/* Отображение окна на общий экран (по умолчанию - экран Workbench) */
 
MODULE  'intuition/intuition'                 -> Нам понадобится модуль intuition.m

ENUM ERR_NONE, ERR_WIN, ERR_KICK, ERR_PUB     -> Определяем константы путём перечисления

RAISE ERR_WIN  IF OpenWindowTagList()=NIL,    -> "Лов" исключений: окно не
      ERR_PUB  IF LockPubScreen()=NIL         -> открылось или сорвался захват...

/* Открываем простое окно и ждём когда пользователь захочет его закрыть. */

PROC main() HANDLE                            -> Процедура содержит обработчик исключений
   DEF test_window=NIL, test_screen=NIL       -> Объявление переменных для структур
   IF KickVersion(37)=FALSE THEN ERR_KICK     -> Генерируем ошибку для старых кикстартов
   
   test_screen := LockPubScreen('Workbench')  ->  Захват стандартного экрана
   test_screen := OpenWindowTagList(NIL,      ->               Открытие окна
                                   [WA_LEFT, 0, WA_TOP, 11,
                                    WA_WIDTH, 640, WA_HEIGHT, 30,
                                    WA_DRAGBAR, TRUE,
                                    WA_CLOSEGADGET, TRUE,
                                    WA_SMARTREFRESH, TRUE,
                                    WA_CAREREFRESH, TRUE,
                                    WA_DEPTHGADGET, TRUE,
                                    WA_IDCMP, IDCMP_CLOSEWINDOW,
                                    WA_TITLE, 'Window Title',
                                    WA_PUBSCREEN, test_screen,
                                    NIL])
									
   UnlockPubScreen(NIL, test_screen)          -> Отдаём системе захваченный экран
   test_screen := NIL                         -> Обнуляем указатель
   handle_window_events(test_window)          -> Ожидание системного события

   EXCEPT DO
      IF test_window THEN CloseWindow(test_window)
      IF test_screen THEN UnlockPubScreen(NIL, test_screen)
         SELECT exception                     -> Вывод сообщений об ошибках
            CASE ERR_KICK; WriteF('Error: Needs Kickstart V37+\n')
            CASE ERR_PUB;  WriteF('Error: Could not lock public screen\n')
            CASE ERR_WIN;  WriteF('Error: Failed to open window\n')
         ENDSELECT
ENDPROC

/* Процедура ожидания события */

PROC handle_window_events(win)
   REPEAT
   UNTIL WaitIMessage(win)=IDCMP_CLOSEWINDOW
ENDPROC

MindEngine; Copyright 2003



Сайт создан в системе uCoz