Ada_Ru форум

Обсуждение языка Ада

немного офтопика :)

Оставить новое сообщение

Сообщения

Vladimir Teplouhov
немного офтопика :)
2007-05-16 14:55:14

Hello.

 

немного офтопика - поприкалываться...

 

Седня все утро "развлекался" написанием багрепортов...

Сразу одно чудо на жабе парило мозги с бровзером(причем

не просто "не тот типа бровзер под который мы писали", а

типа нету говорит жабы там, и все. Ага. Она включена и все другие

сайты работали - офигенная совместимость в реализациях значит),

потом еще мотало нервы и траффик - после обрыва соединения с инетом

показывает пустую страницу, как так и надо, хоть бы ошибку

писало чтоли или что ей надо...

Потом попалось нечто на микрософтовской жабе, которая .net

Вот это просто пестня - эта зато ошибки таки писала(правда

вместо того чтобы работать), да мнооого ;) Вот, приколитесь,

такого винегрета из бейсика, обработчиков прерываний и еще

хрен знает чего даже специально придумать трудно на конкурс

на самую извратную программу :)

(C# программеры говорят что ошибка элементарная - забыли

присвоть значение, либо написать обработчик для нул значений,

оно и обработало как умеет :) )

То-то я все раньше удивлялся - почему когда зайдешь на какую-нить

страницу с расширением .asp, потом часто это все кончалось

необходимостью перезагрузки по reset... (Два глюка пара :)

Если IE не нашел файл - то все, жми ресет, проверено :)

Но столько матов по пустякам я еще не видел :) )

 

Vladimir

PS кстати, вот и проект на базе BF/uClinux нашелся...

http://www.rowetel.com/ucasterisk/index.html

 

а вот и оно - вестч, мне давно такого изврата в коллекцию не попадалось :)

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

Server Error in '/' Application.

Cast from type 'DBNull' to type 'String' is not valid.

Description: An unhandled exception occurred during the execution

of the current web request. Please review the stack trace for more

information about the error and where it originated in the code.

 

Exception Details: System.InvalidCastException: Cast from type 'DBNull'

to type 'String' is not valid.

 

Source Error:

 

An unhandled exception was generated during the execution of the current

web request. Information regarding the origin and location of the exception

can be identified using the exception stack trace below.

 

Stack Trace:

 

[InvalidCastException: Cast from type 'DBNull' to type 'String' is not valid.]

Microsoft.VisualBasic.CompilerServices.StringType.FromObject(Object

Value) +616

ViewProfile.join.Button1_Click(Object sender, EventArgs e) in

Y:\WebFolders\VOP_Russia\members\join.aspx.vb:1201

System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String

eventArgument) +58

System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler

sourceControl, String eventArgument) +18

System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33

System.Web.UI.Page.ProcessRequestMain() +1292

 

Version Information: Microsoft .NET Framework Version:1.1.4322.2379;

ASP.NET Version:1.1.4322.2379

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

17.05.07, aLTer<vladimir.alter@gmail.com> написал(а):

> немного офтопика - поприкалываться...

Свои две копейки, хотя это и не совсем offtopic...

 

Занимаясь математическим моделированием неких процессов часть

матобеспечения с год назад с Си++ переписал на Аде. Всё вроде-бы

стыковалось с сносно работало, если бы не заметные невооружённым

глазом различия в скорости выполнения одних и тех же вычислений (на

том же оборудывании) старой (Си++) и новой реализации (Ада).

 

При замерах оказалось, что скорость выполнения на Си++ оказалась

примерно в несколько десятков раз быстрее (при сборке реализации была

включена оптимизация и выключены все проверки времени исполнения).

Сборка производилась gnat'ом (GAP'овским или GCC'шным, точно не помню,

возможно обоими) и g++ соответственно.

 

Всё это несколько озадачило, с тех пор вычислительные методы были

обратно переведены на Си++-реализацию.

 

а что сразу отладчиком не глянул в чем там разница?

 

Vladimir

а что сразу отладчиком не глянул в чем там разница?

Я глянул на машииный код обоих вариантов, в Си++-варианте в целом

прослеживается первоначальный исходный смысл. В Адском варианте - кода

значительно больше и уловить что там и зачем не получилось.

aLTer wrote:

а что сразу отладчиком не глянул в чем там разница?

 

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

 

Скорее всего си компилер был поновее, а Ада была 3.15p

со старым бекендом.

George Shapovalov wrote:

 

> Занимаясь математическим моделированием неких процессов часть

> матобеспечения с год назад с Си++ переписал на Аде. Всё вроде-бы

