понедельник, 11 октября 2010 г.

[prog] Описание нововведений Scala 2.8: Named and Default Parameters и Type Constructor Polymorphism

Продолжается серия статей о нововведениях в Scala 2.8. На сей раз две статьи, которые опубликованы вне scala-lang.org:

Ранее были опубликованы:

Пару слов от себя. Сегодня пытался прочитать про Type Constructor Polymorphism. Сумел воспринять только какие-то отрывки из обрывков. Главным образом потому, что статья представляет из себя набор общих фраз и абстрактных примеров. Тогда как язык программирования (тем более претендующий на мейнстримность) предназначен для решения конкретных проблем. Посему пользователям языка нововведения нужно объяснять в буквальном смысле на пальцах. Вроде такого: вот у нас контейнер с апельсинами, а вот с яблоками. Мы хотим сделать сортировку по привлекательности внешнего вида, но беда в том, что типы разные, хоть и производные от какой-то базы… И бла-бла-бла с большим количеством примеров нормального, читабельного кода. До тех пор, пока этого не будет, Scala останется привлекательной для небольшого количества гиков, способных придти в восторг от конструкции:

scala> def foo[CC[x], El](xs: CC[El]): CC[El] = null.asInstanceOf[CC[El]]
foo: [CC[x],El](xs: CC[El])CC[El]

scala> foo(List(1,2,3))
res0: List[Int] = null

10 комментариев:

имя комментирует...

действительно плохо написано и надо читать пдф-ку, но суть идеи по-моему ясна

пусть мы хотим:

class Set[T] extends Traversable[Set[че-нам здесь-написать?], T]

да, можно написать

class Set[T] extends Traversable[Set[T], T]

но это будет не совсем, т.к. Set[Child] вполне рассмотреть как Traversable[Set[Parent], Child] (кому и зачем может понадобиться его так рассмотреть -- не ясно, но допустим)

вот одерский это и пофиксил

eao197 комментирует...

Я вот вообще не понимаю, в чем смысл дублирования имени Set в записи:

class Set[T] extends Traversable[Set[T],T]

Rustam комментирует...

Похожа Scala готовится в приемники к ПЛ/1. По моему даже хаскель уже проще :)

eao197 комментирует...

@Rustam: есть такое. Не зря же все успешные языки программирования были созданы не учеными, а инженерами. А вот Scala занимаются чистые ученые, отсюда и результат

Rustam комментирует...

Ну Вальтер очень инженеристый инженер, но блин тоже скоро уже с авторами Scala будет соревноваться.
Хотя теперь тут http://www.digitalmars.com/d/2.0/index.html фраза D version 2 which is the next generation under development в последней версии заменилась на D version 2 which is recommended for new projects :))

eao197 комментирует...

@Rustam: бытность инженером -- это необходимое, но совершенно недостаточное условие :)

eao197 комментирует...

Кстати, Вальтер недавно кидал ссылку: https://www.google.com/accounts/ServiceLogin?service=groups2&passive=1209600&continue=http://groups.google.com/group/golang-nuts/browse_thread/thread/f24e7d46091e27ab&followup=http://groups.google.com/group/golang-nuts/browse_thread/thread/f24e7d46091e27ab -- там в споре Александреску поучаствовал. Утверждал, что D уже стабилизируется и революций можно не ждать больше.

Rustam комментирует...

Да интересно, слухи такие ходят. Надо будет какую-то мелочевку на D сварганить :)

Quaker комментирует...

Ссылку можно немного упростить:
http://groups.google.com/group/golang-nuts/browse_thread/thread/f24e7d46091e27ab?pli=1
Прочитал комментарии в указанной теме. В основном, мнение выступающих свелось к тому, что D (второй ревизии) - это язык уровня C++ и Java по функциональности, является переосмыслением C++ (в сторону упрощения и корректности), а Go - это переосмысление чистого Си, минималистичный и необычный язык с развитыми и отлаженными сетевыми возможностями (но в целом пока это темная лощадка).
Кстати, Александреску недавно выпустил свою книгу по D:
http://www.amazon.com/D-Programming-Language-Andrei-Alexandrescu/dp/0321635361
А вот выступление самого автора:
http://www.youtube.com/watch?v=RlVpPstLPEc
Ну и дополнение к этим ссылкам:
глава про многопоточность из книги
http://www.informit.com/articles/printerfriendly.aspx?p=1609144

Евгений, хотелось бы Вас спросить: а у Вас какое мнение относительно D vs Go? Есть у кого-то из них реальный шанс?

p.s. А вот поклонники Eiffel ориентируются на scala:
http://www.eiffelroom.com/node/466
Кстати, этим летом был проведен опрос пользователей Eiffel. Спрашивали, за что им нравится язык, что в нем не хватает, персональные пожелания пользователей и т.д. С результатами можно ознакомиться тут:
http://www.eiffel.com/files/eiffel_user_survey_2010.pdf

eao197 комментирует...

@Quaker: за ссылочки по Eiffel спасибо, не слышал про них. На вопрос D vs Go я отвечу чуть позже.