Respostas:
Sim. Dos recursos nomeados (ênfase minha):
Um nome de recurso é um símbolo que representa uma coleção de funções, variáveis etc. O arquivo que os define deve fornecer o recurso. Outro programa que os utiliza pode garantir que eles sejam definidos exigindo o recurso. Isso carrega o arquivo de definições, se ainda não tiver sido carregado.
Para exigir a presença de um recurso, chame
requirecom o nome do recurso como argumento.requireprocura na variável globalfeaturespara ver se o recurso desejado já foi fornecido. Caso contrário, ele carrega o recurso do arquivo apropriado . Esse arquivo deve ser chamadoprovideno nível superior para adicionar o recursofeatures; se não o fizer,requiresinaliza um erro .
Sim, desde que o código respeite helm.elou helm.elcrespeite a regra que ele deve chamar (provide 'helm). A chamada (provide 'helm)marca o símbolo helmcomo um recurso carregado e isso faz com que a segunda chamada (require 'helm)não faça nada.
Se o pacote carregado não chamar provide, requiresinaliza um erro e o recurso não está marcado como carregado. Portanto, uma segunda chamada (require 'helm)tentaria o carregamento novamente (e normalmente falharia novamente pelo mesmo motivo).