Схемы реализации-что это значит?

Я начинающий студент в CS, и мои классы в основном на Java. В настоящее время я прохожу "маленький Schemer" как самостоятельное исследование, и в процессе выяснения того, как это сделать, я нашел многочисленные ссылки на "реализации" схемы. Мой вопрос в том, что такое реализации?

являются ли они суб-диалектами схемы, или это что-то еще (DrScheme, похоже, допускает различные "ароматы" языка)? Это просто название, данное любой экосистемы включение IDE, интерпретатора, интерактивного инструмента и тому подобное?

все ли другие языки (например, Java) также имеют различные "реализации", или это что-то зарезервировано для "открытых" языков?

спасибо,

Джосс Делаж

4 ответов


реализация языка программирования компилятор или интерпретатор для этого языка. Дополнительные компоненты системы eco, такие как IDEs, могут быть частью реализации, но не являются необходимыми. Для схемы Существует множество, например DrScheme, Guile, Gambit.

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

для Java существуют реализации от Sun, Oracle, IBM и, я думаю, еще одна.


An реализация языка означает любую программу, которая работает и компилируется нужный язык.

в схеме в частности, это хороший вопрос, потому что было несколько основных ревизий спецификации языка. Помимо этого, существует множество языков (включая оригинальную схему!), которые называются схемой, которая не полностью соответствует ни одной из спецификаций. Начинающие языки для HTDP малы, чтобы быть немного ограничительными о том, как решаются проблемы (и, возможно, по другим причинам). GIMP до недавнего времени использовал нестандартный интерпретатор схемы SIOD (Scheme In One Defun или Scheme In One Day). Есть много других примеров; см., например,Диалекты Схемы для plt схемы взять на язык стандартной поддержки.


реализация-это версия/продукт конкретного поставщика, который реализует (соответствует, предоставляет и т. д.) определенный стандарт (интерфейс класса, API, спецификация языка и т. д.).

чтобы сделать это простым для понимания по аналогии, Coca-Cola и Pepsi можно рассматривать как реализации соды (или, если вы так склонны, поп). Сода / поп-это общая концепция, а Coca-Cola и Pepsi-это конкретные продукты, которые соответствуют этой концепции.

аналогично, Mac OS X и Linux являются реализациями Единой спецификации UNIX. Компилятор GNU C++ и компилятор Intel C++ являются реализациями языка программирования C++. Sun Java 6 JDK, OpenJDK и компилятор GNU для Java (GCJ) - все это реализации Java.

в Java, как вы скоро обнаружите, слово "реализует" используется в качестве ключевого слова, когда класс предоставляет конкретное определение функции, объявленной в интерфейсе, потому что, предоставляя конкретное определение, что класс реализует требования общей концепции, воплощенной в интерфейсе.

Я надеюсь, что это поможет улучшить ваше понимание смысла "реализация".


реализация-это компилятор или интерпретатор для языка программирования; это способ перевести инструкции на языке поведения. Наиболее распространенным языком с несколькими реализациями сегодня, вероятно, является JavaScript.

когда люди говорят о реализациях, это часто в контексте необходимости иметь дело с проблемами, которые возникают из-за наличия нескольких. Есть преимущества-ваш любимый будет делать так, как вам нравится, но проблемы могут быть неприятно. Поскольку Chrome и Firefox, IE и Safari ведут себя немного по-разному с одним и тем же кодом JavaScript, веб-разработчикам приходится тратить много времени на тестирование своего кода в различных браузерах, определение того, какой из них вы используете, и адаптацию кода к несколько различным наборам библиотек, ошибок и т. д.

некоторые языки определяются стандартной реализацией (ruby, perl, python), а не документом, поэтому вы не слышите о нескольких их реализация. Даже на этих языках у вас есть связанная с этим проблема различных версий, имеющих различное поведение.

реализации не являются новым явлением: еще в школьные годы Билл Гейтс начал писать одну из многих основных реализаций, например.

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

сообщество схемы признает проблему, наряду с преимуществом небольшой спецификации, и активно работает над способами сделать переход от экспериментального языка к полезному языку более ясным с новыми версиями стандарта. http://scheme-reports.org/

на данный момент (2010), I лично рекомендую новым пользователям начать работать в plt Scheme, и я рад, что вы начали там. Не позволяйте многим реализациям пугать вас: есть большая польза от работы на языке, который проектировщики языков программирования разработали для себя. PLT имеет большое сообщество и хороший набор библиотек, которые помогут вам преодолеть описанные выше трудности.

лучшие, Грем