Showing posts with label языки программирования. Show all posts
Showing posts with label языки программирования. Show all posts

Wednesday, July 02, 2008

Io

Тут Семка после сдачи диплома активно взялся за язык io, и генерирует чуть ли не ежедневно крайне познавательные статьи про него, очень рекомендую: раз, два, три.

Язык крайне приятный, очень объектно-ориентированный и минималистичный, любителям smalltalk, javascript, ruby или lisp должно понравиться.

Кроме того, у нас есть целый irc канал #io-ru на freenode, так что если ио заинтересовал — присоединяйтесь, да и просто заходите, там уже тусуется некоторое количество знатных рубихакеров и хаскелеводов.


Thursday, November 08, 2007

Угадайка

Как думаете, какой язык поддерживает сразу

  • First-class функции, лямбды и замыкания;
  • параметризованные типы;
  • хвостовые вызовы;
  • array comprehensions;
  • ООП с классами и интерфейсами;
  • ООП на основе прототипов;
  • мультиметоды;
  • coroutines (оператор yield);
  • структурные и номинальные подтипы;
  • перегрузку операторов;
  • Nullable/Non nullable аттрибуты для всех типов.

Ну и по мелочи: for-each, array slicing а-ля питон, регулярные выражения, открытые пространства имен и пр.

Однако ж это все ожидается в чудесном новом Javascript ECMAScript 4!

Еще  одна из самых интересных возможностей в четвертой версии — опциональная статическая проверка типов. Это должно упростить написание сложных систем (засчет строго описанных интерфейсов), и помочь [jit] компиляторам иногда генерировать более эффективный код. Опциональные статические типы, похоже, становятся модными: в Python 3000 тоже не так давно добавили что-то похожее.

Четвертая версия пока получается довольно пестрой — появилась куча новых механизмов и языковых конструкций (см. выше), а совместимость с предыдущей версией надо, по возможности, сохранить — поэтому синтаксис местами получился довольно странный: скажем, [int] это массив целых чисел, а [int, string] — это уже кортеж из целого и строки.

Еще из забавных вещей — явная поддержка структурных типов. В частности, с помощью специального оператора like можно задать переменной структурный тип (то есть ей можно присвоить только объект, обладающий набором заданных свойств):

var foo : like {x : int, y : int};

А переменная, объявленная с ключевым словом wrap автоматически дополняет хранимый в ней объект нужными свойствами:

var bar : wrap foo { x : int, y : int} = {x : 10, y : 20}.

Может и не революционная фича, конечно, но выглядит крайне интересно.

В ECMAScript 4 обещают также обязательную оптимизацию хвостовых вызовов. В Python 3000 их точно не будет, с руби ситуация туманна —что делает ES4 лучшим выбором в качестве платформы для компиляторов с функциональных языков. В общем-то уже сейчас есть компиляторы, как минимум, OCaml, SML и Haskell, генерирующие код на ECMASCript 3.

Собственно мощь и текущей-то версии js во многом недооценена. Кстати, только я не знал, что автор один из авторов первой версии Javascript — Гай Стил мл., а в качестве основных источников вдохновения при разработке Javascript 3 авторы называют языки Scheme и Self?

Новый Javascript явно претендует на что-то большее. Если он действительно будет "принят на вооружение" — определенно можно ожидать появления изрядного количества серверных приложений и фреймворков на js. Во всяком случае, язык получился явно не слабее питона и руби — хотя, конечно, вряд ли средства интеграции с кодом на C и C++ будут тут столь же развиты, ниша у языка все-таки другая.

Ссылки:


Wednesday, August 29, 2007

Самый популярный функциональный язык

... чей рантайм установлен практически на каждом компьютере — это XSLT, язык для трансформации XML документов.

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

Все это в изобилии можно наблюдать в замечательной XSLT-библиотеке FXSL, разработанной Димитром Новачевым. Реализации большинства функциональных идиом, таких как композиция функций, операций со списками по мотивам хаскелевской стандартной библиотеки — map/filter/foldl/zipWith и т.п. Более того, в cvs-версии библиотеки можно найти даже реализацию небольшого LR-парсера на чистом XSLT 2.0

