The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Google выпустил язык программирования Dart 1.0, созданный дл..., opennews (??), 14-Ноя-13, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


8. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +1 +/
Сообщение от Guest (??), 14-Ноя-13, 20:51 
А что смущает?
Ответить | Правка | Наверх | Cообщить модератору

15. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +1 +/
Сообщение от Another Guest (?), 14-Ноя-13, 21:22 
Рекурсия.
Ответить | Правка | Наверх | Cообщить модератору

17. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Ушастик (?), 14-Ноя-13, 21:36 
Это классический пример кода рекурсии. Понятно, что реальный код так писать никто не будет. Хотя вот оптимизация хвостовой рекурсии у команды Дарта в планах. Конечно же, больше всего этому мешает необходимость компилироваться в js.
Ответить | Правка | Наверх | Cообщить модератору

26. "Google выпустил язык программирования Dart 1.0, созданный дл..."  –1 +/
Сообщение от pavlinux (ok), 14-Ноя-13, 22:44 
> Понятно, что реальный код так писать никто не будет.

Малые факториалы тоже через гамму функцию считаешь?

Ответить | Правка | Наверх | Cообщить модератору

28. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Ушастик (?), 14-Ноя-13, 22:53 
Обязательно, только так.
Ответить | Правка | Наверх | Cообщить модератору

30. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от pavlinux (ok), 14-Ноя-13, 23:02 
А летом в гриндерсах ходишь? И саморезы молотком забиваешь?
Ответить | Правка | Наверх | Cообщить модератору

112. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +5 +/
Сообщение от Orduemail (ok), 15-Ноя-13, 16:32 
Забитый саморез держится лучше, чем вкрученный гвоздь.
Ответить | Правка | Наверх | Cообщить модератору

42. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Аноним (-), 15-Ноя-13, 00:59 
Оптимизация хвостовой рекурсии - это такая штука, которая вроде как сначала работает, а потом поменяли чуть выражение и бац - чтобы сложить числа отъелась вся оперативка?

Это хорошо для исследовательских языков, где зависло - нажал ctrl-C и попробовал по-другому, а в продакшн - нафиг-нафиг.

Ещё и монады прикрутить, ага. Которые в принципе синтаксически очень приятный хаскел по удобству реального применения ставят в один ряд с брейнфаком.

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

58. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Ушастик (?), 15-Ноя-13, 03:36 
Ничего подобного, более того, например, в Clojure надо явно указывать, что собираешься ее использовать, там вариант "случайности" исключен вообще. В других языках, где нет формального разделения все ложится на программиста, но опять же, для функциональных языков это стандартный паттерн, и ошибки подобного рода достаточно редки. Разработчикам Dart если уж хотят перестраховаться ничего не стоит применить опыт Clojure, чтоб уж наверняка.

Монады в неявном виде есть практически во всех современных языках программирования. Эта тема не раз уже обсасовалась со всех сторон. То что в Хаскеле их выделили и дали им названия, не приватизирует их.

Ответить | Правка | Наверх | Cообщить модератору

97. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Аноним (-), 15-Ноя-13, 13:10 
>в Clojure надо явно указывать, что собираешься ее использовать

Это кстати не от хорошей жизни, а от недостатков JVM. Но идея получилась здравая, да.

Ответить | Правка | Наверх | Cообщить модератору

107. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Ушастик (?), 15-Ноя-13, 14:21 
Сомневаюсь что из-за JVM, потому как в Scala все работает без явного объявления. Хотя я не JVM гик, точно не знаю.
Ответить | Правка | Наверх | Cообщить модератору

113. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Аноним (-), 15-Ноя-13, 16:35 
С оф. сайта:

In functional languages looping and iteration are replaced/implemented via recursive function calls. Many such languages guarantee that function calls made in tail position do not consume stack space, and thus recursive loops utilize constant space. Since Clojure uses the Java calling conventions, it cannot, and does not, make the same tail call optimization guarantees.

Ответить | Правка | Наверх | Cообщить модератору

117. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 15-Ноя-13, 17:39 
> Сомневаюсь что из-за JVM, потому как в Scala все работает без явного
> объявления. Хотя я не JVM гик, точно не знаю.

в jvm нет встроенного механизма для TCO, поэтому надо делать тормозящую чёрную магию. если делать TCO всегда, когда это возможно, то в итоге можно внезапно отхватить нехилые тормоза. поэтому дали возможность явно включать/отключать TCO. если рекурсия точно будет неглубокая, то можно обменять TCO на скорость.

вкратце вот так.

Ответить | Правка | К родителю #107 | Наверх | Cообщить модератору

137. "Google выпустил язык программирования Dart 1.0,..."  +/
Сообщение от Crazy Alex (ok), 15-Ноя-13, 22:12 
Я только не пойму, что им мешает разворачивать это дело в нормальный цикл - вродде ж несложно.
Ответить | Правка | Наверх | Cообщить модератору

143. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 15-Ноя-13, 22:32 
> Я только не пойму, что им мешает разворачивать это дело в нормальный
> цикл — вродде ж несложно.

дано: представление программы в continuation passing style. задача: развернуть это в цикл, не сожрав всю память на копии копий копий копий копий… решишь — поделись нобелевкой. или хотя бы коньяка купи.

Ответить | Правка | Наверх | Cообщить модератору

161. "Google выпустил язык программирования Dart 1.0,..."  –1 +/
Сообщение от Crazy Alex (ok), 16-Ноя-13, 19:45 
Для частого встречающегося случая без continuations - никаких проблем. И этот примитив покроет процентов 80 реального использования TCO.

Если у тебя continuations в виде захардкоженных функций (т.е. несколько функций, вызывающих одна другую через TCO, но не приходящих как невесть где вычисленные параметры) - то из них довольно несложно сгенерировать одну итеративную. Еще процентов 10-15 использования закроется. Останется то, что пишут адовые гуру - ну так пусть на хаскель идут или ставят аннотацию какую-нибудь чтобы сказать "я понимаю, что это тормоза".

Ответить | Правка | Наверх | Cообщить модератору

164. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 16-Ноя-13, 19:57 
ты сказал «несложно», а тут вдруг сложности полезли. ладно, «никаких проблем». цепочка вызовов функций, которая может ветвиться и в некоторых местах рекурсивно начинать ту же цепочку с начала. всё ещё «несложно»? а это нормальный функциональный код, вообще-то.

сложно TCO в циклы преобразовывать, сложно. «несложно» оно как раз для простейшего использования именно в виде конструкции цикла — так никто почти этого не делает, если в языке явные циклы есть. а в случаях, когда TCO реально помогает писать функциональщину, сразу лезут проблемы.

ну и помимо прочего — межпроцедурный анализ усложняет компилятор. причём усложняет бестолково, потому что циклы народ и так будет писать при помощи циклических конструкций, а на чём-то более-менее сложном анализатор всё равно поднимет лапки кверху.

Ответить | Правка | Наверх | Cообщить модератору

169. "Google выпустил язык программирования Dart 1.0,..."  +/
Сообщение от Crazy Alex (ok), 17-Ноя-13, 01:16 
Цепочка как раз совершенно тривиально разруливается - собираем весь код из неё в одной функции, дальше чуток магии с флагами, чтобы эмулировать отсутствие goto (или нужный опкод есть в JVM? хз). И анализ получается довольно простой. Вот где это действиельно сломается - это когда где-то в рантайме будет определяться, какую функцию отдать аргументом, который будет потом использован для tail call. И да, это нормлаьный функциональный код. Но поскольку людей, думающих таким образом, примерно на пару порядков меньше, чем тех, кто рвется писать на функциональщине, то такого кода мало, и для него можно оставить существующее поведение. Обычно же фанаты начинают переписывать функционально даже то, что императивно пишется проще и читбельнее.

Впрочем, в одной вещи я ошибся - решил, что в Clojure нет нормального цикла. А он есть.

