Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 5276 27-09-2007 10:14 | |
Ответ на »сообщение 5265« (Руслан Богатырев)
___________________________
Если стоит, скажем, задача разделить яблоко на две половинки, можно попробовать его просто с силой разломить. Правда, будут, скорее всего, неровные части. Можно воспользоваться садовыми ножницами и даже электропилой. Но думаю, перочинный нож подойдет для такой задачи лучше. А вот сажать яблони с помощью перочинного ножа, наверное, не стоит.
Правильно ли я понимаю, что кроме этих правдоподобных рассуждений, у Вас нет конкретных технических аргументов, подтверждающих непригодность Лиспа для императивного (в т.ч. низкоуровневого) программирования?
№ 5275 27-09-2007 09:31 | |
Ответ на »сообщение 5264« (Jack Of Shadows)
___________________________
Ведь смысл анонимных функций именно в упрощении записи.
А можно вместо суммы пример хотя бы с нахождением НОД?
Будет ли выглядеть проще?
Мне кажется, это похоже на inline функции, механизм очень мощный, но очень редко используемый.
№ 5274 27-09-2007 09:07 | |
Ответ на »сообщение 5264« (Jack Of Shadows)
___________________________
>>>Ну почему же передергиваю ?
Потому что перешли от анонимности к краткости.
>>>Поскольку основным (единственным ?) предназначением анонимных функций является декларация по месту использования, то ясно что при реализации упор будет делаться на краткую форму.
>>>Ведь смысл анонимных функций именно в упрощении записи.
Как правило, синтаксис для анонимных функций более-менее повторяет синтаксис именованных. И если один краток, то и другой тоже.
myFun x y = x + y
ProcessListOfPairs myList myFun
(ProcessListOfPairs myList (lambda (x y) (+ x y))
(define (myFun x y) (+ x y))
(ProcessListOfPairs myList myFun)
>>>Кстати вы упустили возможность еще больше раздуть запись, вкючив в нее типы параметров и тип возвращаемых данных.
Кстати, да.:-)
ProcessListOfPairs(myList, delegate(double x; double y) ) или
ProcessListOfPairs(myList, function(x,y:real):real; begin result := x+y end )
№ 5273 27-09-2007 08:26 | |
Ответ на »сообщение 5267« (Александр Феоктистов)
___________________________
зы: самый лучший фор, где можно указывать ещё и шаг
Можно продолжить до "самый лучший for - это while" :-)
№ 5272 27-09-2007 07:29 | |
type MyFunc = Function( x:Integer, y:Integer):Integer;
// Сама передаваемая функция
Function MyFunc(x:Integer, y:Integer):Integer
begin
return x + y
end
var
\\ Да да мы должны еще и описать переменную типа этой функции. А вы думали уже все ? :))
mf : MyFunc;
\\ И вот наконец то долгожданная передача:
ProcessListOfPairs(myList, mf)
Приведенный пример из дельфи конечно. Если кто то покажет как это коротко, просто и изящно делается на обероне, буду премного благодарен :))
Ну, на Обероне (на примере КП) это покороче, чем в Дельфе.
PROCEDURE ProcessListOfPairs (l: List; func: PROCEDURE (x, y: INTEGER): INTEGER);
BEGIN
...
END ProcessListOfPairs;
И передача некоторой ф-и:
PROCEDURE MyFunc (x, y: INTEGER): INTEGER;
BEGIN RETURN x + y
END MyFunc;
ProcessListOfPairs(list, MyFunc)
№ 5271 27-09-2007 07:27 | |
Ответ на »сообщение 5264« (Jack Of Shadows)
___________________________
Более того, в императивных языках даже описать функцию принимающую другую функцию в качестве параметра, без предварительного описания еще одного типа - невозможно.
Так что придется мне таки переписать приведенный мною пример:
// Сначала нам придется описать тип функции которую мы будем передвать как параметр. Без этого никак.
type MyFunc = Function( x:Integer, y:Integer):Integer;
// Сама передаваемая функция
Function MyFunc(x:Integer, y:Integer):Integer
begin
return x + y
end
var
\\ Да да мы должны еще и описать переменную типа этой функции. А вы думали уже все ? :))
mf : MyFunc;
\\ И вот наконец то долгожданная передача:
ProcessListOfPairs(myList, mf)
Ну и сравниваем с кодом из хаскеля:
ProcessListOfPairs myList \x y -> x + y
Приведенный пример из дельфи конечно. Если кто то покажет как это коротко, просто и изящно делается на обероне, буду премного благодарен :))
Никаких таких ужасов на Обероне не требуется. :)
Илья Ермаков уже разъяснил почему: для процедурных типов в Обероне достаточно структурной совместимости, поэтому отдельный тип MyFunc не требуется.
Допустим, где-то есть процедура ProcessListOfPairs: PROCEDURE ProcessListOfPairs(list: List; p: PROCEDURE (x, y: INTEGER): INTEGER);
Тогда при ее вызове достаточно просто указать подходящую функцию.
Например:
PROCEDURE Sum(x, y: INTEGER): INTEGER;
...
ProcessListOfPairs(list, Sum);
№ 5270 27-09-2007 06:47 | |
Ответ на »сообщение 5268« (Стэн)
___________________________
Да, так и просится этот текст быть отправленным Вирту... Вы расскажите потом, что он думает по этому поводу...
Если Вы обратили внимание, то в контурах проекта "Роса" был особенно отмечен пункт в отношении борьбы с изоляционизмом (технологическим, научным, маркетинговым) и подчеркнуто, что подобный изоляционизм был одной из причин забвения и неприятия Оберона. Что касается Вашего совета... то, думаю, Вам никто не мешает ему последовать. Я свою позицию не скрываю и говорю вполне открыто. Можете смело на меня ссылаться :)
Попытки найти истину? Что-то это все напоминает, или кого-то... Считаете, что это хорошая стратегия?..
Может расскажите, что за истину должны искать ИТ компании, вместо завоевании долей рынка?
Стратегия для ЧЕГО? У меня лично нет цели извлечь максимум коммерческой прибыли из проекта "Роса". Надеюсь, участники его в определенной степени разделяют мою точку зрения. А если так -- зачем ЗАВОЕВЫВАТЬ долю рынка?
Нам приходится пересматривать стереотипы, которые многие годы вбивали в головы миллионов немногочисленные лидеры ИТ-рынка, борясь за свою долю. Вы должны прекрасно понимать разницу в поведении на рынке между компанией, занимающей монопольное положение и заинтересованной в контроле имеющейся доли, и "отстающей" компанией, которая стремится отвоевать хоть какое-то место под солнцем. Для первой нет необходимости в технологическом совершенстве. Более того, оно опасно. Это риски. Для тех, кому нечего терять -- это чуть ли не единственный способ выживания. Спроецируйте это на страны, и Вы поймете особенность США и потенциал их негативной роли в развитии программирования.
Наша группа считайте что маленькая компания. Но наша цель проста и прозрачна -- создать то, за что не будет стыдно (это во-первых) и что будет полезнее того, что имеется в мировом программировании сейчас (и в обозримой перспективе). Кому-то пригодится? Хорошо. Нет? Не вижу ничего страшного. По крайней мере, за это время мы настолько продвинемся в понимании программирования и овладении эффективных подходов (я в этом убежден), что всегда сможем компенсировать (при желании) свои "потери". А потому у нас есть огромнейшее преимущество -- быть по сути независимыми от задачи вывода своего будущего продукта на рынок и думать исключительно о его совершенстве. Не самая плохая, надо сказать, позиция.
№ 5269 27-09-2007 06:02 | |
Ответ на »сообщение 5264« (Jack Of Shadows)
___________________________
Ответ на »сообщение 5261« (Trurl)
___________________________
Более того, в императивных языках даже описать функцию принимающую другую функцию в качестве параметра, без предварительного описания еще одного типа - невозможно.
Так что придется мне таки переписать приведенный мною пример:
В Компонентном Паскале, кстати, можно объявить сигнатуру по месту, прямо в списке параметров. А процедурные типы, в отличие от массивовых, в Обероне признаются соместимыми, если список параметров идентичен.
№ 5268 27-09-2007 05:25 | |
Ответ на »сообщение 5266« (Руслан Богатырев)
___________________________
>>> Подумалось ещё вот о чём: нередко для самоутверждения языка (точнее, его авторов, его сторонников) пытаются весь мир вокруг переделать на один лад -- в терминах этого языка (речь не только и не столько о Лиспе). Написать транслятор с него обязательно на нём же самом, и систему программирования, и ОС. Если сделана какая-то прикладная система, то обязательно хочется подчеркнуть, что именно на этом языке, не на каком-то там ещё...
Да, так и просится этот текст быть отправленным Вирту... Вы расскажите потом, что он думает по этому поводу...
>>> Цель которых -- контроль завоёванных долей рынка и их расширение, а не попытки найти истину или достичь технологического совершенства.
Попытки найти истину? Что-то это все напоминает, или кого-то... Считаете, что это хорошая стратегия?..
Может расскажите, что за истину должны искать ИТ компании, вместо завоевании долей рынка?
Можно начать вот отсюда »сообщение 1760 в теме №348 на БП« и отсюда »сообщение 1770 в теме №348 на БП«
№ 5267 27-09-2007 04:44 | |
Ответ на »сообщение 5228« (panda)
___________________________
форы прозрачные для понимания, сразу видно откуда и докуда крутится цикл, и функциональнее (можно перебрать только часть колекции, например), а так оба утверждения похожи.
должен остаться кто-то один :)
зы: самый лучший фор, где можно указывать ещё и шаг
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|