xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Category:

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

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

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

Язык
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. С таким перфекционизмом недолго и с ума сойти. Вот, например, скала. Интересный язык с пачкой эксклюзивных фич (имплициты, система типов), но и тараканов тоже хватает. В данный момент мне кажется, что у языка просто должны быть какие-то совсем базовые вещи (ФВП, коллекции, строки, уникод), а с тараканами просто надо дружить. Сейчас мне более интересно искать фан в энвайронменте разработки.
Tags: dreams2011, tools, wetware
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 18 comments