Ответить | Правка | К родителю #164 | Наверх | Cообщить модератору

170. "Google выпустил язык программирования Dart 1.0,..."  +/
Сообщение от arisu (ok), 17-Ноя-13, 01:22 
> Цепочка как раз совершенно тривиально разруливается - собираем весь код из неё
> в одной функции

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

> или нужный опкод есть в JVM?

есть, естественно: без него циклы плохо получаются.

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

речь у нас началась, напомню, с твоего утверждения, что tail calls несложно разворачивать в нормальные циклы. я закономерно удивился.

kawa, если у меня не ложная память, пытается кое-как преобразовывать. с let у неё получается (да почти все современные схемы let разворачивают в обычный цикл), а с остальным не шибко, особенно с tco. там они трамплины, вроде бы, городили.

Ответить | Правка | К родителю #169 | Наверх | Cообщить модератору

101. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Crazy Alex (ok), 15-Ноя-13, 13:31 
"Монады в неявном виде" - это как?
Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

104. "Google выпустил язык программирования Dart 1.0, созданный дл..."  +/
Сообщение от Аноним (-), 15-Ноя-13, 13:42 
int main() (как и все прочие функции) - это, в общем-то, по сути и есть монада последовательного выполнения.
Ответить | Правка | Наверх | Cообщить модератору

118. "Google выпустил язык программирования Dart 1.0,..."  –2 +/
Сообщение от arisu (ok), 15-Ноя-13, 17:41 
вы прочитали комментарий человека, жестоко покусаного хаскелем. теперь ему везде мерещатся монады.
Ответить | Правка | Наверх | Cообщить модератору

136. "Google выпустил язык программирования Dart 1.0,..."  +/
Сообщение от Crazy Alex (ok), 15-Ноя-13, 22:10 
Похоже на то
Ответить | Правка | Наверх | Cообщить модератору

148. "Google выпустил язык программирования Dart 1.0,..."  +2 +/
Сообщение от Аноним (-), 16-Ноя-13, 01:09 
> Похоже на то

нет, просто остутствие благоговейного трепета перед страшными словами позволяет понимать, что они означают и что за ними скрываются обыденные вещи :)

но я так понимаю некоторые личности тут настроены на то, чтобы тупо пофлеймить :)

Ответить | Правка | Наверх | Cообщить модератору

147. "Google выпустил язык программирования Dart 1.0,..."  –1 +/
Сообщение от Аноним (-), 16-Ноя-13, 01:07 
простите, что делают? :)
Ответить | Правка | К родителю #118 | Наверх | Cообщить модератору

149. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 16-Ноя-13, 01:09 
> простите, что делают? :)

какое из русских слов вызвало затруднение?

Ответить | Правка | Наверх | Cообщить модератору

150. "Google выпустил язык программирования Dart 1.0,..."  –1 +/
Сообщение от Аноним (-), 16-Ноя-13, 01:18 
>> простите, что делают? :)
> какое из русских слов вызвало затруднение?

Не понимаю причины столь внезапной агрессии.

Ответить | Правка | Наверх | Cообщить модератору

151. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 16-Ноя-13, 02:02 
>>> простите, что делают? :)
>> какое из русских слов вызвало затруднение?
> Не понимаю причины столь внезапной агрессии.

это потому, что ты агрессию сам выдумал, и теперь хочешь, чтобы я пояснил тебе, зачем ты её выдумал. я не знаю.

Ответить | Правка | Наверх | Cообщить модератору

152. "Google выпустил язык программирования Dart 1.0,..."  –2 +/
Сообщение от Аноним (-), 16-Ноя-13, 02:42 
ок, будем считать твоё высказывание про "мерещится" твоей неумелой шуткой
Ответить | Правка | К родителю #151 | Наверх | Cообщить модератору

153. "Google выпустил язык программирования Dart 1.0,..."  +1 +/
Сообщение от arisu (ok), 16-Ноя-13, 02:50 
ну, спасибо. даже от сердца отлегло.
Ответить | Правка | К родителю #152 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру