1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Скачал я себе ГНАТ (Gnat GPL(без исходников, поленился все ссылки тыкать) и Win32Ada. Скопировал я для начала в редактор кода текст из Википедии:
with Ada.Text_IO;
procedure Hello is use Ada.Text_IO; begin Put_Line("Hello, world!"); end Hello.
Нажимаю "проверка синтаксиса".
[2011-01-18 21:32:02] Could not determine the project for file: C:\ADA\projects\Test\test.gpr [2011-01-18 21:32:02] Invalid context, cannot build
В общем, я так понял, я пока с какими-то настройками не разобрался, что делать? Заметил, что можно копировать сообщения об ошибках в буфер обмена. Ещё, что функцию можно свернуть. После каждого сворачивания/разворачивания в конец добавляется пустая строчка (баг, есть таблетка?). В настройках цвета не нашёл отдельного цвета для символов. Мне нравится, когда скобочки и запятые коричневые, а не чёрные.
Мда, название, как оказалось, у языка очень неудобное - в гугле невозможно ничего найти, сплошная эзотерика да некромантия выдаётся. Я ничего не нашёл, всё пока делаю наугад. Какой учебник посоветуете? Что-нибудь мощное и подробное, типа Фаронова?
Пока пытаюсь понять работу основных операторов.
with Ada.Text_IO; use Ada.Text_IO;
procedure Test is i: integer;
begin i := -7; Put_Line(integer'Image(i)); i := i / 2; Put_Line(integer'Image(i)); end Test;
Выдал -7 и -3. То есть / для целых чисел тоже сработало. Судя по результату, деление (увы, как и во всех других языках) прошло по правилам не математической, а компьютерной арфиметики (по правилам математики частное округляется не в сторону нуля, а в сторону минус бесконености, это делает остаток периодичной функцией, что очень удобно). Решив проверить этот момент с оператором / на безопасность, я решил воспроизвести известную крестопроблему (у них 1/3=0, тьфу, то есть не =, а ==) и сделать так:
with Ada.Text_IO; use Ada.Text_IO;
procedure Test is i: integer; j: float;
begin i := -7; Put_Line(integer'Image(i)); j := i / 2; Put_Line(float'Image(j)); end Test;
Не скомпилиловалось. j := float(i) / float(2); прошло Безопасность в порядке, насколько это будет мешать в написании сложных выражений - не знаю.
По поводу среды. Я пока не нашёл удобную последовательность кнопок для пересбоки проекта и запуска. Пока что я пытаюсь нажимать кнопки ALT+B+P+B+B+B+B+(кто додумался два пункта в одном подменю на одну клавишу повесть)+ENTER+SHIFT+F2. Если просто запустить, то запустится старая версия программы, такого в дельфе не было - запустить неактуальную версию из среды было невозможно, и правильно, меньше непоняток. Как это всё настроить? Долго думал, почему после переноса строки добавляется пробел, догадался посмотреть и заменить автоотступы с 3 на привычные 2. Жирные ключевые слова хорошо обрамляют блок, большие отступы не нужны - это только в С-образных даже 4 отступов не хватает для различения блока (им наверное скобочки плохо видны), что опровергает довод о расползании кода Паскаля в ширину, перенаправляя его против Си.