Перейти к содержимому

Фотография

DelphiВопросы по дельфи


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 96

#81
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

> несогласен,вариантов решения конечное число.

Допустим нужно написать a + b

z := a + b;
z := (a) + (b);
z := (a + b) - b + b;

z := (a + b) - b + b - b + b итд, тупо но конечный результат будет правильным.

Забыли

z = a;z += b;

z := (a + b) - b + b - b + b итд, тупо но конечный результат будет правильным.

Угу. int i = 5; i = ++i + ++i; cout<<i - помните такое? :-)
  • 0

#82
xxel

xxel
  • Завсегдатай
  • 146 сообщений

> несогласен,вариантов решения конечное число.

Допустим нужно написать a + b

z := a + b;
z := (a) + (b);
z := (a + b) - b + b;
z := (a + b) - b + b - b + b итд, тупо но конечный результат будет правильным.

В терминах AST после свертки все перечисленое и даже такое
z := (a + b) - b + b +70 - 35 * 2 - (b + a) * 0
будет выглядеть одинакого
==> z := a + b;
Т.е. всего одним вариантом
  • 0

#83
xxel

xxel
  • Завсегдатай
  • 146 сообщений

Забыли
z = a;z += b;

Это хоть и С, а не паскаль, но тоже формализуется в AST

... cout ....

А это уже не С, посему не формализуется

ООП вообще не поддается автоматической проверке на корректность алгоритмов

Сообщение отредактировал xxel: 18.06.2009, 12:55:35

  • 0

#84
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений


Забыли
z = a;z += b;

Это хоть и С, а не паскаль, но тоже формализуется в AST

Возможно, спорить не буду, не разбираюсь в этом. А все виды циклов и goto, например, тоже свернутся в одно и то же?


... cout ....

А это уже не С, посему не формализуется

ООП вообще не поддается автоматической проверке на корректность алгоритмов

Ок. Пусть будет printf("%d",i). Тут вся соль в том, чему же будет равно i после всего этого :rolleyes:

Где то попадалась очень любопытная оптимизация/обфускация циклов от Криса Касперски. Попробую найти.
  • 0

#85
xxel

xxel
  • Завсегдатай
  • 146 сообщений

Возможно, спорить не буду, не разбираюсь в этом. А все виды циклов и goto, например, тоже свернутся в одно и то же?

Да. Все циклы можно привести к единому виду. Спагети из GOTO тоже трансформируется
хоть и немного сложнее (дублирование веток кода и оптимизация его).
Это то ли у Вирта, то ли у Дейкстры было описание всего этого хозяйства по
трансформации кода (с примерами приведения циклов к единому виду и пр).

На самом деле современные компиляторы используют часть этих техник. Поэтому
сейчас можно увидеть в сообщениях об ошибках чтото типа того, что
- Обнаружен неиспользуемый кусок кода
- Обнаружена переменная которая инициализированна, но не используется
- Не все пути выполнения функции возвращают результат
- и пр.

Ок. Пусть будет printf("%d",i). Тут вся соль в том, чему же будет равно i после всего этого :rolleyes:

Если AST распарсеного кода и AST правильного ответа совпадут то неважно
чему оно равно, важно то, что это гарантирует, что алгоритм закодирован
правильно и дает верные результаты. Т.е. нет никакой разницы чему равно
z в выражениях
студента // z := (a + b) - b + b +70 - 35 * 2 - (b + a) * 0
и
правильного // z := a + b;
Оба выражения дадут одинаковый AST, а значит z будет вычеслен одинакого
в обоих случаях

Где то попадалась очень любопытная оптимизация/обфускация циклов от Криса Касперски. Попробую найти.

Вряд ли он придумал что-то новое. Вынос инвариантов за тело цикла и
раскручивание цикла в код С++ компиляторые делают уже очень давно.
А круче Интела при распаралеливании цикла вообще быть нельзя.
  • 0

#86
Patriot_

Patriot_
  • Постоялец
  • 407 сообщений
