В мире OCaml всё странно с проектированием GUI. Много фреймворков реализуют GUI с помощью реактивного программирования, но они специфичные для OCaml. Из общеприменимого можно называть Melange/ReasonML, который включает в себя поддержку программирования для Web с помощью ReactJS. Но HTML-движок имеет свои недостатки, в частности размер образа и производительность, по этому появились проекты React Native, Revery (свой нативный фреймворк для десктопа, где входной синтаксис повторяет проектирование на ReasonML для React, на данный момент заброшен) и Bogue (чисто OCaml, SDL2, GPU acceleration, по сути клон WinForms/Delphi/Swing).
Qt/QML остался без внимания. Это фреймворк для проектирования кроссплатформенных приложений для десктопа и смартфонов. Если не вдаваться в детали, то в нём три части: язык разметки, скрипты на JavaScript для написания простых преобразований GUI, и большое количество библиотек на С++.
Цель работы: скрестить Qt/QML и OCaml. Из этого можно выделять задачи и подзадачи на неопределенное количество человек.
частично сделано - Хочется, чтобы была возможность описывать всё (GUI и бизнес-логику) не уходя сильно от языка OCaml. Сейчас в Qt/QML GUI описывается на языке QML, хотелось бы, чтобы всё переехало внутрь OCaml. Как вдохновение можно посмотреть как совмещается Javascript и HTML тэги (так называемый JSX). - Я сделал эксперимент на эту тему с Camlp5. Там HTML тэги в коде раскрываются в вызовы функций. Информации о типах там, правда, нет, но может она на первых порах и не нужна. Если таки нужна будет -- придется делать как в ReasonML. - Когда у нас будет поддержка описания разметки GUI в OCaml, нужно будет перегонять эту разметку в вид, понятный Qt/QML. Для начала предлагаю порождать код на QML напрямую, и вставлять в код на OCaml показ окошка с соответствующим кодом. Сложности: - Надо придумать, как именно использовать одни QML компоненты в других QML компонентах - В QML можно вставлять код на JavaScript, но это можно оставить на потом - Это частично сделано в рамках учебных практик.
конь не валялся
В принципе можно сразу порождать С++ из OCaml, но из соображений - отладки и, - трудностей и неожиданных подводных камней, связанных с таким подходом думаю, что целесообразней начать с порождения QML
В зависимости от задач можно защищать как разное. Публикабельность пока не понятна, если удастся удачно встроиться в систему типов OCaml и навернуть типизацию -- может быть.
Первые задачи выглядят как курсовые. Публикабельность не понятна.
Ознакомительная задача про lablqml
Можно заниматься менее амбициозными задачами, а именно обязать пользователя писать на QML на QML, а логику на OCaml. Такой подход предлагается в проекте lablqml. Там осталось некоторое количество не очень сложных задач, я вижу их как ознакомительные или вводные для постепенного погружения в мир Qt/QML и OCaml. По сути надо взять некоторые прикольные особенности QML последних версий и поддержать примеры с оными в lablqml.
На семестр, для второго курса.
Это копия текста с https://kakadu.github.io/2024/topics#ocaml-qml. Исправления этой и другие тему будут публиковаться в первую очередь там. Также там можно найти и другие темы.
2 курс, 3 курс
Kosarev Dmitry
От себя лично