StudentML

Язык

Выражения языка:

    • Литералы
      • Целочисленные
      • Плавающая точка
      • Булевские константы: true, false
      • Константа типа unit: ()
      • ? Строковые
    • Арифметические выражения
      • + - * /
      • Возможен отдельный набор набор операций для чисел с плавающей точкой, например: +. -. *. /.
    • Скобки: круглые "(...)" и "begin ... end"
    • Идентификаторы
    • Конструкция let: 'let <id>=<expr> in <expr>' для связывания идентификатора со значением и определения области видимости
    • Например: let x = 2*2 in 3 * (let y = 1 in y+x)
    • Анонимные функции
    • Например: (fun x -> x+1)
    • Вызов функции
    • Например: (fun x -> x+1) 5 или (f 5)
    • Рекурсивные функции: let rec f = expr1 in expr2, при условии, что expr1 вычисляется к функциональному значению
    • Например: let rec fact = fun n -> if n > 0 then n * fact (n-1) else 1 in fact 5
    • Последовательность выражений: expr1; epxr2
    • Логические выражения:
      • Логические операции: || && !
      • Сравнение: = <> > < >= <=
    • Условный оператор: if expr then expr1 else expr2
      • ? допускается форма "if expr then expr1" при условии, что expr1 возвращает тип unit

Библиотечные функции:

    • println: 'a -> unit

Система типов:

    • Динамическая типизация:
      • int
      • boolean
      • float
      • unit
      • функции: a -> b (замыкание)

Минимальные требования к интегрированной среде разработки (ИСР, IDE) разрабатываемой командой

    • Проработанный пользовательский интерфейс
    • Редактор с подсветкой синтаксиса и ошибок
    • Автоматизация запуска программ
    • Встроенный пошаговый отладчик

Темы исследований на 2011 год:

    1. Парсер
      1. Отложенный вызов лексера/парсера для снижения нагрузки
      2. Инкрементальный лексер
    2. Системы типов
      1. Статическая СТ с явными типовыми аннотациями
      2. Например, let x : int = 2+2 in x+1
      3. Полиморфные типы в СТ с явными типовыми аннотациями.
      4. Применение алгоритма унификации для реализации статической СТ без явных типовых аннотаций.
      5. Применение алгоритма унификации для реализации статической СТ без явных типовых аннотаций с полиморфными типами.
    3. Интерпретатор/отладчик
      1. Отладчик, реализованный в отдельном потоке
      2. Реализация пошагового отладчика для итеративного интерпретатора
      3. Отладчик с возможностью отката состояния
      4. Интеграция с внешним отладчиком (межпроцессовое взаимодействие)
    4. Использование AST в IDE
      1. Переименование связанных вхождений идентификатора
      2. Outline -
      3. Свёртка кода - collapse/expand для структурный частей кода
      4. Autocompletion - автодополнение имени идентификатора
    5. Run-time libraries
      1. Система конфигурируемых системных библиотек
      2. Модульная поддержка в языке