Конечно, выглядит не очень прозрачно, вот например использование foldl для вычисления произведения элементов списка:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foldl-func="foldl-func"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f foldl-func"
>

   <xsl:import href="../f/func-foldl.xsl"/>

<!--
    This transformation must be applied to:  
        ../data/numList.xml                  
                                             
        Expected result: 3628800 or 3.6288E6 
-->
   <foldl-func:foldl-func/>
   <xsl:variable name="vFoldlFun" select="document('')/*/foldl-func:*[1]"/>
    <xsl:output  encoding="UTF-8" omit-xml-declaration="yes"/>

    <xsl:template match="/">
      <xsl:value-of select="f:foldl($vFoldlFun, 1, 1 to 10 )"/>
    </xsl:template>
    
    <xsl:template match="*[namespace-uri() = 'foldl-func']"
     mode="f:FXSL">
         <xsl:param name="arg1" select="0"/>
         <xsl:param name="arg2" select="0"/>
         
         <xsl:value-of select="$arg1 * $arg2"/>
    </xsl:template>

</xsl:stylesheet>

Created with colorer-take5 library. Type 'xslt2'

В качестве примеров более серьезных программ на XSLT — решалка головоломки Sudoku и CSV2XML конвертер,написанные товарищем по имени Andrew Welch, у которого есть еще очень интересный блог по XSLT.

Если захочется поиграться, берите saxon в качестве XSLT процессора — поддержка XSLT 2.0 в MSXML только планируется (а в Orcas ее точно еще не будет)

Ссылки:


Monday, July 23, 2007

Динамические языки под .net продолжают размножаться

Прошло всего-то два месяца после выхода библиотеки Microsoft DLR, а реализации разных динамических языков растут буйным цветом. Основные все уже на подходе:

  • Python — ну IronPython не в счет, потому как из него DLR собственно и вырос
  • Nua - проект интерпретатора lua под .net было загнулся, но теперь авторы его активно реанимируют и переносят на рельсы DLR.
  • И, наконец, Ruby - исходники IronRuby сегодня выложены в открытый доступ, под Microsoft Permissive License. Говорят, по синтетическим тестам уже эта версия кое-где обгоняет Ruby 1.8.6.

Ожидается также в скором времени реализация "самого недооцененного" языка — ECMAScript, он же javascript.

Все это довольно радужно, интегрировать какой-нибудь скриптовый движок в свое десктопное приложение получается совершенно раз плюнуть. Не нужен ни громоздкий windows scripting host, все получается даже проще чем подход в boost::python/lua и SWIG.

Веб-приложения тоже выигрывают, можно, скажем, иметь IronPython / IronRuby как фронтенд для интерфейса и всяких несложных операций, и C#/F# как бэкенд. Правда, насколько я понимаю, связь тут обычно все равно через RPC идет, но общая платформа (.net) это дело должна все равно упростить.

Усиленно надеюсь на ответный удар от Sun — хорошо работающий и отлаженный набор Java/Scala + JRuby/JPython.


Tuesday, June 26, 2007

Стековые языки

Почему-то наиболее активно пишущими блоггерами в области языков программирования и computer science в моей rss читалке последнее время оказываются авторы двух стековых языков -- Cat и Factor. Если пробежаться по ссылкам — оказалось в этой области происходит много интересного.

 * * *

Наиболее известным и распространенным стековым языком до сих пор является Forth, а в 80-е он вообще очень широко использовался в embedded системах. Чуть ли не каждый третий девайс программировался на Форте.

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

Вот функция которая возводит аргумент в квадрат

SQUARE ( a -- b ) DUP * ;

В скобочках это комментарий (обозначает что на входе одно число, на выходе одно), DUP клонирует значение на вершине стека, * берет со стека два значения, умножает, и кладет результат на стек.

Затем году в 2001-м появился чисто функциональный стековый язык Joy. Состояния, как и полагается в функциональном языке — нету, абстракций (формальных параметров у функций) нету тоже, в целом все весьма похоже на point-free стиль в Хаскеле. Функции рассматриваются как пробразования Stack -> Stack. Есть higher-order функции и прочие замечательные вещи.

Joy в свою очередь вдохновил еще нескольких товарищей на создание еще нескольких интересных вариантов стековых языков.

Во-первых, Factor — динамически типизированый стековый язык, с функциями высшего порядка, сборкой мусора. Портированый на приличное количество платформ и динамично развивающийся.

Во-вторых, Cat — чисто функциональный стековый язык со статической типизацией и мощным выводом типов. Причем с последней версии типы автоматически выводятся вроде как для любой валидной программы на Cat.1

И, в-третьих — Enchilada, тоже чисто функциональный язык, предназначенный для параллельных вычислений. Замечателен тем, что строго статически типизирован, но тип в нем всего один — это список. То есть, скажем, число 3 считается эквивалентным списку, содержащему три пустых значения. В общем почитать очень интересно, например, умножение чисел там реализовано через декартово произведение таких списков, а по дизайну Enchilada очень напоминает APL-подобные языки, только с более человеческим лицом.

Ссылки:


Ну и про форт немного интересного до кучи:

1Получается это вроде как засчет использования equirecursive типов. Почему в Хаскеле/ML используются isorecursive типы я еще не осознал, если кто объяснит -- буду очень благодарен :)


Tuesday, May 29, 2007

Функциональные языки: вести с полей

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

Haskell

Мейнстримом, понятно, ему не быть, слишком много сложных экспериментальных фич, язык, крутая learning curve -- учитывая все это, можно сказать что хаскель уже популярен донельзя. Кое-где даже встречается в объявлениях о поиске сотрудников, у "них" вот Credit Suisse его использует. Pugs тоже сыграл большую роль в том что название "хаскель" слышали даже не очень сильно интересующиеся вопросом товарищи. Насчет того чтоб он как-то серьезно применялся в России -- не слышно и не видно.

O'Caml

Окемлу лет тоже уже много, так что резкие всплески популярности он уже пережил -- самый прагматичный язык, с замечательным оптимизирующим компилятором. В Jane's Capital вроде как его активно любят (почитать можно тут). Рекрутеры продвинутые тоже знают. Вот тут  люди в Москве на нем даже игры разрабатывают.

F#

Бурно развивающийся диалект Ocaml'а для .net. Точнее от ocaml он уже довольно-таки далеко. Огромный плюс в том что засчет использования .net нахаляву получаем интеграцию с C#, гуи и IDE. В этом году выходят сразу три книжки по F#,  активно пиарятся две консалтинговые конторы специализирующиеся на F#: вот и вот. ИМХО вполне себе положительный знак. Программеров на F# правда пока никто не ищет.

Scala

Новый язык, на базе JVM, поддерживает кучу интересных фишек, типа GADT, ОО модель плотно интегрирована с функциональщиной. Больше всего сейчас слышно про веб-фреймворк на scala -- lift. В качестве killer app приводится клон вебдваноль сервиса twitter в 800 строчек, вроде как способный обслуживать до миллиона юзеров с одного сервера. В общем, по мне так -- язык просто замечательный, даже приятнее окемла.

Становится все популярнее и популярнее -- у меня в google alerts уже половина упоминаний scala относится к языку программирования, а не к одноименному оперному театру. Полгода назад показатель составлял 20%.

Erlang

Эрлэнг это, кажется, наиболее успешный функциональный язык после excel'я -- потому что изначально создавался для решения практических задач, и рассчитан на относительно низкий порог вхождения для обучаемых программистов. Killer App из мира open source это jabber-сервер ejabberd. Ну и хрестоматийный пример про маршрутизатор AXD301 на эрланге.

В плане работы -- есть несколько организаций в России которые, похоже, используют Erlang вполне промышленно. Судя по объявлениям о приеме на работу в Питере это StanaPhone (российское отделение крупной американской компании, разрабатывающей VoIP приложения). А в Москве прям сейчас ищет Erlang-программистов довольно крупная медиа-компания A1.


Friday, May 04, 2007

Динамические языки внутри .net и JVM

В продолжение к предыдущему посту — а собственно почему столько шума? Зачем столько пафоса при релизе DLR?

А дело все в том, что и sun и microsoft последние несколько лет внимательно смотрят в сторону динамических языков. Потому как различные php, python'ы и ruby играют нынче мощную роль на рынке — и на этот рынок, конечно, хочется влиять.

Когда создавались .net и JVM основной их задачей было соответственно выполнение C# и Java программ, об остальном их создатели думали не столь внимательно. Как заметил автор этой презентации, по аналогии с известным высказыванием Г. Форда, "вы можете запустить на .net любой язык, если это C#".

Однако вскоре стало понятно что одной явой и C# при написании веб-приложений сыт не будешь, тут-то собственно языки тоже заинтересовали и sun, и ms — последняя наняла Jim Huguin'а, автора JPython, а sun прошлым летом наняла авторов JRuby.

Проблемы реализации прежде всего вырастают из того факта, что и CLI, и JVM прежде всего ориентированы на языки со статической типизацией — у них даже байт-код строго статически типизированный. А динамическому языку нужно позднее связывание (оно же динамическая диспетчеризация) — при вызове a.someMethod() какой именно метод вызывать выясняется во время выполнения, основываясь на динамическом типе значения a. Причем a вообще может не иметь такого метода — это заранее неизвестно.

А при вызове call, callvirt в .net мы должны заранее, статически, знать класс объекта (как и при вызове метода — обычном или виртуальном — в C++).

Конечно, проблема решается довольно-таки очевидным способом — в CLR и java все классы наследуются от корневого Object — соответственно процедуры в динамическом языке получают тип Object someMethod(Object[] args), и в местах вызова вставляется код который ищет в словаре соответствующий метод у объекта. С одной стороны тут возникает некоторое количество сложностей, с другой — благодаря развитому reflection'у и генерации кода на лету — все проблемы решаются, и даже получается оптимизировать такие вызовы — если в o.someMethod() значение переменной o имеет всегда один и тот же тип, каждый раз тратить O(logN) времени на поиск по словарю не надо, и т.п.

Эффективные, обкатанные на IronPython решения для этой и других (динамическая типизация, изменение классов на лету, closures...) проблем как раз и предоставляет DLR. Для JVM кстати что-то похожее уже создавалось — однако то ли эту библиотеку вообще не релизили, то ли я плохо искал. А вообще уже несколько лет тянется процесс добавления в яву байт-кода invokedynamic — который будет как раз реализовывать позднее связывание на уровне виртуальной машины.

Теперь интересные линки:
Итого, что мы имеем из динамических языков, компилируемых в байт-код:
на JVM: JPython, JRuby, Groovy на CLI: IronPython, JScript.Net, VB.NET, PHP (На самом деле динамических языков намного больше, но остальные вроде как в байт-код напрямую не компилируются).

JVM:



.NET:


Tuesday, May 01, 2007

Microsoft Dynamic Language Runtime

Сегодня наш любимый большой брат microsoft сделал еще шаг навстречу динамическим языкам на платформе .net: на конференции mix'07 объявил о релизе DLR -- Dynamic Language Runtime, по аналогии с известным всем Common Language Runtime.

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

А библиотека эта выросла из проекта IronPython -- реализации Python под .net созданной CLR Team. Основной в этой команде инжынер Jim Hugunin, до того как его взяли в майкрософт, написал на досуге компилятор Python под JVM. Дядька, в общем, в высшей степени интересный, блог его тут.

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

Да, все это происходит в контексте усиленного продвигания майкрософтом своего веб2десктоп фреймворка Silverlight, так что по ссылкам он упоминается очень интенсивно -- не удивляйтесь :)

Еще пара ссылок:


Friday, April 20, 2007

VB for DOS

Сейчас вот наткнулся на ностальгический пост Нейла Митчелла (рекомендую, кстати, блог) про версии Visual Basic'а которые он юзал, и вспомнил про намного более гламурный чем все эти VB 3,4,5,6 настоящий Visual Basic 1.0 for DOS

Мега-вещь была, дельфи отдыхает -- настоящая RAD среда под DOS, рисование мышкой контролов, назначение всяких событий им, и все в стандартном 80x25 текстовом режиме!
Если вдруг кому-то тоже хочется поностальгировать, тут валяется дистрибутив :)


Tuesday, March 06, 2007

Очень параллельные языки

В продолжение к предыдущему посту, как пример параллельного языка который мог бы неплохо лечь на GPU (с серьезными изменениями конечно) -- ZPL.

