Использование и для статических сильных типизированных языков как Haskell и для динамических (сильных) языков как язык Common LISP

Как вы сказали в комментариях выше, вы используете какой-то код, написанный кем-то другим (или пользовательскую среду), а element является просто экземпляром пользовательского класса. Например, класс PropertyBag существует в caesiumjs .

Если объект является экземпляром класса (не простым объектом, на самом деле это класс с конструктором), если вы используете console.log для этого элемента, вы получите имя класса в консоли (по крайней мере Chrome) и маленькая стрелка, чтобы расширить его. Вы можете скопировать / вставить следующий код в консоль, чтобы проверить поведение.

class User {
  constructor(name) {
    this.name = name;
  }

  sayHi() {
    alert(this.name);
  }
}

let user = new User("John");
console.log(user);

Ура!

9
задан Svante 28 January 2009 в 04:11
поделиться

5 ответов

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

Например, Haskell является языком, который подчеркивает взгляды о Вашей проблеме с точки зрения типов. Если будет удобный способ выразить Вашу проблему с точки зрения типов данных Haskell, то Вы, вероятно, найдете, что это - удобный язык для записи программы в.

Преимущества языка Common LISP (которые являются многочисленными) лежат в его динамическом характере и его homoiconicity (то есть, программы Lisp очень легко представить и управлять как данные Lisp) - Lisp является "программируемым языком программирования". Если Ваша программа наиболее легко выражается на новом проблемно-ориентированном языке, например, Lisp делает очень легким сделать это. Lisp (и другие динамические языки) является подходящим вариантом, если Ваши соглашения об описании проблемы с данными, тип которых плохо указан или мог бы измениться как разработка, прогрессируют.

Выбором языка часто является так же эстетическое решение как что-либо. Если Ваши проектные требования не ограничивают Вас определенными языками для совместимости, зависимости или причин производительности, Вы могли бы также выбрать тот, о котором Вы чувствуете лучшее.

14
ответ дан 4 December 2019 в 08:17
поделиться

Вы открываете несколько куч очень извивающихся проблем. Прежде всего целое сильно по сравнению с языками со слабым контролем типов может. Во-вторых, функциональное по сравнению с императивным языком может.

(На самом деле мне любопытно: "диалектом шепелявости" Вы имеете в виду Clojure случайно? Поскольку это в основном функционально и ближе до некоторой степени к Haskell.)

Хорошо, таким образом. Прежде всего можно записать в значительной степени любую программу в в значительной степени любом нормальном языке с более или менее усилием. Подразумеваемое преимущество для строгого контроля типов состоит в том, что большой класс ошибок может быть обнаружен во время компиляции. С другой стороны, в меньшем количестве typeful языков может быть легче кодировать. Язык Common LISP интересен, потому что это - динамический язык с опцией объявления и использования более сильных типов, который дает подсказки компилятора CL о том, как оптимизировать. (О, и реальный язык Common LISP обычно реализуется с компилятором, давая Вам опцию компиляции или липкий с интерпретируемым кодом.)

Существует много исследований о сравнении невведенных, и языков со строгим контролем типов со слабым контролем типов. Эти исследования неизменно или говорят, что один из них лучше, или скажите, что нет никакого заметного различия. Среди исследований существует, однако, мало соглашения.

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

5
ответ дан 4 December 2019 в 08:17
поделиться

Я происхожу главным образом из перспективы языка Common LISP, и насколько я вижу, язык Common LISP подходит для любого приложения.

Да, значение по умолчанию является динамическим контролем типов (т.е. обнаружение типа во времени выполнения), но можно объявить типы так или иначе для оптимизации (как примечание стороны для других читателей: CL со строгим контролем типов; не путайте слабый/сильный со статическим/динамичным!).

Я мог предположить, что Haskell мог немного лучше подойти как замена для Ada в авиационном секторе, так как она вызывает по крайней мере все проверки типа во время компиляции.

Я не вижу, как CL не должен быть так же полезен как Haskell для серверов TCP/IP или синтаксических анализаторов кода - скорее, противоположное, но мои контакты с Haskell было кратко до сих пор.

4
ответ дан 4 December 2019 в 08:17
поделиться

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

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

Так как Вы спросили об этом, я полагаю, что система типов Haskell довольно хороша и полезна. Не только это фиксирует распространенные ошибки, но и это может также сделать код более кратким (!) и может эффективно заменить объектно-ориентированные конструкции с общих языков OO.

Некоторые комплекты разработчика Haskell, как GHC, также интерактивная среда функции.

3
ответ дан 4 December 2019 в 08:17
поделиться

Лучшее использование для динамического контроля типов, который я нашел, состоит в том, когда Вы зависите от вещей, что Вы не имеете никакого контроля над тем, таким образом, это могло также использоваться динамично. Например, получая информацию из XML-документа мы могли сделать что-то вроде этого:

var volume = parseXML("mydoc.xml").speaker.volume()

Не использование утиного ввода привело бы к чему-то вроде этого:

var volume = parseXML("mydoc.xml").getAttrib["speaker"].getAttrib["volume"].ToString()

Преимущество Haskell, с другой стороны, находится в безопасности. Можно, например, удостовериться, с помощью типов, что градусы в Фаренгейте и Цельсия никогда не смешиваются неумышленно. Помимо этого я нахожу, что статически типизированные языки имеют лучшие IDE.

0
ответ дан 4 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: