QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Friday, 21 Nov 2008 08:58
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Языки и алгоритмы —› ADA и QNX

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>

Посл.ответ Сообщение


Дата: 25 Апр,  11:07

Приветь.
GCC 3.4 уже вышел. Я собрал компилятор и провел тесты.
Очен интересно, но тестирование длилось 9 часов 38 минут (Pentium4 2.4 M ). Это на час быстрее чем предыдуще компиляторы.
Тесты прошли успешно. На конец то новый компилятор ады - GCC 3.4 признан вполне равноценным компилятором. Это признано на
http://libre.act-europe.fr/GNAT/ -
The current distribution of the public version of GNAT is 3.15p. This version is based on GCC 2.8.1.
It should not be confused with the versions of GNAT available with GCC 3.2 and 3.3, which are alpha versions
of the integration of GNAT with recent versions of the GCC code generator, and do not correspond to any specific GNAT release.
GCC 3.4 contains an improved integration of GNAT which is suitable for academic and free software usage and
can be considered as an alternative to GNAT 3.15p.
Я скоро буду готов переслать dmi компилятором GCC 3.4[b][/b]


Дата: 26 Апр,  14:55

Привет!

Приятно слышать это, весьма кстати. Просто мне эта тема тоже интересна. Сегодня перепишу исходники gcc 3.4, и попробую откомпилировать сам. Как Ваши впечатления от новой версии?


Дата: 2 Май,  22:57

Приветь.
Я подготовил компилятор gnat 3.4.0. dmi, чтобы упростить я создал маленький сайт
http://www.ajam.republika.pl/ он на польском языке, но я думаю, что на нем легко
найти линк gnat-3.4.0-x86-public.qpr.


Дата: 29 Май,  12:24

Привет всем.
Я веду переписку с Viktorom Danylenko и к сожолени его почта уже второй раз не приняла мае писмою
Так что я решил использовать форум для ответа. Но я думаю, что это заинтересуеть всех.
Viktor тоже собрал gnat, но тесты у него проходят не все
вот выдержка из лога:

=== acats tests ===
Running chapter a ...
PASS: a22006b
PASS: a22006c
PASS: a22006d
PASS: a26007a
=== acats Summary ===
# of expected passes 1945
# of unexpected failures 21
# of unsupported tests 356
*** FAILURES: c23003b c23003g c23003i ca13001 cxg2002 cxg2003 cxg2004
cxg2006 cxg2007 cxg2010 cxg2011 cxg2012 cxg2013 cxg2014 cxg2015 cxg2016
cxg2017 cxg2018 cxg2019 cxg2020 cxg2021

У меня с тестом нет проблем
вот выдержка из моего лога:

=== acats configuration ===
target gcc is /src/gcc-3.4-20040303/nto/ntox86/gcc/xgcc -B/src/gcc-3.4-20040303/nto/ntox86/gcc/
Reading specs from /src/gcc-3.4-20040303/nto/ntox86/gcc/specs Configured with: /src/gcc-3.4-20040303/configure --srcdir=/src/gcc-3.4-20040303 --prefix=/usr/local --exec-prefix=/usr/local --with-local-prefix=/usr/local --enable-languages=c,ada --enable-threads=posix --enable-shared Thread model: posix gcc version 3.4.0 20040303 (prerelease)
host=i386-pc-nto-qnx6.2.1
target=i386-pc-nto-qnx6.2.1
gnatmake is a tracked alias for /src/gcc-3.4-20040303/nto/ntox86/gcc/gnatmake
........................................... ...................................
=== acats Summary ===
# of expected passes 2322
# of unexpected failures 0

Вот что я могу Viktor тебе подсказать:

*** FAILURES: c23003b c23003g c23003i - из за того что имя файла длинной больше 48 символов.
надо сделать:

touch /.longfilenames
chown root:root /.longfilenames
chmod 444 /.longfilenames
reboot

на счет осталных, то трудно мне что то сказать. Видно только, что большенство касаеться
cxg. Мне кажеться что ты должен попробовать найти место в котором программа выпадаетю К сожолении
у нас нет gdb работающего с gnat.
К статии, как долго длился acats tests ?
Viktor обротил мае внимание на то что на платформе Linux тесты длиться очень быстро.
Я проверил, действительно в Linux Mandrake 10.0 acats tests идеть очень очень быстро.

=== acats configuration ===
target gcc is /usr/src/gcc-3.4-20040507/objdir/gcc/xgcc -B/usr/src/gcc-3.4-20040507/objdir/gcc/
Reading specs from /usr/src/gcc-3.4-20040507/objdir/gcc/specs Configured with: ../configure --enable-languages=c,ada Thread model: posix gcc version 3.4.1 20040507 (prerelease)
host=i586-mandrake-linux-gnu
target=i686-pc-linux-gnu
gnatmake is /usr/src/gcc-3.4-20040507/objdir/gcc/gnatmake

GNATLS 3.4.1 20040507 (prerelease) Copyright 1997-2004 Free Software Foundation, Inc.
------------------------------------------------------------------------------------ ----
=== acats tests ===
Running chapter a ...
splitting /usr/src/gcc-3.4-20040507/objdir/gcc/testsuite/ada/acats/tests/a/a22006b.ada into:
a22006b.adb
BUILD a22006b.adb
....................
RUN a22006b

,.,. A22006B ACATS 2.5 04-05-13 22:54:12
---- A22006B CHECK USE OF HT IN AND OUT OF COMMENTS.
==== A22006B PASSED ============================.
PASS: a22006b
-------------------------------------------- --------------------------------------------
и последнее

BUILD la140272.adb
..........................
RUN la140272

,.,. LA14027 ACATS 2.5 04-05-13 23:12:03
---- LA14027 Check that a compilation unit may not depend semantically
on two different versions of the same compilation unit.
Check the case where a task body depends on non-generic
package specification.
==== LA14027 PASSED ============================.
PASS: la14027
=== acats Summary ===
# of expected passes 2321
# of unexpected failures 1
*** FAILURES: c954025
Тест длился 18 минут, а в QNX это свыше 10 часов

,.,. A22006B ACATS 2.5 04-03-07 22:55:24 <<<<=====================
---- A22006B CHECK USE OF HT IN AND OUT OF COMMENTS.
==== A22006B PASSED ============================.
PASS: a22006b
splitting /src/gcc-3.4-20040303/nto/ntox86/gcc/testsuite/ada/acats/tests/a/a22006c.ada into:
a22006c.adb
-----------------------------------------------------------------------------------------
BUILD la140272.adb
gnatmake --GCC="/src/gcc-3.4-20040303/nto/ntox86/gcc/xgcc -B/src/gcc-3.4-20040303/nto/ntox86/gcc/" -gnatws -I.....
gnatbind -aO./ -I/src/gcc-3.4-20040303/nto/ntox86/gcc/testsuite/ada/acats/support -I- -x la140272.ali
.................................
gnatlink la140272.ali --GCC=/src/gcc-3.4-20040303/nto/ntox86/gcc/xgcc -B/src/gcc-3.4-20040303/nto/ntox86/gcc/
RUN la140272

,.,. LA14027 ACATS 2.5 04-03-08 09:32:21 <<<<=====================

========================================================================================
Я начал изучать проблему. Посмотрите как получаеться время исполнения для QNX
,.,. A22006B ACATS 2.5 04-05-16 09:15:14 - 14 с
,.,. A22006C ACATS 2.5 04-05-16 09:15:28 - 15 с
,.,. A22006D ACATS 2.5 04-05-16 09:15:43 - 14 с
,.,. A26007A ACATS 2.5 04-05-16 09:15:57 - 14 с
,.,. A27003A ACATS 2.5 04-05-16 09:16:11 - 15 с
,.,. A29003A ACATS 2.5 04-05-16 09:16:26 - 14 с
,.,. A2A031A ACATS 2.5 04-05-16 09:16:40 - 14 с
,.,. A33003A ACATS 2.5 04-05-16 09:16:54 - 15 с и так далее
,.,. A34017C ACATS 2.5 04-05-16 09:17:09
,.,. A35101B ACATS 2.5 04-05-16 09:17:23
,.,. A35402A ACATS 2.5 04-05-16 09:17:37
,.,. A35801F ACATS 2.5 04-05-16 09:17:52
,.,. A35902C ACATS 2.5 04-05-16 09:18:06
,.,. A38106D ACATS 2.5 04-05-16 09:18:20
,.,. A38106E ACATS 2.5 04-05-16 09:18:35
,.,. A49027A ACATS 2.5 04-05-16 09:18:49
,.,. A49027B ACATS 2.5 04-05-16 09:19:03
,.,. A49027C ACATS 2.5 04-05-16 09:19:18
,.,. A54B01A ACATS 2.5 04-05-16 09:19:33
,.,. A54B02A ACATS 2.5 04-05-16 09:19:47
,.,. A55B12A ACATS 2.5 04-05-16 09:20:01
,.,. A55B13A ACATS 2.5 04-05-16 09:20:16
,.,. A55B14A ACATS 2.5 04-05-16 09:20:30
,.,. A71004A ACATS 2.5 04-05-16 09:20:44
,.,. A73001I ACATS 2.5 04-05-16 09:20:58
,.,. A73001J ACATS 2.5 04-05-16 09:21:13
,.,. A74105B ACATS 2.5 04-05-16 09:21:27
видно, что среднее время выполнения одного теста = 14 с. Число тестов 2322.
2322 * 14 с = 32508 с = 541.8 минут = 9.03 часов !!!!!!
Это действительно так и эсть на самом деле. К этому надо добовить еще где то 30-40 минут на другие
вспомагателные действия которые в Linux идут очень очеть быстро.

Для Linux Mandrake 10.0
,.,. A22006B ACATS 2.5 04-05-13 22:54:12
,.,. A22006C ACATS 2.5 04-05-13 22:54:12
,.,. A22006D ACATS 2.5 04-05-13 22:54:12
,.,. A26007A ACATS 2.5 04-05-13 22:54:13
,.,. A27003A ACATS 2.5 04-05-13 22:54:13
,.,. A29003A ACATS 2.5 04-05-13 22:54:13
,.,. A2A031A ACATS 2.5 04-05-13 22:54:13
,.,. A33003A ACATS 2.5 04-05-13 22:54:14
,.,. A34017C ACATS 2.5 04-05-13 22:54:14
,.,. A35101B ACATS 2.5 04-05-13 22:54:14
,.,. A35402A ACATS 2.5 04-05-13 22:54:14
,.,. A35801F ACATS 2.5 04-05-13 22:54:15
,.,. A35902C ACATS 2.5 04-05-13 22:54:15
,.,. A38106D ACATS 2.5 04-05-13 22:54:15
,.,. A38106E ACATS 2.5 04-05-13 22:54:15
,.,. A49027A ACATS 2.5 04-05-13 22:54:16
,.,. A49027B ACATS 2.5 04-05-13 22:54:16
,.,. A49027C ACATS 2.5 04-05-13 22:54:16
,.,. A54B01A ACATS 2.5 04-05-13 22:54:17
,.,. A54B02A ACATS 2.5 04-05-13 22:54:17
,.,. A55B12A ACATS 2.5 04-05-13 22:54:17
,.,. A55B13A ACATS 2.5 04-05-13 22:54:17
,.,. A55B14A ACATS 2.5 04-05-13 22:54:18
,.,. A71004A ACATS 2.5 04-05-13 22:54:18
,.,. A73001I ACATS 2.5 04-05-13 22:54:18
,.,. A73001J ACATS 2.5 04-05-13 22:54:18
,.,. A74105B ACATS 2.5 04-05-13 22:54:19
Как говорят = Ничего не скажеш.
Прошу заметить, что с этого что я представляю, не видно времени исполнения самого теста. А есть время
на которое складываеться -
1. время подготовки - каждый тест записан в файлах с оконьчанием .ada или .a. Компилятор gnat не работаеть
с такими файлами. Для этого существуеть спецялная утилита gnatchop - к примеру тест cxf2003 обрабатываеться так
gnatchop для cxf2003.a выдаеть

splitting /src/gcc-3.4-20040303/nto/ntox86/gcc/testsuite/ada/acats/tests/cxf/cxf2003.a into:
cxf2003_0.ads
cxf2003_0.adb
cxf2003_1.ads
cxf2003.adb

в QNX это можеть длиться даже 10-20 секунд. А ведь gnatchop только читаеть текстовой файл и создаеть
и пишет в текстовые файли. Видно что надо внимательно просмотреть и вероятно переписать библетеку
gnat I/O для QNX.

2. время сборки - BUILD cxf2003.adb
gnatmake .............
gnatbind .............
gnatlink .............

3. время исполнения - RUN cxf2003

,.,. CXF2003 ACATS 2.5 04-03-08 08:55:22
---- CXF2003 Check decimal multiplication and division, and 'Round,
where the operand types are different.
==== CXF2003 PASSED ============================.
PASS: cxf2003

Надо еще найти способ измерения времени сборки, а прежде всего время исполнения.
Может кто то занимался такими вопросами и сможеть что то подсказать.
У меня очень мало времени, и все длиться медленно.
Пока,
bogdan.
=============
Viktor
К стати я в Харькове учился 2 с половиной года в Инжинерно-Экономическом Институте, а потом
переехал в Киев в Университет. Но сегодня я думаю Харьков это другой город чем тот которой я помню.


Дата: 1 Июн,  14:45 · Поправил: vic

bbceler

Так что я решил использовать форум для ответа.

Спасибо за ответ. Почта действительно глючила страшно последние пару недель.

bbceler

К статии, как долго длился acats tests ?


Их выполнение заняло около 15 часов ( на машине Сeleron 667 MГц, 256 Mб), сравнивая твои и мои результаты прихожу к выводу, что длительность выполнения тестов в основном определяется не производительностью процессора, а скоростью дисковых операция

bbceler

К стати я в Харькове учился 2 с половиной года в Инжинерно-Экономическом Институте, а потом
переехал в Киев в Университет. Но сегодня я думаю Харьков это

Знаем такой, этот институт находится метрах в трехстах от нашего офиса. Я тоже думаю, что очень изменился, даже за те 11 лет, что я в Харькове многое поменялось.


Виктор


Дата: 1 Июн,  15:40

bbceler
К стати я в Харькове учился 2 с половиной года в Инжинерно-Экономическом Институте, а потом
переехал в Киев в Университет. Но сегодня я думаю Харьков это другой город чем тот которой я помню.


А когда и на каком факультете учились? Я там три года прораьотал на ВЦ


Дата: 2 Июн,  08:03

to vic & bbceler :

Их выполнение заняло около 15 часов ( на машине Сeleron 667 MГц, 256 Mб), сравнивая твои и мои результаты прихожу к выводу, что длительность выполнения тестов в основном определяется не производительностью процессора, а скоростью дисковых операция

Viktor обротил мае внимание на то что на платформе Linux тесты длиться очень быстро.
Я проверил, действительно в Linux Mandrake 10.0 acats tests идеть очень очень быстро.


Не может ли быть связана такая разница с тем, что в Linux gnat работает со swap (т.е. там всё так работает), а собранный вами gcc (gnat) - без разрешения свопировать данные, которое в QNX нужно заказывать специально. И тогда gnat крутится в ограниченной памяти...

Где-то в QSSL упоминалось, что разрешение свопирования данных было введено, одним из 1-х пунктов где это потребовалось - для работы компилятора gcc.

Сравните скорости исходного gcc в поставке QNX, со скоростью вами собранного gcc, но на компиляции С/С++ кода (естественно, gcc нужно тогда чтоб был собран с поддержкой помимо Ada и C/C++).