Спасибо всем за интересную и познавательную беседу. :)

Всё же, как прочитать код возврата? Я про dcc32. т.е. как узнать результаты компиляции?
  • 0

#87
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
xxel, спасибо. А вот скажите пожалуйста. Как я понял из Вики, ast - это то, что парсер отдает компилятору. Однако у нас по разному написанные программы будут скомпилены ведь в разный код? (Естественно, если программа сложнее данного примера)

Всё же, как прочитать код возврата? Я про dcc32. т.е. как узнать результаты компиляции?

Вот здесь.
  • 0

#88
Patriot_

Patriot_
  • Постоялец
  • 407 сообщений
Хорошо. а можно ли узнать где именно начинается ошибка?
  • 0

#89
Gloomy

Gloomy
  • Свой человек
  • 861 сообщений

[....]
А это уже не С, посему не формализуется
ООП вообще не поддается автоматической проверке на корректность алгоритмов



Та я вас умоляю ... Ни С++ ни С ни паскаль не верифицируются, да и вообше до сих пор нет даже всеобъемлющего и целостного мат аппарата для этого! Есть только лоскутки закрывающие те или иные аспекты - но не более.

То чего вы хотите более всего продвинулось у FP'шников ... но даже злые хаскельщики пока гарантий не дают :-)

Кстате - где то была статья что задача эта того же плана, что и качественный перевод с одного языка на другой - ну и где у нас появились переводчики над результатом работы которых народ не смеётся и плачет одновременно? :(

<How do you do?
<All right!

>Как ты делаешь ЭТО?
>Всё - правой!

:rolleyes:
  • 0

#90
xxel

xxel
  • Завсегдатай
  • 146 сообщений

xxel, спасибо. А вот скажите пожалуйста. Как я понял из Вики, ast - это то, что парсер отдает компилятору. Однако у нас по разному написанные программы будут скомпилены ведь в разный код? (Естественно, если программа сложнее данного примера)

Для реализации тестов проверки знаний студентов на простых задачах все вышеописаное вполне жизнеспособный вариант.
Но в общем случае да, генерится может все что угодно - зависит только от компилятора и его оптимизатора.
Поскольку сильной оптимизацие для реальных задач заниматься нецелесообразно, то полноценные AST и тем более их оптимизация используются редко. В результате даже логически эквивалентные циклы
for i := 1 to 5 do begin ... end
и
i := 1; while i < 6 do begin ... i := i + 1; end
могут быть скомпелированы по разному
  • 0

#91
xxel

xxel
  • Завсегдатай
  • 146 сообщений


[....]
А это уже не С, посему не формализуется
ООП вообще не поддается автоматической проверке на корректность алгоритмов


Та я вас умоляю ... Ни С++ ни С ни паскаль не верифицируются, да и вообше до сих пор нет даже всеобъемлющего и целостного мат аппарата для этого! Есть только лоскутки закрывающие те или иные аспекты - но не более.

То чего вы хотите более всего продвинулось у FP'шников ... но даже злые хаскельщики пока гарантий не дают :(

Вы какое отношение имеете к FP и какой опыт в использовании оного?

Кстате - где то была статья что задача эта того же плана, что и качественный перевод с одного языка на другой - ну и где у нас появились переводчики над результатом работы которых народ не смеётся и плачет одновременно? :D

<How do you do?
<All right!

>Как ты делаешь ЭТО?
>Всё - правой!

:D


Задорнова надо меньше слушать
//translate.google.com/translate_t#en|ru|How%20do%20you%20do%3F%0AAll%20right!

Кстати причем тут переводы с языка на язык?
  • 0

#92
Gloomy

Gloomy
  • Свой человек
  • 861 сообщений

Вы какое отношение имеете к FP и какой опыт в использовании оного?

Ну на хлеб я уж точно не FP зарабатываю ...

Задорнова надо меньше слушать

От чего же? Не самый глупый из юмористов ... а вы не фанат "камедиклаб" случаем? :-|

//translate.google.com/translate_t#en|ru|How%20do%20you%20do%3F%0AAll%20right!

Спасибо за подтверждение :fie:
Вы же сами смотрели чего оно там перевело, правда? Замечу - элементарщину не осилило ...

Кстати причем тут переводы с языка на язык?

Здрасте вам! Задачи то одного порядка сложности ...
То же самое - есть два входных языка и надо доказать что фраза на одном (ваш темплейт) тождественна фразе на другом (чего там студент нарисовал).

Да ладно фиг с ним с языком людей. Как насчёт m2m? К примеру есть хоть один paskal2c который гарантированно переводит любую корректную паскаль-прогу в корректный же код на си? ... то то же! А ведь сгенерить - это на пару порядков проще чем сравнить...

Вобщем как то так ;-)
  • 0

#93
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Хорошо. а можно ли узнать где именно начинается ошибка?

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

http://forum.sources...opic=271559&hl=
http://www.sql.ru/fo...aspx?tid=640643
  • 0

#94
xxel

xxel
  • Завсегдатай
  • 146 сообщений

Ну на хлеб я уж точно не FP зарабатываю ...

Предполагалось

От чего же? Не самый глупый из юмористов ... а вы не фанат "камедиклаб" случаем? :-|

Нет

//translate.google.com/translate_t#en|ru|How%20do%20you%20do%3F%0AAll%20right!

Спасибо за подтверждение :-/
Вы же сами смотрели чего оно там перевело, правда? Замечу - элементарщину не осилило ...

Элементарщина - это то что первое вопросительное предложение переведено как вопросительное?
И каков же правильный вариант? Очень хотелось бы услышать.

Кстати причем тут переводы с языка на язык?

Здрасте вам! Задачи то одного порядка сложности ...
То же самое - есть два входных языка и надо доказать что фраза на одном (ваш темплейт) тождественна фразе на другом (чего там студент нарисовал).

Не сравнимые категории. В ЯП в отличие от ЕЯ нет ни идиом, ни неологизмов, ни слэнга и пр. шелухи.

Да ладно фиг с ним с языком людей. Как насчёт m2m? К примеру есть хоть один paskal2c который гарантированно переводит любую корректную паскаль-прогу в корректный же код на си? ... то то же! А ведь сгенерить - это на пару порядков проще чем сравнить...

Берется любой ДотНет язык.
исходник компилится.
берется Рефлектор
получаем исходник в любом другом ДотНет языке для которого в рефлекторе есть плагин
* по умолчению C#. C++ Delphi VB и Chrome
И? "... то то же!"
:-/
  • 0

#95
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Берется любой ДотНет язык.
исходник компилится.
берется Рефлектор
получаем исходник в любом другом ДотНет языке для которого в рефлекторе есть плагин
* по умолчению C#. C++ Delphi VB и Chrome
И? "... то то же!"
:-/

Вот про С++ интереснее. CLI можно с легкостью перевести в шарп? И даже множественные наследования, к примеру?
  • 0

#96
xxel

xxel
  • Завсегдатай
  • 146 сообщений


Берется любой ДотНет язык.
исходник компилится.
берется Рефлектор
получаем исходник в любом другом ДотНет языке для которого в рефлекторе есть плагин
* по умолчению C#. C++ Delphi VB и Chrome
И? "... то то же!"
:)

Вот про С++ интереснее. CLI можно с легкостью перевести в шарп?

Если учитывать что нетовский CIL изначально выточен под C#, то да

И даже множественные наследования, к примеру?

Проверяйте. У меня С++ нет.
Множественные наследования .Net по любому не поддерживает.
Какие половые трудности испытывает компилер С++ из-за этого хз
Да и не дело это выяснять в ветке о дельфях
  • 0

#97
Бумерист

Бумерист
  • Свой человек
  • 673 сообщений
Привет всем, помогите несколько простых универовских программ по делфи написать. исходные данные есть, стукните в ЛС кто сможет плиз.
  • 0


Количество пользователей, читающих эту тему: 2

пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.