Существует такое понятие, как "концевая рекурсия":
Код
procedure Proc();
begin
...// некий код
Proc();
end;
Вот задался вопросом - существует ли компилер с подобной фишкой для Паскаля?
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]()  | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#1				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			 Недавно увлекся функциональным программированием, конкретный язык - Nemerle. Язык интересен тем, что все синтаксические конструкции (в терминах Nemerle - макросы) выражены через рекурсию и сопоставление с образцом. 
			
			Существует такое понятие, как "концевая рекурсия": Код procedure Proc(); begin ...// некий код Proc(); end; Вот задался вопросом - существует ли компилер с подобной фишкой для Паскаля? -------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| Lapp | 
                        
			
			  
			
				 Сообщение
					#2				
			 
		 | 
	
        	
        		![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация:    159           	 | 
       
			
			 Забавно, действительно в этом случае локальные параметры не нужны больше. 
			
			Я думаю, этот вопрос следует задать непосредственно писателям FPC и всем остальным производителям. -------------------- я - ветер, я северный холодный ветер 
					
		я час расставанья, я год возвращенья домой  | 
	
| SKVOZNJAK | 
                        
			
			  
			
				 Сообщение
					#3				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация:    11           	 | 
       
			
			 Да хоть борланд, хоть ФПЦ, ввезде это работает, если GOTO использовать. В турбовизион таким способом удобно окошки создавать: при нажатии на кнопку в обработчике событий срабатывает GOTO, параметр записывается в массив откуда потом считывается процедурой создающей окно, выполняется какое-либо действие, окно перезапускается с новыми параметрами. Так можно текст в окошко вводить, что-то запускать. Фишка в отсутствии необходимости изучать всю систему целиком, она и по частям работает хорошо, и даже совмещается с другими системами. Без GOTO это невозможно - надо весь код изучать, переделывать... 
			
			
					
		Можешь посмотреть как это работает http://stiratel7.narod.ru/1/z.html Система "Сушняк турбо", надеюсь архив не запортился на сайте, как это случилось с гамой. Сообщение отредактировано: SKVOZNJAK -  | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#4				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			  Да хоть борланд, хоть ФПЦ, ввезде это работает, если GOTO использовать Использование конструкции GoTo в данном случае не уместно, ибо она небезопасна и по своей логике нарушает концепцию "вызова-возврата", кроме того приходится самостоятельно забивать  параметры руками, а это черевато побочными эффектами, проблемами с дальнейшим сопровождением кода, рефакторингом и прочими прелестями.-------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| SKVOZNJAK | 
                        
			
			  
			
				 Сообщение
					#5				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация:    11           	 | 
       
			
			 Безопасность зависит от конкретного компилятора, на ФПЦ нормально работает. С чем сталкивался, так с невозможностью присвоить переменной строкового типа значение другой такой же переменной. Пришлось вводить в неё значения как в простой массив, других глюков не замечено. В описанном языке присутствует очередная эмуляция некоторых возможностей GOTO. До этого этот оператор эмулировали в ООП, там тоже есть рекурсия, хотя её и не заметно. Сейчас нет предпосылок для очередного такого проекта в ФПЦ. Может когда-нибудь потом что-нибудь готошное разработчики в очередной раз воспроизведут в другой обёртке. Сейчас бы им выпустить нормальные версии компилятора с не повисающей в ИДЕ мышью, и тогда им большой респект  
			
			
					
		 | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#6				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			 Ночью перечитал пост... Убила фраза. 
			
			В описанном языке присутствует очередная эмуляция некоторых возможностей GOTO Трудно удержаться от холивара... С каких это пор оптимизация хвостовой рекурсии стала обёрткой GOTO? Синтактсически подобный вызов аналогичен обычному вызову, порождающему активацию. Далее, как это в ООП рекурсия слабо используется? Разного рода вычислительных задач всегда хватает, и дополнительный инструмент был бы вполне уместен... -------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| SKVOZNJAK | 
                        
			
			  
			
				 Сообщение
					#7				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация:    11           	 | 
       
			
			 Ночью перечитал пост... Убила фраза. Трудно удержаться от холивара... С каких это пор оптимизация хвостовой рекурсии стала обёрткой GOTO? Синтактсически подобный вызов аналогичен обычному вызову, порождающему активацию. Далее, как это в ООП рекурсия слабо используется? Разного рода вычислительных задач всегда хватает, и дополнительный инструмент был бы вполне уместен... Для меня идеальный код, это такой код в котором как минимум десятиями не нужно вносить существенных изменений, даже при добавлении новых возможностей. GOTO для меня не главный оператор, а труднозаменимая палочка выручалочка - что есть в асме, то не безобразно. Книгу http://rapidshare.de/files/26242673/000897.rar.html просмотрел с поисковиком. Чем такой формат читать в вин, не скажу - не знаю Сделай такое другим способом и найди 10 отличий. У Макконнелла даже произвольный доступ к элементу массива назван гото подобным. Совсем другое говорил, очень даже используется, на этом ООП построено. Смысла в споре не вижу, у нас разные требования к коду. Мне нужен приближённый к моим представлениям об идеале и внешняя простота здесь не самоцель.  | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#8				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			  Для меня идеальный код, это такой код в котором как минимум десятиями не нужно вносить существенных изменений, даже при добавлении новых возможностей. Резаработка промышленного софта сегодня - это постоянный рефакторинг. Рефакторинг и тестирование.GOTO для меня не главный оператор, а труднозаменимая палочка выручалочка - что есть в асме, то не безобразно.  Язык программирования выского уровня - это не надстройка над машинным кодом. Это некая виртуальная машина, которая, конечно, имеет отображение в машинный код, но несёт свою собственную парадигму выполнения - это и есть главный смысл языка. Как можно более выского абстрагирование от аппаратуры.Книгу http://rapidshare.de/files/26242673/000897.rar.html просмотрел с поисковиком. Чем такой формат читать в вин, не скажу - не знаю  Полагаю, в архиве лежит djvu формат. Я обладаю бумажным экземпляром этой книги, чертовски счастлив - эта книга  по программированию, возможно лучшая, из всех, что довелось мне читать.Очень даже интересная теоретическая книга, наверно автор в душе не любит виндовс   Издатель - Microsoft Press... GOTO в ней предлагается не исключить совсем, а переписать отлаженный и очищенный от ошибок код там где это только возможно, несмотря на потери в читабельности и производительности.  Хммм,может я не внимательно читал все 860 страниц? Автор призывает писать исключительно понятный и простой код. Но это конечно зависит от языка. С например не поддерживает исключения, хотя во многих случаях goto преобразуется в throw или raise.И так каждый раз при необходимости что-то изменить - переписывать всё. И попутно тестить и ловить новые баги. Переписать 20-30 строк кода по-моему не очень сложно. А больших по размеру методов я, по крайней мере, у себя и не встречал.Переписывают ВСЕ, как вы выразились, лишь в том случае, когда обнаруживают концептуальную ошибку в архитектуре приложения. Вот что нашёл на одном форуме "... " ОБС-радио.  ("Одна Баба Сказала")То, что рассказывали ребята из Майкрософта, когда я был на форуме "Dev Days" очень даже порадоволо. Цитата, которую вы привели, применительна ко временам 98-Me виндов. В настоящий момент корпорация ввела очень жесткие требования к программным продуктам. Новые стандарты были применены начиная с XP SP2 и Server R2 (использую последний и вполне доволен). Смысла в споре не вижу, у нас разные требования к коду. Мне нужен приближённый к моим представлениям об идеале и внешняя простота здесь не самоцель.  В этом я полностью с вами согласен. Моя цель - максимально простой в использовании код и внешняя простота - это первый его признак.-------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
![]() ![]()  | 
	
 
  | 
		Текстовая версия | 4.11.2025 7:59 |