Дата: 11 Июл,  16:58

Приветь.
Я собрал компилятор GCC 3.4.0 и GCC 3.4.1 для QNX 6.3 и провел тесты.
Тестирование длилось 45 - 49 минут, что на 9 часов менше чем на QNX 6.2.1.
На сайт http://www.ajam.republika.pl/ я выложил gnat-3.4.1-x86-public-qnx63.tar.bz2.
Я провел тоже исследования на счеть сравнения скорости между QNX а Linux.
Вот для Linux Mandrake 10.0
==================================================
./time_once /usr/local/bin/gnatmake -O3 -fomit-frame-pointer -gnatpN --GNATBIND=/usr/local/bin/gnatbind
--GNATLINK=/usr/local/bin/gnatlink main > Komp3.log
Start excecution...
Excution result
---------------
Overhead time is 0.009806000
Test run 1.283709000
Result is 1.273903000 => длина компиляции

./time_many ./main >> Komp3.log
Start excecution...
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.26
Dhrystones per second: 3905885.25
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.27
Dhrystones per second: 3762977.50
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.26
Dhrystones per second: 3782709.00
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.26
Dhrystones per second: 3903031.75
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.26
Dhrystones per second: 3901166.50
Excution results
----------------
Overhead time is 0.006868000
Test run 1 2.567513000
Test run 2 2.664853000
Test run 3 2.651003000
Test run 4 2.569497000
Test run 5 2.570724000
Average results is 2.597850000 => средная длина выполнения

=====================================================================

А для QNX 6.3

=====================================================================
./time_once gnatmake -O3 -fomit-frame-pointer -gnatpN main > Wynik.log
Start excecution...
Excution result
---------------
Overhead time is 0.000000000
Test run 8.197745553
Result is 8.197745553 => длина компиляции

./time_many ./main >> Wynik.log
Start excecution...
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.28
Dhrystones per second: 3566879.50
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.28
Dhrystones per second: 3582210.00
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.28
Dhrystones per second: 3550418.75
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.28
Dhrystones per second: 3586063.25
Dhrystone Benchmark, Version 2.1 (Language: Ada)
Execution starts, 10000000 runs through Dhrystone
Execution ends
Microseconds for one run through Dhrystone: 0.28
Dhrystones per second: 3584777.75
Excution results
----------------
Overhead time is 0.000999847
Test run 1 2.814569305
Test run 2 2.802571141
Test run 3 2.826567469
Test run 4 2.800571447
Test run 5 2.799571600
Average results is 2.807770345 => средная длина выполнения

=====================================================================

Ддя QNX 6.2.1 результат средная длина выполнения Average results is 2.815169213 практически одинаковы с QNX 6.3.
Только длина компиляции Result is 23.231445045 значительно болше.


Дата: 8 Сен,  16:37

Приветь всем.
Я собрал компилятор gnat 3.4.2 и выложил на сайт http://www.ajam.republika.pl/ - gnat-3.4.2-x86-public-qnx63.tar.bz2.
Тестирование длилось 44 минуты.
=== acats Summary ===
# of expected passes 2322
# of unexpected failures 0
bogdan.


Дата: 9 Сен,  04:43

Тормоза с работой GCC (и в частности ADA) в QNX 6.2.* вызваны, скорее всего, наличием fs-pkg - т.н. файловой системой пакетов. В 6.3.0 таких тормозов не должно быть по причине отсутствия их источника.

А вообще такие вопросы надо выяснять профайлером. Т.е. надо погонять программу в профайлере и посмотреть, где конкретно тормозит.

Можно вопрос из оффтопика?
Богдан судя по всему из Польши (я сужу по адресу http://www.ajam.republika.pl/). Как вы, Богдан, можете отозваться о польском портале QNX - http://www.qnx.org.pl/ ?


Дата: 20 Сен,  15:02

[quote=AG][/quote]
В QNX 6.3 процесс компилации програм ады идеть быстро. Однако не хватаеть gdb.
На счеть польского портала QNX - http://www.qnx.org.pl/ могу только сказать, что он находиться на раннем стадии. Я пока не имею к нему никокого отношения.


Дата: 31 Мар,  11:50

При установке gnat-3.4-x86-public.qpr инсталлятор запросил файл libintl.so.4 . Где его искать и с чем его едят?


Дата: 31 Мар,  12:00

s_kSubj
Где его искать и с чем его едят?

PublicCD от QNX 6.2.1, пакет gettext.


Дата: 31 Мар,  12:37

Спасибо.. буду пробовать..


Дата: 31 Мар,  14:55

Последний запросил файл libiconv.so.2 .
Выхожу на второй виток, где его искать?
У меня CD то нету, софт качаю с нета, ручками из под винды (модем блин софт), так что не могли бы вы описать что еще может потребоваться.
И еще, gcc ругается, что Ada компилятор не установлен в этой системе. Я как бы мало еще чего понимаю, можно ли объяснить популярно что к чему, как настроить, как компилить. А ADA мне действительно очень интересен...


Дата: 31 Мар,  15:00

Ага, libiconv нашел (из одноименного пакета если не ошибаюсь).
Тревожит сообщение gcc насчет отсутствия компилятора..


Дата: 31 Мар,  18:17 · Поправил: s_kSubj

Тээк, все настроил, можете небеспокоиться насчет ликбезов.
Для тестирования выбрал зубочистку, которую еще месяц назад писал. Представляет из себя календарик по принципу бумажных табличных календариков на 1900-2039гг(мож видели). На всякий случай сюда выложу, мож пригодится кому ;) :

