Реализация схемы - что это значит? - PullRequest
6 голосов
/ 04 марта 2010

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

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

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

Спасибо,

Joss Delage

Ответы [ 4 ]

7 голосов
/ 04 марта 2010

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

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

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

6 голосов
/ 04 марта 2010

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

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

1 голос
/ 12 марта 2010

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

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

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

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

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

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

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

Лучший, Grem

1 голос
/ 04 марта 2010

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

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

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

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

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

...