Намного более дружественный синтаксис чем у APL (не нужна специальная клавиатура :), и даже чем у его диалектов J и K.

Выглядит вот так:

region R = [1..n, 1..n ];
RowVect = [ * , 1..n ];
ColVect = [ 1..m, * ];
var M: [ R ] double;
    V: [ RowVect ] double;
    S : [ ColVect ] double;
  [ ColVect ] S := +<<[R ] (M * V);

Замечательное введение в ZPL в комиксах можно смотреть тут.

В общем-то влияние APL на него чувствуется весьма, жалко в отличие от J он функциональным таки не является.

Зато есть функциональный язык NESL, умножение матрицы на вектор на нем выглядит вообще довольно непримечательно для тех кто видел какой-нибудь непараллельный функциональный язык:
 sum({v * x[i] : (i,v) in row});

Что неудивительно, поскольку любой функциональный язык, все эти filter'ы и map'ы просто так и просят чтоб их распараллелили.

Ну и естественно Data Parallel Haskell наше все:
smvm sm vec = 
[: sumP [:x * (vec!:col)|(col, x)<-row :]|row<-sm:]
Это опять таки умножение матрицы на вектор, и неспроста авторы DPH главным прототипом своей библиотеки считают NESL. Поэтому можно было и не приводить этот пример, но не упомянуть про Хаскел я не cмог :)


Monday, February 19, 2007

Z++

Нечаянно наткнулся на забавных техасских парней, торгующих компилятором языка Z++.

Язык этот содержит кучу надерганых отовсюду, часто просто дурацких фич, типа специального кейворда canvas для рисования GUI, не-ленивых версий && и ||, и т.п. Также авторы легким движением руки выкинули все лишнее, типа целых чисел параметров шаблонов и классов исключений (эксепшены могут быть только enum-ами), несмотря на это язык по мнению авторов является надмножеством C++.

При чтении туториала периодически вспоминалась старая первоапрельская статья Страуструпа про перегрузку operator whitespace.

В общем сравнению со всем этим D и прочее это просто детский лепет.

Авторы считают язык мега-кроссплатоформенным (версии для windows, linux и palm), обзывают трехсоткилобайтный рантайм "виртуальной машиной" и, видимо, очень не любят яву: в табличке "сравнение фич C++, java и Z++" в колонке для явы практически одни No, в количестве 22 штук (единственное "partially" в графе portable, причем у Z++ там однозначный yes).

В порыве яваненавистничества ребята даже отказывают яве в наличии динамических массивов, enum'ов и шаблонов:

Преимущества Z++ над Java и C++

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


Sunday, January 14, 2007

Язык B и первый в мире hello world

Многие знают что до языка C++ был язык C, который, в свою очередь, вырос из языка B.

Выглядит он, надо сказать, довольно забавно с точки зрения C++ программера. Почитать про него можно тут на сайте bell labs. Почти все фичи присутствуют в C++, но есть некоторое количество всяких смешных нюансов:

  • типов в нем не было. то есть
    auto i; i = 3;
    
    это не C++09, как думают некоторые, это B :)
  • конструкции for там тоже не было. Был только while.
  • зато тернарный оператор ?: уже был
  • массив v[10] содержал 11 элементов с индексами от 0 до 10. Видимо эта фича как-то в генетической памяти записана, не знаю как можно иначе объяснить количество ошибок с доступом к одиннадцатому элементу в C++
  • в качестве escape-character использовался *, а не \. То есть "hello world*n" вместо "hello world\n"
  • да, и сама фраза "hello, world" впервые появилась именно в туториале к B (ну то есть стопроцентно, конечно, тут сложно утверждать, но похоже на то)
    *барабанная дробь* Исходник:
      main( ) {
        extrn a, b, c;
        putchar(a); putchar(b); 
        putchar(c); putchar(’!*n’);
      }
      a ’hell’;
      b ’o, w’;
      c ’orld’;
    


Monday, January 08, 2007

Глагол

В [info]ru_brainfucker обнаружена ссылка на фееричный язык "Глагол". Разрабатывается с 2003 года до сих пор.
Выглядит волшебно