<

---------------------------------------------
-- Project: Calendar 1900-2039
-- Description: Main module
-- Copyright (c) 2005 by Subj (subj@bk.ru)
-- File: scalendar.adb
-- Programming Language: ADA95
-- 01.03.2005
---------------------------------------------
with Ada.Text_Io;
with Ada.Integer_Text_Io;
with Calculus;
use Ada.Text_Io;
use Ada.Integer_Text_Io;
procedure SCalendar is
Answer : String := "N";
Year : Calculus.AYear;
Month : Calculus.AMonth;
Date : Calculus.ADate;
begin
Calculus.Create;
-- Main Loop
loop
-- Input Year
loop
declare
Y : Calculus.AYear;
begin
Put("Write Year(1900-2039): ");
Get(Y);
Year := Y;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1900 and 2039");
end;
end loop; -- Input Year
-- Input Month
loop
declare
M : Calculus.AMonth;
begin
Put("Write Month(1-12): ");
Get(M);
Month := M;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1 and 12");
end;
end loop; -- Input Month
-- Input Date
loop
declare
D : Calculus.ADate;
begin
Put("Write Date(1-31): ");
Get(D);
Date := D;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1 and 31");
end;
end loop; -- Input Date
Put(Integer'Image(Year) & " :" & Integer'Image(Month) & " :" & Integer'Image(Date) & " > ");
Put_Line(Calculus.GetDay(Year, Month, Date));
Put("Press Q (q) - key for EXIT program or any key for REPEAT: ");
Get(Answer);
exit when (Answer = "Q") or (Answer = "q");
end loop; --Main Loop
exception
when Data_Error =>
null; -- when not integer
when others =>
null; --when xren znat chto
end SCalendar;

<

---------------------
-- File Calculus.ads
---------------------
package Calculus is
subtype AYear is Integer range 1900..2039;
subtype AMonth is Integer range 1..12;
subtype ADate is Integer range 1..31;
-----------------------------------------------------------------------------
procedure Create;
-----------------------------------------------------------------------------
function GetDay(CYear : AYear; CMonth : AMonth; CDate : ADate) return String;
-----------------------------------------------------------------------------
end Calculus;

<

---------------------------------------------
-- Project: Calendar 1900-2039
-- Description: Calculus Day
-- Copyright (c) 2005 by Subj (subj@bk.ru)
-- File: Calculus.adb
-- Programming Language: ADA95
-- 01.03.2005
---------------------------------------------
package body Calculus is
S : String := "UP";
BaseDays : array(1..7) of String(1..2) :=
("MO", "TU", "WE", "TH", "FR", "SA", "SU");
BaseMonths : array(1..7, 1..3) of Integer :=
(((200),(3),(11)),
((201),(8),(0)),
((5),(0),(0)),
((100),(10),(0)),
((101),(4),(7)),
((9),(12),(0)),
((6),(0),(0)));
Years : array(1..25, 1..7) of Integer;
Months : array(1..7, 1..7, 1..3) of Integer;
Dates : array(1..5, 1..7) of Integer;
Days : array(1..7, 1..7) of String(1..2);
Table : array(1900..2039, 1..12, 1..31) of String(1..2);
-----------------------------------------------------------------------------
procedure Create is
--------------------------------------------------------------------------
procedure FillTable is
tempY1 : Integer := 1900;
tempY2,
tempM,
tempDat,
tempDay,
tempT1,
tempT2,
tempT3 : Integer := 0;
--------------------------------------------------------------------------
function SearchLine(YMD, Y, M, D : Integer) return Integer is
R : Integer;
begin
case YMD is
when 1 =>
for i in 1..25 loop
for j in 1..7 loop
if Years(i, j) = Y then
R:=j;
exit;
end if;
end loop;
end loop;
when 2 =>
for i in 1..7 loop
for k in 1..3 loop
if Months(i, Y, k) = M then
R:=i;
exit;
end if;
end loop;
end loop;
when 3 =>
for i in 1..5 loop
for j in 1..7 loop
if Dates(i, j) = D then
R:=j;
exit;
end if;
end loop;
end loop;
when others => R:=0; --It's Unreal, but nado
end case;
return R;
end SearchLine;
--------------------------------------------------------------------------
begin
-- Years
for i in 1..25 loop
for j in 1..7 loop
tempY2 := tempY2+1;
if tempY2 > 4 then
tempY2 := 0;
Years(i, j) := 0;
else
Years(i, j) := tempY1;
tempY1 := tempY1+1;
end if;
end loop;
end loop;
-- Months
for i in 1..7 loop
for j in 1..7 loop
for k in 1..3 loop
tempM := i-1+j;
if tempM > 7 then
tempM := tempM-7;
end if;
Months(i, j, k) := BaseMonths(tempM, k);
end loop;
end loop;
end loop;
-- Dates
for i in 1..5 loop
for j in 1..7 loop
if (i = 1) and (j in 1..4) then
Dates(i,j) := 0;
else
tempDat := tempDat+1;
Dates(i, j) := tempDat;
end if;
end loop;
end loop;
-- Days
for i in 1..7 loop
for j in 1..7 loop
tempDay := i-1+j;
if tempDay > 7 then
tempDay := tempDay-7;
end if;
Days(i, j) := BaseDays(tempDay);
end loop;
end loop;
-- Table
for i in 1900..2039 loop
for j in 1..12 loop
for k in 1..31 loop
tempT1 := j;
if ((i rem 4 = 0) and (i rem 100 /= 0)) or (i rem 400 = 0) then
if tempT1 = 1 then
tempT1 := 101;
elsif tempT1 = 2 then
tempT1 := 201;
end if;
else
if tempT1 = 1 then
tempT1 := 100;
elsif tempT1 = 2 then
tempT1 := 200;
end if;
end if;
tempT2 := SearchLine(1, i, 0, 0);
tempT2 := SearchLine(2, tempT2, tempT1, 0);
tempT2 := 7-tempT2+1;
tempT3 := SearchLine(3, 0, 0, k);
Table(i, j, k) := Days(tempT2, tempT3);
if ((tempT1 = 200) and (k > 28)) or ((tempT1 = 201) and (k > 29)) then
Table(i, j, k) := S;
end if;
if ((j = 4) or (j = 6) or (j = 9) or (j = 11)) and (k > 30) then
Table(i, j, k) := S;
end if;
end loop;
end loop;
end loop;
end FillTable;
--------------------------------------------------------------------------
begin
FillTable;
end Create;
-----------------------------------------------------------------------------
function GetDay(CYear : AYear; CMonth : AMonth; CDate : ADate) return String is
begin
return Table(CYear, CMonth, CDate);
end GetDay;
-----------------------------------------------------------------------------
end Calculus;

Думаю за место Hello world можно будет применять для тестирования.. :)


