Зачем "делать" на языке опа?

Я думаю, что новичков будет смущать "делать", и мне интересно это с точки зрения языкового дизайна. Вы не хотите путать новичков на этом этапе жизни нового языка, где почти все новички, и вы хотите новичков, чтобы создать сообщество и критическую массу;-)

Документация для "делать" (3.8.3. Делать или не делать) гласит:

Есть очень веская причина для такой конструкции: в Opa каждое определение функции (и, в более общем случае, каждое значение, не имеющее верхнего уровня) заканчивается одним значением, которое является результатом функции - наоборот, как только мы достигли первого значения, мы есть результат функции, поэтому функция завершена.

Меня интересует та часть, о которой я говорил выше: почему после достижения первого значения функция завершена? Было ли введено "do", чтобы избежать подобных вещей, которые вы видите в OCaml?:

let _ = (some expression)

Каковы альтернативы использованию "do" в языковом дизайне Opa? Как еще можно было бы подойти (с точки зрения языкового дизайна).

2 ответа

Решение

Прямого ответа нет.do требуется с текущим синтаксисом OPA, но мы могли бы выбрать другую философию.

Например:

user_update(x) =
  line = <div>
     <div>{x.author}:</div>
     <div>{x.text}</div>
  </div>
  do Dom.transform([#conversation +<- line ])
  Dom.scroll_to_bottom(#conversation)

do необходимо знать, что функция не заканчивается на Dom.transform линия, но следующая. Как написано в книге, которую вы цитировали: "... как только мы достигли первого значения, у нас есть результат функции, поэтому функция завершена".

Но с js-подобным синтаксисом это могло бы быть:

user_update(x) {
  line = <div>
     <div>{x.author}:</div>
     <div>{x.text}</div>
  </div>;
  Dom.transform([#conversation +<- line ]);
  Dom.scroll_to_bottom(#conversation)
}

Мы уже получили множество отзывов и предложений по синтаксису OPA, и мы пытаемся найти лучший подход. Вы можете прочитать эту статью, чтобы узнать больше:

Краудсорсинг синтаксиса OPA http://dutherenverseauborddelatable.wordpress.com/2011/05/30/crowdsourcing-the-syntax/

Читайте также комментарии.;)

Это очень хороший вопрос, на который я не уверен, что у меня есть хороший ответ. Позвольте мне попробовать, хотя.

Позвольте мне начать с поворота столов и задать вам вопрос: почему это сбивает с толку?

На самом деле ситуация очень похожа на Ocaml. Там также последнее значение является возвращаемым значением функции. Если вы хотите что-то сделать, прежде чем вам понадобится локальная привязка let x = ... in ... или для функций, возвращающих void, вам нужно использовать точку с запятой expr1; expr2,

При создании синтаксиса Opa мы не очень любили точки с запятой;). Так:

  • в Opa также последнее значение является возвращаемым значением функции,
  • Вы также можете ввести местные привязки, прежде чем x = ... (так что это более многословно, чем Ocaml: ты не пишешь let и не пиши in)
  • мы не используем точки с запятой вместо выражений типа void перед последним введением do так Окамла e1; e2 в опа становится do e1 e2 (заметьте, обычно вы бы e2 на новой линии).

Поэтому я не думаю, что здесь есть принципиальные изменения по сравнению с Окамлем. Но на самом деле, как прокомментировал Cedrics выше, мы получаем смешанные отзывы о синтаксисе Opa и пытаемся найти лучший способ решения этой проблемы (идеи приветствуются).

Другие вопросы по тегам