Improving Compile Times

In previous versions of Ash, the standard way to configure the list of resources for an Api module looked like this:

defmodule MyApp.MyApi do
  use Ash.Api


  resources do
    resource MyApp.MyResource
    ...
  end
end

This caused many compilation dependency issues, causing slow compile times when changing single files, and could also potentially lead to deadlocks.

The preferred way of doing this now looks like this:

# Define a registry module
defmodule MyApp.MyApi.Registry do
  use Ash.Registry,
    extensions: Ash.Registry.ResourceValidations

  entries do
    entry MyApp.MyResource
    ...
  end
end

defmodule MyApp.MyApi do
  use Ash.Api, otp_app: :my_app
end

# in `config/config.exs`

config :my_app, MyApp.MyApi,
  registry: MyApp.MyApi.Registry

This will prevent a bunch of cross-concern compile time dependencies, allowing for much faster compile times in general.