Дата: 1 Апр,  16:05

Кстати, запустив стандартный Solitaire (Games) можно увидеть следующее:
карта Король крести - C. Babbage
Дама крести - Ada Byron
и соответственно портреты ...


Дата: 1 Апр,  20:25

s_kSubj
карта Король крести - C. Babbage
Дама крести - Ada Byron
и соответственно портреты ...


Да, народ в КУСС шутить изволил... А солитёрчик красивый вышел...


Дата: 15 Июл,  07:58 · Поправил: Wlad

Народ!

Каково состояние дел и общий настрой по данной теме?
Реально кто-нибудь выполняет(-нял) проекты на сём соединении (QNX + Ada)? Я имею в виду чего-нибудь по-сложнее хеллоууорлда... :о)


Дата: 18 Июл,  08:51

Ну что ж, видать - никакого настроя? Всё - "на шесть часов"?


Дата: 18 Июл,  12:24 · Поправил: s_kSubj

А я вот так и не смог импортировать функцию in8 и ей подобные.
Вполне законный вопрос возник, хотя к данной тематике это не имее отношения, казалось бы, но мысля глубже, еще как имеет.
Если я сам напишу некую функцию на С, свою, то как ее импортировать в Ада програму? То есть как организовать исходные файлы, где что прописать, чтобы "Pragma Import" сработал?
Допустим есть файла: f.c, в нем есть функция:
int myf(){
return 5;
}
и хочу, чтобы в Ада программе она работала, примерно так:
with ada.Text_IO;
use ada.Text_IO;
procedure t is
function c_fync return Integer;
pragma import( C, c_fync, "myf" );
i:integer;
begin
i:=c_fync;
ada.Text_IO.Put_Line(integer'image(i));
end t;
Где, что и как нужно доделать/доработать?
Пытался сделать через extern int myf(); , но чтот ни в какую...


Дата: 18 Июл,  16:38

Вот пример как импортировать функцию на С в Ада програму.

--- imported_function.c ----
#include <stdio.h>
imported_function ()
{
printf (" I am now in the imported function "[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
}

--- use_of_import.adb ---
procedure Use_Of_Import is
procedure Imported_Function;
pragma Import (C, Imported_Function, imported_function"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
begin
Imported_Function;
end Use_Of_Import;

сначала нада
gcc -c -o imported_function.o imported_function.c
а потом
gnatmake use_of_import -cargs -O2 -largs imported_function.o
и получаем
./use_of_import
I am now in the imported function


Дата: 18 Июл,  18:02

А вот состояние дел по данной теме следующие:
на сегодня имеем трее линии компилятора gcc - gcc 3.4, gcc 4.0 и gcc 4.1.
Последние стабилные версии это gcc 3.4.4, gcc 4.0.1. В линии gcc 4.1 пока нет стабилной версии.
Об gcc 4.0.0 лучше забыть. Я собрал все компиляторы стабилные gnat 3.4.4, gnat 4.0.1 и нестабилный gnat 4.1.
С точки зрения Ады gnat 3.4.4 и следующий gnat 3.4.5 не изменяеться.
gnat 4.0.1 а прежде всего gnat 4.1 имееть много изменений. Гороздо улучшена обработка ошыбок во время компилации.
Вводяться новые языковые конструкции с Ada 2005. Но имееться определенные трудности связанные с проблемой оптимализации.
И так надо осторожно проверять как будеть вести себе програма если будемь компилировать используя -О2 или -О3.
Программа может вести себя иначе в зависимости от того используем -О0, -О1 или -О2. К стати gnat 4.1 помогаеть обнаруживать
такие опасные места в программе и выдаеть сообшения как их обойти.
Мне удалось тоже скомпилировать ASIS используя gnat 3.4.5, он должен работать тоже с gnat 3.4.4.
Я сегодня или завтра должен положыть ASIS и gnat 4.1 на http://www.ajam.republika.pl. Там можна взять gnat 3.4.4 и gnat 4.0.1.
Ко мне обратились с германии и испании, в связи с использованнем Ады в QNX, к сожалении как обстоить дело на сегодня мне
не известно. А я пока практически занимаюсь только самим компилятором.


Дата: 19 Июл,  10:17 · Поправил: s_kSubj

bbceler
Вот пример как импортировать функцию на С в Ада програму....

Я был близок
Можно в качестве проекта, того что по сложнее хеллоуворлда, написать библиотеку, то есть оболочку к функциям API QNX. Здесь правда важнее шаблон сообразить наверное будет...


Дата: 26 Сен,  18:04

"Вышла новая публичная версия компилятора GNAT: GNAT GPL Edition. Компилятор поддерживает некоторые возможности из грядущего стандарта Ада 2005. В комплекте с компилятором идут новые версии GPS, AWS, PolyORB и другого ПО. Отличительной особенностью данной версии является поставка библиотек под лицензией GPL. Это налагает запрет на компилирование программ под лицензией, отличной от GPL."
Я это взял с сайта http://www.ada-ru.org/ ( чтобы было быстрее ).
Новый компилатор gnat-gpl-2005 базируеть на gcc 3.4.5, но он очень отличаетсья от компилатора gnat 3.4.5 в котором нет вообше
никаких элементов стандарта Ада 2005. С первого взгляда видно, что gnat 4.1.0 имееть много обшего с gnat-gpl-2005. Достаточно
сказать что в источниках gnat-gpl-2005 нет одного файла и я его нашел в источниках gnat 4.1.0.
Я собрал gnat-gpl-2005 используя сами последние сорсы - gcc-3.4-20050920. Компилятор проходить тесты acats 2.5 с результатом
=== acats tests === ( -O2 )
=== acats Summary ===
# of expected passes 2318
# of unexpected failures 4
*** FAILURES: c352001 c52103x cxb3006 cxb3012
сам gnat 3.4.5 проходить эти тесты без ошибок, так что думаю что надо тшательно просмотреть эти тесты и сравнить библетеки
gnat-gpl-2005 с gnat 4.1.0. Пока не известно какая будеть стратегия Ada Core в отношени к gnat-gpl-2005. Изменения будуть доступные
или так как в случае gnat 3.15 надо было ждать три года.
С gnat-gpl-2005 доступне очень интересные программы примеры которые показывають новые возможности языка.
Компилятор gnat-gpl-2005 можно скачать с http://www.ajam.republika.pl а сам gnat-gpl-2005 смотрите на https://libre2.adacore.com/GNAT


Дата: 26 Мар,  21:20

Привет всем.
На сегодня имеем следуюшие компилаторы gnat для QNX 6.3.
1. gnat-GPL2005 основан на gcc3.4.5 или gcc3.4.6 - gnat3.4.5/gnat3.4.6.
К стати кажется что на gcc3.4.6 окончилась линия gcc3.4*.
2. gnat4.0.3 - эта версия практически не поддерживаеть ada 2005
3. gnat4.1.0 - эта версия очень похожа на gnat-GPL2005 но во первых
gnat4.1.0 проходить тесты acats но только с ключом -O0. Но если взять -O2 или -O3
то некоторые тесты не проходят. Тоже самое происходить с gnat4.1.1.
Этого нет с gnat-GPL2005 который проходить тесты acats с -O3.
Во вторых с gnat-GPL2005 есть много примеров относящихся к новому стандарту
ada 2005. gnat3.4.5/gnat3.4.6 компилируеть все эти примеры, а gnat4.1.0 и gnat4.1.1
нет.
4. gnat4.2.0 - к сожалени у меня эсть только одна версия которую удалось скомпилировать.
Похожие проблемы были с gnat4.1 - не удается пройти вторую стадию постройки
компилятора.
Тепер компилаторы для QNX 6.3 доступны под http://www.ajam.org.pl


Дата: 26 Мар,  21:38

И еще одно. Теперь gnat3.4.6 и gnat4.1.0 работають с addr2line, gprof и gnatmem.
Эсли хотите использовать gdb, то лучше вместо -g использовать -gstabs.


Дата: 10 Июл,  11:58

Новая публичная версия компилятора GNAT: GNAT GPL 2006 уже доступна на
сайте http://www.ajam.org.pl/ - gnat-GPL2006-x86-qnx6.3.tar.bz2.
Там я поместил тоже новый gdb6.4-GnatGPL2006-qnx6.3.
Он даеть возможность вести debugging задач языка ада.
И думаю очень важно что тепер компилятор gcc даеть правилную информацию
для gdb. К примеру так выглядить работа с дебаггером
==========================================================
prg4.adb
......................................
WITH Ada.Text_IO;
PROCEDURE Start_Buttons IS
------------------------------------------------------------------------
--| Show the declaration of a simple task type and three
--| variables of that type. The tasks use DELAYs to cooperate.
--| "Start button" entries are used to to control starting order.
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: December 1995
------------------------------------------------------------------------
TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
-- This specification provides a "start button" entry.
ENTRY StartRunning;
END SimpleTask;

TASK BODY SimpleTask IS

BEGIN -- SimpleTask
-- The task will "block" at the ACCEPT, waiting for the "button"
-- to be "pushed" (called from another task, Main in this case).
ACCEPT StartRunning;
FOR Count IN 1..HowMany LOOP
Ada.Text_IO.Put(Item => "Hello from Task " & Message);
Ada.Text_IO.New_Line;
DELAY 0.1; -- lets another task have the CPU
END LOOP;
END SimpleTask;

-- Now we declare three variables of the type
Task_A: SimpleTask(Message => 'A', HowMany => 5);
Task_B: SimpleTask(Message => 'B', HowMany => 7);
Task_C: SimpleTask(Message => 'C', HowMany => 4);

BEGIN -- Start_Buttons
-- Tasks will all start executing as soon as control
-- reaches this point, but each will block on its ACCEPT
-- until the entry is called. In this way we control the starting
-- order of the tasks.
Task_B.StartRunning;
Task_A.StartRunning;
Task_C.StartRunning;
END Start_Buttons;
...........................................
#gnatmake -g prg4
#gdb prg4

GNU gdb 6.4 for GNAT Pro 2006 (20060522)
Copyright 2005 Free Software Foundation, Inc.
Ada Core Technologies version of GDB for GNAT Professional
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
This GDB was configured as "i386-pc-nto-qnx6.3.0"...
(gdb) start
Breakpoint 1 at 0x80517df: file prg4.adb, line 2.
Starting program: /src/Temp/prg4
start_buttons () at prg4.adb:2
2 PROCEDURE Start_Buttons IS
(gdb) info tasks
ID TID P-ID Pri State Name
1 808f020 0 31 Runnable main_task
(gdb) info threads
1 process 1921107 start_buttons () at prg4.adb:2
(gdb) l
2 PROCEDURE Start_Buttons IS
3 ------------------------------------------------------------------------
4 --| Show the declaration of a simple task type and three
5 --| variables of that type. The tasks use DELAYs to cooperate.
6 --| "Start button" entries are used to to control starting order.
7 --| Author: Michael B. Feldman, The George Washington University
8 --| Last Modified: December 1995
9 ------------------------------------------------------------------------
10
11 TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
(gdb) n
11 TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
(gdb)
18 TASK BODY SimpleTask IS
(gdb)
35 Task_A: SimpleTask(Message => 'A', HowMany => 5);
(gdb)
36 Task_B: SimpleTask(Message => 'B', HowMany => 7);
(gdb)
37 Task_C: SimpleTask(Message => 'C', HowMany => 4);
(gdb)
2 PROCEDURE Start_Buttons IS
(gdb)
46 Task_B.StartRunning;
(gdb) info threads
4 process 1921107 0xb032e9f9 in SyncCondvarWait_r ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
3 process 1921107 0xb032e9f9 in SyncCondvarWait_r ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
2 process 1921107 0xb032e9f9 in SyncCondvarWait_r ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
1 process 1921107 start_buttons () at prg4.adb:46
(gdb) info tasks
ID TID P-ID Pri State Name
1 808f020 0 31 Runnable main_task
2 808e6f8 1 31 Accept Statement task_a
3 808b7c0 1 31 Accept Statement task_b
4 808b0a0 1 31 Accept Statement task_c
(gdb) n
47 Task_A.StartRunning;
(gdb) info tasks
ID TID P-ID Pri State Name
1 808f020 0 31 Runnable main_task
2 808e6f8 1 31 Accept Statement task_a
3 808b7c0 1 31 Runnable task_b
4 808b0a0 1 31 Accept Statement task_c
(gdb) info hreads
4 process 1921107 0xb032e9f9 in SyncCondvarWait_r ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
3 process 1921107 0xb031ade2 in pthread_mutex_unlock ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
2 process 1921107 0xb032e9f9 in SyncCondvarWait_r ()
from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
1 process 1921107 start_buttons () at prg4.adb:47
(gdb) n
48 Task_C.StartRunning;
(gdb)
50 END Start_Buttons;
(gdb)
Hello from Task A
Hello from Task C
Hello from Task B
.................
Hello from Task A
Hello from Task B
Hello from Task B
Hello from Task B
main (argc=1, argv=(system.address) 0x8047a0c, envp=(system.address) 0x8047a14)
at b~prg4.adb:199
199 Do_Finalize;
(gdb) info threads
1 process 1921107 main (argc=1, argv=(system.address) 0x8047a0c,
envp=(system.address) 0x8047a14) at b~prg4.adb:199
(gdb) info tasks
ID TID P-ID Pri State Name
1 808f020 0 31 Runnable main_task
(gdb) n
200 Finalize;
(gdb)
201 return (gnat_exit_status);
(gdb)
.................................
Program exited normally.
(gdb) q


Дата: 10 Июл,  12:04

bbceler ваши сборки из любви к искусству или для реальных проектов?

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source