IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Оптимизация концевой рекурсии, Есть такой компилер для паскаля?
сообщение
Сообщение #1


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Недавно увлекся функциональным программированием, конкретный язык - Nemerle. Язык интересен тем, что все синтаксические конструкции (в терминах Nemerle - макросы) выражены через рекурсию и сопоставление с образцом.

Существует такое понятие, как "концевая рекурсия":
Код

procedure Proc();
begin
...// некий код
   Proc();
end;
Т.е. это рекуррентый вызов, после которого происходит возврат управления. Многие компиляторы с функциональных языков (для Nemerle - это вообще стандарт) оптимизируют этот вызов, устанавливая новые значения локалньым параметрам и передавая управление на begin, тем самым не создавая новой активации подпрограммы на стеке.

Вот задался вопросом - существует ли компилер с подобной фишкой для Паскаля?


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Безопасность зависит от конкретного компилятора, на ФПЦ нормально работает. С чем сталкивался, так с невозможностью присвоить переменной строкового типа значение другой такой же переменной. Пришлось вводить в неё значения как в простой массив, других глюков не замечено. В описанном языке присутствует очередная эмуляция некоторых возможностей GOTO. До этого этот оператор эмулировали в ООП, там тоже есть рекурсия, хотя её и не заметно. Сейчас нет предпосылок для очередного такого проекта в ФПЦ. Может когда-нибудь потом что-нибудь готошное разработчики в очередной раз воспроизведут в другой обёртке. Сейчас бы им выпустить нормальные версии компилятора с не повисающей в ИДЕ мышью, и тогда им большой респект smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Ночью перечитал пост... Убила фраза.
Цитата(SKVOZNJAK @ 18.05.2007 20:54) *
В описанном языке присутствует очередная эмуляция некоторых возможностей GOTO
Трудно удержаться от холивара... norespect.gif Это что, стало быть GOTO у нас главный оператор? mega_chok.gif По поводу его использования очень хорошо написано в книге Стива Макконнелла "Совершенный Код" ("Code Complete") в главе 17 "Нестандартные управляющие структуры".

С каких это пор оптимизация хвостовой рекурсии стала обёрткой GOTO? Синтактсически подобный вызов аналогичен обычному вызову, порождающему активацию.

Далее, как это в ООП рекурсия слабо используется? Разного рода вычислительных задач всегда хватает, и дополнительный инструмент был бы вполне уместен...


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Цитата(hardcase @ 18.05.2007 23:05) *

Ночью перечитал пост... Убила фраза.
Трудно удержаться от холивара... norespect.gif Это что, стало быть GOTO у нас главный оператор? mega_chok.gif По поводу его использования очень хорошо написано в книге Стива Макконнелла "Совершенный Код" ("Code Complete") в главе 17 "Нестандартные управляющие структуры".

С каких это пор оптимизация хвостовой рекурсии стала обёрткой GOTO? Синтактсически подобный вызов аналогичен обычному вызову, порождающему активацию.

Далее, как это в ООП рекурсия слабо используется? Разного рода вычислительных задач всегда хватает, и дополнительный инструмент был бы вполне уместен...


Для меня идеальный код, это такой код в котором как минимум десятиями не нужно вносить существенных изменений, даже при добавлении новых возможностей. GOTO для меня не главный оператор, а труднозаменимая палочка выручалочка - что есть в асме, то не безобразно. Книгу http://rapidshare.de/files/26242673/000897.rar.html просмотрел с поисковиком. Чем такой формат читать в вин, не скажу - не знаю smile.gif Очень даже интересная теоретическая книга, наверно автор в душе не любит виндовс yes2.gif GOTO в ней предлагается не исключить совсем, а переписать отлаженный и очищенный от ошибок код там где это только возможно, несмотря на потери в читабельности и производительности. И так каждый раз при необходимости что-то изменить - переписывать всё. И попутно тестить и ловить новые баги. Микрософтовский подход. Вот что нашёл на одном форуме "... Как мне говорят люди (однокашники), которые сейчас на майкрсофт кодят и алгоритмируют, если кто полностью просмотрит коды виндовс и опубликует на них квалифицированный комментарий, это вызовет обвальное падение акций на NYSE и крах майкрософт. Бо код не то что среднего кчества, а изобилует тупыми патчами. Только чтобы дырки заткнуть. Из-за этого многие компании не лицензируют библиотеки у МС, а пишут свои, подменяющие вендовые, как например адоб и борланд. ..."

Сделай такое другим способом и найди 10 отличий. У Макконнелла даже произвольный доступ к элементу массива назван гото подобным.

Совсем другое говорил, очень даже используется, на этом ООП построено. Смысла в споре не вижу, у нас разные требования к коду. Мне нужен приближённый к моим представлениям об идеале и внешняя простота здесь не самоцель.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 18:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name