ЗАДАЧА Голова();
ПЕР
  ч:Читать.Поток;
  п:Писать.Поток;
  чимя:Файл.ВПолного;
  двв,рез:КЛЮЧ;
  парам:ЦЕЛ;
УКАЗ
  парам:=1;
  ЕСЛИ парам >= Параметр.всего ТО 
    Ошибка1("Нет параметров") 
  КОН;
  Параметр.Текст(парам,чимя);
  ЕСЛИ чимя = "ВДОС" ТО
    двв:=ОТКЛ
  АЕСЛИ чимя = "ВВИН" ТО
    двв:=ВКЛ
  ИНАЧЕ
    Ошибка1("Неверный параметр")
  КОН;
  УВЕЛИЧИТЬ(парам);
  ЕСЛИ парам >= Параметр.всего ТО
     Ошибка1("Нет имени входного файла") 
  КОН;
  Параметр.Текст(парам,чимя);
  ЕСЛИ НЕ ОС.ПервыйПоискФ(чимя,поиск) ТО 
     Ошибка2(чимя," не найден(ы)") КОН;
  НовоеИмя
КОН Голова;
Лично мне больше всего нравится АЕСЛИ вместо elseif и ОТДЕЛ вместо паскалевского unit. Плюс к этому в дистрибутиве все файлы называются по-русски, типа "построить.bat" вместо "build", "опись" вместо descript.ion, "уборка.bat" – clean и т.п.

Живенько так представляешь, как выглядят какие-нибудь исходники на паскале для англоязычного нейтива. Правда в английском меньше различных склонений, так что, наверное, оно смотрится не так несуразно.

Ну а сама идея перевести паскаль на русский, конечно, далеко не нова. Собственно первый язык программирования, который я увидел, он примерно так и выглядел, назывался "Рапира" и работал, кажется, на мощном двухпроцессорном ПК "Электроника МС 0202".

Однако ж я думал что с тех пор такие фанаты русского языка от computer science как-то перевелись..


Tuesday, December 12, 2006

Функциональные языки разрушают мозг

Why learning Haskell/Python makes you a worse programmer
Отлично написано, читаю и просто таки узнаю себя в каждой строчке (ну разве что C++ вместо C#) -- с некоторых пор пишу на C++ и натурально плачу, плачу и пишу..


Thursday, December 07, 2006

Haskell In Action

Написание на хаскеле не миниатюрных экспериментальных примеров, а чего-нить более-менее серьезного и в конкретные сроки оказалось не таким уж простым процессом. Кто бы мог подумать :)

Открытия:

  • typechecker не спасает от семантических ошибок :) Черт, я в глубине души надеялся что если прога компилится, значит она работает правильно..
  • возникновение косяков с размерностью типов в битовых операциях. Мне на интуитивном таком уровне казалось, что это проблема возникает в С из-за автоматических преобразований типов -- ан нет :)
  • mutable массивы в хаскеле, языке без side effects и со строгой типизацией -- это такой космический хайтек.. :)
  • "ленивость" вычислений все еще неиссякаемый источник сюрпризов для меня и в плане производительности, и в плане сообщений которые выводятся с помощью Debug.trace :)
  • unit тесты это просто таки жизненная необходимость в хаскеле, и писать их намного легче и приятнее чем в C++.

to be continued, как говорится..


Thursday, August 24, 2006

J

Настоящий гуру должен освоить три известных коммерческих языка программирования:
1. Haskell (варианты: ML/Caml/O'Caml/F#)
2. Lisp (варианты: Common lisp,scheme..)
3. APL (варианты J, K, A+)

Первый пункт я начал выполнять уже давно, второй тоже очень медленно идет в фоне, а вот до третьего руки никак не дотягивались.

Сегодня, кажется, дотянулись до J.  Во многом благодаря тому факту, что APL-like языки -- это кажется единственное, на чем можно писать из-под Pocket PC.

Вообще на PPC существуют компиляторы C, lisp, python, есть даже портированый gcc. Но после набирания первых двух строчек на python с помощью экранной клавы стилусом весь энтузиазм пропадает. А посмотрите, как красиво выглядит пересечение множеств (списков) на J:

    setintersect =: e. # [
(1 2 3) setintersect (3 4 5)
3