> стыковалось с сносно работало, если бы не заметные невооружённым

> глазом различия в скорости выполнения одних и тех же вычислений (на

> том же оборудывании) старой (Си++) и новой реализации (Ада).

 

Ничего подобного не наблюдал, да и был бы удивлен, в конце концов бэкэнд то

один используется. В данном случае буквальная трансляция проста и ведет себя

точно так же:

 

Различие в скорости в *десятки раз* указывает на алгоритмические проблеммы.

 

Эти примеры на C++ и Ada не очень удачны, поскольку после

заполнения массива p его элементы в дальнейшем не участвуют

в вычислениях с сайд-эффектами. Хороший оптимизатор в данном

случае может полностью выбросить те два вложенных цикла,

и будет прав. Давайте уж сравним ассемблерный код для того

и другого примера (-S).

17.05.07, Dmitriy Anisimkov<anisimkov@ada-ru.org> написал(а):

aLTer wrote:

>> а что сразу отладчиком не глянул в чем там разница?

>>

> Я глянул на машииный код обоих вариантов, в Си++-варианте в целом

> прослеживается первоначальный исходный смысл. В Адском варианте - кода

> значительно больше и уловить что там и зачем не получилось.

>

Скорее всего си компилер был поновее, а Ада была 3.15p

со старым бекендом.

 

врядли разница может быть в разы

 

скорее всего что-то с типами и сопроцессором

 

Vladimir

PS кстати, по особенностям платформ думаю надо тоже сделать

что-то, темы или вики, собирать туда всю инфу, иначе с этими косяками

даже не знаю как бороться если все тонкости платформ не знаешь...

George Shapovalov wrote:

$gnatmake ../cmp_integr.adb -cargs -O3 -fomit-frame-pointer -bargs -shared -largs -s

$ g++ ../cmp_integr.cpp -O2 -fomit-frame-pointer -o cmp_integr

 

Хм, легкая подтасовка результатов. :-) gnatmake оптимизирован по -O3, а g++ по -O2. :-)

 

-- Olleg Samoylov

Thursday, 17. May 2007, Olleg Samoylov Ви написали:

George Shapovalov wrote:

$gnatmake ../cmp_integr.adb -cargs -O3 -fomit-frame-pointer -bargs -shared -largs -s $ g++ ../cmp_integr.cpp -O2 -fomit-frame-pointer -o cmp_integr

>

Хм, легкая подтасовка результатов. :-) gnatmake оптимизирован по -O3, а g++ по -O2. :-)

А, прошу прощения, не то скопировал. Пробовал и так и так, никакой разницы это

не дало.

George

Причем здесь gnat использовался 2006 от AdaCore (конкретно

gnat-gpl-3.4.6.2006-r1 в Gentoo), на 3.4.6 gcc backendе, а g++ из gcc-4.1.2.

Так что разница в времени выполнения скорее вего из за разницы в бэкэндах (4.1

оптимизирует несколько лучше). Ада вариант прилагаю.

Спасибо большое, действительно, разница в скорости небольшая.

На досуге попробую разобраться в чём могло быть дело.

На всякий случай модифицирую ада-код под старый вид, т.к. помню,

реализация визуально выглядела иначе.

Thursday, 17. May 2007, aLTer Ви написали:

Занимаясь математическим моделированием неких процессов часть

матобеспечения с год назад с Си++ переписал на Аде. Всё вроде-бы стыковалось с сносно работало, если бы не заметные невооружённым глазом различия в скорости выполнения одних и тех же вычислений (на том же оборудывании) старой (Си++) и новой реализации (Ада).

Кстати, прямо сейчас на comp.lang.ada идет обсуждение сходной тематики. Очень советую посмотреть. Thread "GNAT Optimization of Constant Expressions". Вот цитата оттуда, которая может пролить свет на еще некоторые особенности:

Keep in mind that floating point optimization is very hard; most of the typical optimizations that you do on integer types would change the result of a floating point expression. And, if those are carefully crafted numerical expressions, the "optimization" could actually cause the code to fail.

One example is:

Y := (X - 0.5) - 0.5;

You might think that replacing this with

Y := X - 1.0;

would be a good idea, but actually it reduces the accuracy of the result -- which is probably the reason that the programmer wrote the above in the first place. Similarly, changing

X + (Y + Z) into (X + Y) + Z can change the accurracy a lot.

The net effect is, with a truly good compiler, you have to write the floating point expression that you mean and expect limited optimizations. Either that or decide you don't care about accuracy (which is how C compilers tend to handle this). I know that Gnat worries about these issues a lot (I've heard Robert Dewar talk about them on many occassions).

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти