Ищу ЯП, чтобы можно было легко писать разные математически-направленные проги. Ну посчитать что-нибудь (по ТВ, например) или переборную задачу и т. п. Главное удобство, пусть даже в ущерб скорости.
Вам нужен язык, обеспечивающий хороший уровень абстракции - такие языки традиционно относят к "декларативной" парадигме. Это нужно для обеспечения высокого показателя Code Reuse - чтобы и вам самому не пришлось по десять раз переписывать одну и ту же мат.функцию для разных применений, и люди, занимающиеся прикладными науками, не взаимодействующие с математикой напрямую, могли воспользоваться вашими наработками.
Из более-менее распространённых - диалекты и потомки Lisp (Scheme, Common Lisp), ML (SML, OCaml, Haskell); логические (Prolog). Из коньюнктурных соображений можно взять и мультипарадигменные/гибридные (вроде Python), но они могут быть для вас менее удобны, т.к. изобилуют сугубо программерскими (не математическими) фишками. Специально для ваших целей разрабатывается Fortress (ФПшная замена Фортрана). Рекомендую также первоначально поиграться с языками Рефал и Joy - это очень простые языки, но с весьма экзотичной семантикой - их усвоение поможет лучше понять многие аспекты других языков, более характерные сугубо для программирования (не математики), выбить из головы последствия императивного программирования и научиться более элегантно использовать тот же Haskell, избегая
вот таких казусов. Erlang - узко специализированный инструмент, так что не факт, что он будет для вас наилучшим выбором (хотя его достоинства здесь озвучены), он всё-таки больше для телекоммуникаций и прочих тяжело нагруженных серверов.
>
Maslov:
Вам нужно учиться отличать причину от следствия и извлекать из любого факта его первопричину - в этом умении и заключается разница между "устройством" головы и её "наполнением". (Даже информация непосредственно от первоисточника может быть не первопричиной, а следствием - если первопричина была для автора слишком интуитивно-самоочевидной, чтобы её озвучивать; если написанием руководства занимался ассистент с неправильным пониманием идейной сути, заложенной автором; если были применены общепринятые buzzwords ради популяризации продукта среди хомячков; ради умышленного сокрытия первопричин из соображений высокомерия, и пр.)
Например, к вашему сведению, отказ от присваиваний в ФП - это следствие, а не первопричина (и потому зачисление Лиспа в функциональную парадигму, вообще говоря, ошибкой не является). То же касается и основанности Лиспа на лямбда-исчислении. То же, естественно, касается и роли list comprehensions в Хаскеле. Более того, я таки вчитался в ваше описание внутреннего представления 'foreach' на C# и обнаружил, что оно полностью аналогично оному для Python. Просто вы смысл текстом изложили перректально, перевернув с ног на голову все причинно-следственные связи, по-алголовски - поэтому я сразу и не понял. Я же говорил
в другой теме, что алгольщик так везде по-алголовски писать и будет. Хорошее программирование от плохого отличается направлением мышления. Хороший программист думает: "
нам требуется получить такие-то и такие-то вещи, давайте теперь подумаем, что нам потребуется сделать, чтобы их реализовать?", а плохой - "
в нашем распоряжении есть такие-то и такие-то вещи, давайте теперь подумаем, что мы можем с их помощью реализовать!". (Собственно, второе направление и привело к выращиванию уродливой раковой опухоли под названием "С++ и БООСТ (Большая Опухоль От Страусовых Темплейтов)"). Вам может показаться, что на практике эти направления будут пересекаться и чередоваться, но это алголовское заблуждение. Хорошее программирование всегда идёт от
что к
как; а если вы будете играться с
каками, надеясь сложить из них
что-нибудь, то облом - только
каку и получите.
Так вот,
необходимость прописывать методы 'iter/next' ('GetEnumerator/MoveNext' у вас) - это вынужденность, проявившаяся из необходимости существования в языке 'foreach', а никак не наоборот. Это не "сахар над языком", это сам язык. С таким же успехом можно было бы назвать конструкторы и деструкторы в С++ - "сахаром над классами". Просто тем программистам, которые понимают важность глаголов для выражения своих мыслей, требовался высокоуровневый глагол 'foreach', но в
Королевстве существительных, в котором вы живёте, для его реализации пришлось издать королевский указ об обязательном содержании высокопоставленными существительными у себя в подчинении мелких глагольчиков 'iter/next'. Причина и следствие. Вы, конечно, можете вызывать 'iter/next' напрямую, императивно, но этим вы нарушите абстракцию, получите VB/Delphi-программу на Python и поставите архитектуру под угрозу фатального краха при изменении ТЗ.
вопрос-то был в другом: знаете ли Вы, в каких языках 'region inference' применяется для управления памятью?
Если вы ещё не заметили, вопросы здесь задаю я.