Зачем «делать» на языке опа? - PullRequest
3 голосов
/ 13 июля 2011

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

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

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

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

let _ = (some expression)

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

Ответы [ 2 ]

6 голосов
/ 14 июля 2011

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

Например:

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/

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

2 голосов
/ 14 июля 2011

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

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

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

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

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

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

...