?

Log in

No account? Create an account

Wish list возможностей языка и платформы - Excelsior

May. 15th, 2010

12:46 pm - Wish list возможностей языка и платформы

Previous Entry Share Next Entry

В свете критического анализа возможностей моего текущего ЯП и энвайронмента я решил обратить внимание на любые из альтернатив. Так как кругозор у меня не то что бы супер, обращаюсь за помощью - если есть какие-нибудь советы и предложения на эту тему, я с радостью их выслушаю.

Чтобы что-то оценить, надо, конечно, иметь какие-то критерии. В этом посте будет немного упорядоченный поток моего сознания на тему того, какие фичи мне особенно дороги. Получился немаленький список, но что-то я, наверняка, забыл. Очень интересны будут ваши комментарии на тему того, что в списке лишнее и что, наоборот, не упомянуто, хоть и очень важно. Вообще, всегда здорово узнать, что я делаю не так =)

Язык
1. Нативное функциональное программирование: функции высшего порядка, выведение типов (хотя бы на уровне шарпа), замыкания, параметрический полиморфизм. Приятны будут нативная поддержка таплов, рекордов, литералов коллекций и мапов.
2. Насчет полной ленивости не уверен, ибо не пробовал никогда, но ленивость сиквенсов нужна обязательно.
3. На тему вопроса типизации тоже не уверен, ибо никогда не пробовал писать что-то большое на динамически типизированном языке.
4. Нативная поддержка объектно-ориентированного программирования некритична. Действительно важна для меня возможность объединить вместе и положить отдельно от остального кода некоторый кусок данных и набор функций, которые с ним работают.
5. Средства структуризации в плане возможности объединить вместе и положить отдельно от остального кода интересные мне фрагменты программы. Очень желательно, чтобы гранулярность была на уровне функций, а не классов.
6. Нативная поддержка исключений: try, catch, finally. Сюда же и стек трейсы (понимаю, коммон сенс, но вдруг где-то этого нет).
7. Средства перегрузки функций по сигнатуре. Сколько я не читал, что это вредная языковая фича, никак не могу придумать, как я бы работал без нее. Возможно, я что-то неправильно понимаю.
8. Паттерн-матчинг, причем желательно работающий с кастомными структурами данных аля актив-паттерны в F#.
9. Поддержка интерфейсов и/или тайпклассов.
10. Желательна возможность вызова функций в ОО-стиле или какого-нибудь другого способа читаемым образом выражать семантику чейнинга вызовов (например, аля |> в F#).
11. Чем больше выразительности, тем лучше. Энумы, кастомные операторы, проперти, индексеры, икстеншн-методы, статик импорты, сиквенс-компрехеншны, итераторы/генераторы, монады - все это только в плюс. Много чего из этого можно достичь жестоким метапрограммированием, но, если можно обходиться без него, то это замечательно.

Компилятор/среда исполнения
1. Горбатый коллектор, крайне желательно иметь над ним контроль как минимум аля KeepAlive и WeakReference.
2. FFI, очень желателен интероп с дотнетом.
3. Очень желательно наличие рефлектора, который является лучшей документацией.
4. Поддержка связывания метаданных с элементами программы.
5. Интроспекция структуры исполняемого модуля и AST отдельных функций.
6. Кодогенерация в рантайме с поддержкой эмита дебажной инфы.
7. Опен-сорс хотя бы компилятора.

Набор библиотек и тулов
1. Библиотека коллекций и ФВП работы с ними.
2. Уникодные строки, к ним прикрученные регексы.
3. Адекватные дата и время.
4. Маппер структур данных на RDBMS или, на худой конец, просто голый ODBC.
5. Средства работы с I/O, плюс важный частный случай, описанный ниже.
6. Веб-сервер, средства работы с HTTP или, на худой конец, сокеты.
7. Сериализация.
8. Желательны стоковые средства RPC.
9. Генератор парсеров.
10. Не помешают уже написанные средства работы с XML и JSON (парсинг, манипуляция, стрингифай).
11. Стримлайновый подход для построения десктопного гуи, желательно с поддержкой MVC. Дизайнер это, конечно, плюс, но он необязателен, ибо на текущий момент я не делаю таски, которым необходим сложный гуи.
12. Удобная система билдов, желательно не требующая программирования на XML.

upd от 23.06.2011. С таким перфекционизмом недолго и с ума сойти. Вот, например, скала. Интересный язык с пачкой эксклюзивных фич (имплициты, система типов), но и тараканов тоже хватает. В данный момент мне кажется, что у языка просто должны быть какие-то совсем базовые вещи (ФВП, коллекции, строки, уникод), а с тараканами просто надо дружить. Сейчас мне более интересно искать фан в энвайронменте разработки.

Comments:

[User Picture]
From:thedeemon
Date:May 15th, 2010 01:12 pm (UTC)
(Link)
Вроде, ближе всего к описанному Nemerle.
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:May 15th, 2010 08:33 pm (UTC)
(Link)
Спасибо! Еще пришла в голову идея Boo посмотреть.
(Reply) (Parent) (Thread)
[User Picture]
From:zeux
Date:September 29th, 2010 05:09 am (UTC)
(Link)
Ну, ммм, F#? :)
(Reply) (Thread)
From:M E
Date:February 19th, 2013 05:47 am (UTC)
(Link)
0. Отсутствие необходимости дружить с тараканами.
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:02 am (UTC)
(Link)
А где-то их нет?
(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 08:30 am (UTC)
(Link)
ммм... мне такой неизвестен

тут, кстати, имеет смысл выяснить, что есть тараканы (ну например неортогональность базовых фич языка, скажем)

и кстати на место "0" (т.е. перед всеми остальными) я эту фичу поставил вполне серьезно

(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:03 am (UTC)
(Link)
Вообще прикольные вещи я тут понаписывал ))
(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 08:32 am (UTC)
(Link)
ну так в общем на минимальный наборчик более-менее тянет, да

я могу высказаться по ряду пунктов
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:34 am (UTC)
(Link)
с удовольствием послушаю!
(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 08:39 am (UTC)
(Link)
ну я медленно и постепенно буду говорить... но вот что с ходу -- почему именно перегрузка функций по сигнатуре, а не тайпклассы?

в том смысле, что афайк перегруженная функция представляет собой не единую сущность, а разнородную группу (скажем, как ты ее целиком передашь в шаблон или, того хуже, в дженерик?)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:42 am (UTC)
(Link)
я поэтому и смайлик поставил в каменте выше. очень многое из списка навязано мировосприятием дотнета. я ж тогда тайпклассы не юзал, хоть и знал (практика была только с сишарпом) и не мучался с оверлоадами стопицот раз, реализуя те или иные фичи в компиляторе. сейчас у меня к оверлоадам отношение строго негативное. жаль, из скалы их уже не выкосить. жаба-жаба, ква-ква

Edited at 2013-02-19 08:42 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:44 am (UTC)
(Link)
еще насчет смайлика позабавило мнение меня предыдущего про метапрограммирование. кто знал, что все так выйдет :) ну и, опять же, я тогда работал только с МП в сишарпе, а там это сплошное мучение, поэтому и хотелось его по возможности избегать

Edited at 2013-02-19 08:49 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:47 am (UTC)
(Link)
ну и наконец, последний мажорный камент коснется пункта "нативная поддержка объектно-ориентированного программирования некритична". после знакомства с Скалой у меня сильно поменялось мнение об ООП. да, ограничения на вывод типов значительны, да, динамический диспатч вызовов временами делает статический анализ противным, но бенефиты хорошо сделанного статически типизируемого ООП невероятно привлекательны.
(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 09:08 am (UTC)
(Link)
тоже реквестирую более подробный рассказ об этом

в целом да, ооп круто, особенно если к нему добавить параметрического полиморфизма (который к нему явно лучше подходит, чем шаблоны)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 09:49 am (UTC)
(Link)
http://xeno-by.livejournal.com/75612.html
(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 09:02 am (UTC)
(Link)
вообще я не предполагаю срочного ответа мои вопросы (btw, я и сам могу вернуться к ответу на какой-то сложный вопрос скажем через годик-другой), плюс к тому когда будет настроение соответствующее и т.п.

насчет перегрузки -- мне было бы интересно услышать несколько кратких постановок задач (use case-ов) где происходит облом с перегруженными по сигнатуре функциями,

т.к. я например помню, что в плюсах сталкивался с сутуацией "я же написал SomeTemplate<f>, но почему же, епрст, он не может взять ВСЕ функции f, а берет только одну конкретную?!" но примеры не приведу

вообще (это о тараканах и о впечатлениях) очень было бы полезно любые свои обломы, даже глупые, записывать -- потому что даже глупые обломы квалифицированного программиста указывают на недостатки языка

я например просто обожаю такое читать, а свои записывать ленюсь, о чем желею

насчет "ква-ква" -- возможно даже можно выкосить, сохранив совместимость с явой


(Reply) (Parent) (Thread)
From:M E
Date:February 19th, 2013 08:36 am (UTC)
(Link)
я могу высказаться по ряду пунктов... но гораздо интереснее послушать про тараканы скалы (да и вообще *личные* *впечатления* о скале -- т.е. без необходимости высказываться офигенно обоснованно)
(Reply) (Parent) (Thread)
[User Picture]
From:xeno_by
Date:February 19th, 2013 08:40 am (UTC)
(Link)
хорошо, я напишу на днях. сегодня-завтра надо одну срочную штуку наколбасить.
(Reply) (Parent) (Thread)