FR>>Еще одна легенда.
IT>Что значит легенда? На "javascript parseint" гугль выдаёт больше миллиона ссылок. Это легенда? Отсутствие нормальной типизиации было основной мотивацией переписвания этого сайта с ASP на ASP.NET. Это тоже легенда?
Это проблема языков со слабой типизацией, к динамике отношения не имеет, динамические языки с сильной типизацией не позволяют фокусы вроде x = 2 + "3".
Здравствуйте, FR, Вы писали:
FR>Ты просто привык к тому что функции не первоклассные объекты, по этому и думаешт о них как как об указателях. Можно и функцию "кешировать". В функциональщине те же замыкания и карринг и есть в принципе "кеширование" функции. Кстати в моем примере это тоже есть так как присутствует замыкание.
С функциями у меня всё в порядке. Единственное новое что я о них узнал из функциональщины, это то, что их там принято называть первоклассными объектами. Всё остальное так или иначе знал со времён баловства с дековским ассемблером на PDP-11.
IT>>На самом деле довольно полезная штука. Я иногда использую в DAL для кеширования результатов вызова сохранённых процедур. Код реализации, конечно не такой компакнтный как у FR, но написан один раз и есть больше не просит. При этом настройка параметров кеширования производится декларативно.
FR>Интересно бы посмотреть для сравнения.
Здравствуйте, FR, Вы писали:
FR>Это проблема языков со слабой типизацией, к динамике отношения не имеет, динамические языки с сильной типизацией не позволяют фокусы вроде x = 2 + "3".
А такое позволяют:
y = 2;
x = y + "3"
?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, FR, Вы писали:
FR>>Это проблема языков со слабой типизацией, к динамике отношения не имеет, динамические языки с сильной типизацией не позволяют фокусы вроде x = 2 + "3".
IT>А такое позволяют:
IT>y = 2; IT>x = y + "3"
IT>?
нет
>>> y = 2
>>> x = y + "3"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Здравствуйте, FR, Вы писали:
IT>>А такое позволяют:
IT>>y = 2; IT>>x = y + "3"
IT>>?
FR>нет FR>
>>>> y = 2
>>>> x = y + "3"
FR>Traceback (most recent call last):
FR> File "<stdin>", line 1, in ?
FR>TypeError: unsupported operand type(s) for +: 'int' and 'str'
FR>
А так?
fun(y)
{
x = y + "3";
}
y = 1;
fun(y)
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, FR, Вы писали:
FR>>Ты просто привык к тому что функции не первоклассные объекты, по этому и думаешт о них как как об указателях. Можно и функцию "кешировать". В функциональщине те же замыкания и карринг и есть в принципе "кеширование" функции. Кстати в моем примере это тоже есть так как присутствует замыкание.
IT>С функциями у меня всё в порядке. Единственное новое что я о них узнал из функциональщины, это то, что их там принято называть первоклассными объектами. Всё остальное так или иначе знал со времён баловства с дековским ассемблером на PDP-11.
То есть на том ассемблере были и замыкания и карринг?
IT>>>На самом деле довольно полезная штука. Я иногда использую в DAL для кеширования результатов вызова сохранённых процедур. Код реализации, конечно не такой компакнтный как у FR, но написан один раз и есть больше не просит. При этом настройка параметров кеширования производится декларативно.
FR>>Интересно бы посмотреть для сравнения.
IT>AOP interceptors
IT>А так?
IT>fun(y) IT>{ IT> x = y + "3"; IT>}
IT>y = 1; IT>fun(y)
тоже нет:
def fun(y):
x = y + "3";
y = 1
fun(y)
Traceback (most recent call last):
File "tst00.py", line 5, in ?
fun(y)
File "tst00.py", line 2, in fun
x = y + "3";
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Здравствуйте, FR, Вы писали:
FR>Понятно просто тебе охота поспорить, и поэтому решил прикопатся к терминологии. Хороший способ можно долго спорить ни о чем.
Нет, дело не в поспорить. К сожалению, терминология такая штука, которая нас в основном разъединяет и большинство споров у нас носят терминологический характер. Было бы лучше, если бы все это понимали и старались говорить на одном языке. Или хотя бы расшифровывали то, что понимают под используемыми терминами.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
IT wrote: > С функциями у меня всё в порядке. Единственное новое что я о них узнал > из функциональщины, это то, что их там принято называть первоклассными > объектами. Всё остальное так или иначе знал со времён баловства с > дековским ассемблером на PDP-11.
А лямбды? А ленивость?
Здравствуйте, Cyberax, Вы писали:
C>А лямбды? А ленивость?
На поверку лямбда оказалась всего лишь короткой формой записи локальной функции. Ленивость я не знаю что такое. Если объяснишь, то наверняка можно будет поискать аналог и в нефункциональном мире.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>>>А такое позволяют:
IT>>>y = 2; IT>>>x = y + "3"
IT>>>?
FR>>нет FR>>
>>>>> y = 2
>>>>> x = y + "3"
FR>>Traceback (most recent call last):
FR>> File "<stdin>", line 1, in ?
FR>>TypeError: unsupported operand type(s) for +: 'int' and 'str'
FR>>
IT>А так?
IT>fun(y) IT>{ IT> x = y + "3"; IT>}
IT>y = 1; IT>fun(y)
Еще в копилку:
irb(main):001:0> y=2
=> 2
irb(main):002:0> x=y+"3"
TypeError: String can't be coerced into Fixnum
from (irb):2:in `+'
from (irb):2
irb(main):003:0> def fun(y); x = y + "3"; end
=> nil
irb(main):004:0> y=1
=> 1
irb(main):005:0> fun(y)
TypeError: String can't be coerced into Fixnum
from (irb):3:in `+'
from (irb):3:in `fun'
from (irb):5
irb(main):006:0>
Осталось только кого нибудь из Smalltalk-еров подождать
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Cyberax, Вы писали:
C>>А лямбды? А ленивость?
IT>На поверку лямбда оказалась всего лишь короткой формой записи локальной функции. Ленивость я не знаю что такое. Если объяснишь, то наверняка можно будет поискать аналог и в нефункциональном мире.
Здравствуйте, Adopt, Вы писали:
A>Какие плюсы у динамической типизации в сравнении со стачиеской типизации?
A>Какие задачи с помощью динамически типизированного языка реализуются легче?
Most of GoF design patterns invisible or simple in dynamic languages.
A>Приведите плз примеры кода для сравнения?
Еще можно глянуть на мой пример конечного автомата — без атомов, которые трактуются в качестве имени функции (динамической типизации) так красиво бы (весь "паттерн" — в одну строку) не получилось. http://rsdn.ru/Forum/Message.aspx?mid=2073832&only=1
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, ArtDenis, Вы писали:
>>> Ну что, сразу в Священные войны поедем или здесь еще помучаемся?
AD>>Пускай сначала люди свои умные мысли выскажут...
E>Эти мысли высказывались уже не понятно сколько раз. Вместо провоцирования нового витка лучше почитать ранее написанное. Например, вот здесь: E>DynamicTyping E>BenefitsOfDynamicTyping E>IsDynamicTypingSufficientlyEfficient E>и далее по ссылочками.
Ну, еще свой мегапост на эту тему приведу, чтоли. Тоже лень повторяться. Но он, правда, посвящен вопросам производительности и "опасности" языков с динамической типизацией.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Cyberax, Вы писали:
C>>А лямбды? А ленивость?
IT>На поверку лямбда оказалась всего лишь короткой формой записи локальной функции.
funct( X, Y, Container ) ->
Z = X + Y,
map( fun( X ) -> X + Z end, Container ).
Код понятен? Просьба записать то же самое через локальные функции — на поверку.
Здравствуйте, FR, Вы писали:
IT>>На поверку лямбда оказалась всего лишь короткой формой записи локальной функции. Ленивость я не знаю что такое. Если объяснишь, то наверняка можно будет поискать аналог и в нефункциональном мире.
FR>Аналог итераторы, ну и плюс сахар в виде yield
Ерунда. Итераторы позволяют кое-как сымитировать ленивые списки, но ни разу не помогут в ситуации, как бы объяснить попроще... Вы знаете, что такое RS-триггер? Это два элемента 2и-не, объединенных вот так:
a = 2nand( b, R );
b = 2nand( a, S );
Чтобы на самом деле прочувствовать разницу между строгим и ленивым языком, попробуйте промоделировать правильную работу этой схемы на строгом языке. В ленивом языке — сами понимаете, программа будет в целом похожа на то, что я написал — не сильно сложнее.
Gaperton wrote: > Чтобы на самом деле прочувствовать разницу между строгим и ленивым > языком, попробуйте промоделировать правильную работу этой схемы на > строгом языке.
SystemC
Хотя получается очень некрасиво и неудобно.
> В ленивом языке — сами понимаете, программа будет в целом > похожа на то, что я написал — не сильно сложнее.
Угу. Кстати, как ваши эксперименты с Эрлангом? Насколько удобнее он чем
SystemC?