Skip to content

Latest commit

 

History

History
102 lines (81 loc) · 6.97 KB

links.md

File metadata and controls

102 lines (81 loc) · 6.97 KB

Clojure

Concurrency/

Software engineering ideas

  • railway-oriented-programming, про обработку ошибок и дизайн надёжных систем, F#. возможно, гораздо больше подходит для строго-типизированных языков, но основная идея применима и в кложуре https://fsharpforfunandprofit.com/rop/

  • Incremental -- UI-framework, OCaml (основная идея будет понятна без кода, но желательно примерно представлять ML-нотацию типов) https://youtu.be/R3xX37RGJKE

  • Backpressure: про потоки данных в очередях сообщений, обычно требую эту фичу в курсовой с конвеерной обработкой https://lucumr.pocoo.org/2020/1/1/async-pressure/

  • нечто похожее, кажется, с небольшим залезанием в "теорию очередей" https://youtu.be/m64SWl9bfvk

  • и ещё немного про стримы данных https://youtu.be/9RMOc0SwRro

  • Transactions: https://youtu.be/5ZjhNTM8XU8

  • в целом про бд: Что особенного в СУБД для данных в оперативной памяти https://youtu.be/yrTF3qH8ey8

Темы курсовых

Объектная модель

  • CLOS
  • разобраться с interface/mixin/trait/protocol
  • signle/multiple dispatch? (clojure multimethods)
  • multiple inheritance?
  • поддержка исключений или других механизмов обработки ошибок?
  • _конченная идея если мы примем идею о том, что вызов метода -- передача управления на адрес функции в памяти, то мы вполне можем (красиво) реализовать объектную модель на чём-то типа спредшитов (эксель?). можно попробовать сделать костыльный прототип на экселе и, если зайдёт, реализовать какой-то свой табличный процессор и уже в нём запрограммировать объектную модель

Представление данных в S-выражениях

  • возможно стоит не думать о парсинге выражений и просто использовать Clojure?
  • XML, XSLT, XPath, XML Schema
  • запросы к данным

Конвейерная обработка

Облачные вычисления

  • передача кода не будет главной проблемой в управляемых средах (java/.net)
  • распиливаем данные на кусочки, отправляем разным узлам, параллельно обрабатываем, собираем обратно (старый добрый MPI)
  • решаем задачу балансировки нагрузки, задачу о назначениях и много других

DI-контейнер

Объектная персистентность

  • реализуем библиотеку, с помощью которой можно
    • задать какие-нибудь отношения объектов через код (например, горсткой функций и макросов или каким-то другим DSL)
      • отношения могут быть
        • реляционными (можем использовать sqlite для их хранения)
        • графовыми (тут стоит посмотреть на секцию запросов к данным)
        • документными (но как тогда строить запросы?)
    • уметь сохранять, загружать и изменять коллекции этих объектов
    • уметь делать запросы к коллекциям объектов

Lisp-машина

  • "а давайте напишем лисп-интерпретатор на кложуре" + квотейшены и выворот мозга https://youtu.be/OyfBQmvr2Hc
  • можем не только компилировать в байткод или ассемблер, но и просто интерпретировать, используя хост-язык
    • возможно, это освободит время для реализации в языке каких-то интересных штук
  • а можем поэтапно уйти от интерпретатора в сторону трансляторов-компиляторов https://youtu.be/-E2tu3MqR24

Persistent data structures

Версионная память