Реализация схемы - что это значит?
Я начинающий студент в CS, и мои занятия в основном на Java. В настоящее время я изучаю "Маленького Схемера" для самостоятельного изучения, и в процессе выяснения, как это сделать, я нашел многочисленные ссылки на "реализации" Схемы. У меня вопрос, что такое реализации?
Являются ли они субдиалектами Схемы, или это что-то еще (DrScheme, кажется, допускает различные "разновидности" языка)? Является ли это просто именем, данным какой-либо данной экосистеме, включающей IDE, интерпретатор, интерактивный инструмент и тому подобное?
Все ли другие языки (например, Java) также имеют различные "реализации", или это что-то зарезервированное для "открытых" языков?
Спасибо,
Джосс Делаж
4 ответа
Реализация языка программирования - это компилятор или интерпретатор для этого языка. Дополнительные компоненты экосистемы, такие как IDE, могут быть частью реализации, но не являются необходимыми. Для Схемы их много, например DrScheme, Guile, Gambit.
Многие языки программирования имеют разные реализации, но все реализации определенного языка должны реализовывать (т.е. компилировать) один и тот же диалект. Это проще всего, если существует четкая и официальная спецификация языка, как в случае со Схемой. Конечно, большинство языковых спецификаций проходит через много версий, поэтому разные реализации могут поддерживать разные версии языка.
Для Java есть реализации от Sun, Oracle, IBM и, я думаю, еще одной.
Реализация языка означает любую программу, которая запускает или компилирует этот конкретный язык.
В частности, в Схеме это хороший вопрос, потому что в спецификации языка было несколько основных изменений. Кроме того, существует множество языков (включая оригинальную Схему!), Которые называются Схемами и не полностью соответствуют ни одной из спецификаций. Языки начинающих для HTDP невелики, чтобы немного ограничивать способы решения проблем (и, возможно, по другим причинам). До недавнего времени в GIMP использовался нестандартный интерпретатор Scheme, называемый SIOD (схема за один раз или схема за один день). Есть много других примеров; см., например, " Диалекты схемы" для схемы PLT, поддерживающей стандарт языка.
Реализация - это компилятор или интерпретатор для языка программирования; это способ перевести инструкции языка в поведение. Наиболее распространенным языком с множественной реализацией сегодня является, вероятно, JavaScript.
Когда люди говорят о реализации, часто приходится сталкиваться с проблемами, возникающими из-за наличия нескольких. Есть преимущества - ваш любимый будет делать то, что вам нравится, но проблемы могут быть неприятными. Поскольку Chrome, Firefox, IE и Safari ведут себя немного по-разному с одним и тем же кодом JavaScript, веб-разработчикам приходится тратить много времени на тестирование своего кода в различных браузерах, определение того, какой из них вы используете, и адаптацию кода к немного разные наборы библиотек, ошибок и т. д.
Некоторые языки определяются стандартной реализацией (ruby, perl, python), а не документом, поэтому вы не слышали о множественных реализациях этих программ. Даже на этих языках у вас есть проблема, связанная с различными версиями, имеющими разное поведение.
Реализации не являются новым явлением: например, в старшие школьные годы Билл Гейтс начал писать одну из многих реализаций BASIC, например.
Что делает проблемы со Scheme хуже, чем с другими языками, так это то, что спецификация преднамеренно мала - старается указывать очень мало. Преимущество заключается в том, что люди, разрабатывающие языки программирования, могут относительно быстро создать новую экспериментальную реализацию Scheme с новыми качественными свойствами. Сделав это, они могут утверждать, что даже написанный ими маленький язык "полезен", потому что другие показали, как расширить маленький язык до полезного. Однако в этом "простом вопросе программирования" предстоит проделать большую работу, и каждая реализация должна принимать множество решений самостоятельно, поэтому различия между реализациями велики и велики. Таким образом, проблем, связанных с множественными реализациями, много и много в Схеме по сравнению с более полно определенными языками.
Сообщество Scheme признает эту проблему вместе с преимуществами небольшой спецификации и активно работает над тем, чтобы сделать переход от экспериментального языка к полезному языку более понятным с помощью новых версий стандарта. http://scheme-reports.org/
На данный момент (2010) я лично рекомендую, чтобы новые пользователи начали работать в Схеме PLT, и я рад, что вы начали там. Не позволяйте проблеме многих реализаций напугать вас: работа на языке, который разработчики языка программирования разработали для себя, приносит большую пользу. PLT имеет большое сообщество и хороший набор библиотек, которые помогут вам преодолеть трудности, описанные выше.
Бест, Грэм
Реализация - это версия / продукт конкретного поставщика, который реализует (соответствует, предоставляет и т. Д.) Определенный стандарт (интерфейс класса, 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" используется в качестве ключевого слова, когда класс предоставляет конкретное определение функции, объявленной в интерфейсе, потому что, предоставляя конкретное определение, этот класс реализует требования общего Концепция воплощена в интерфейсе.
Я надеюсь, что это поможет вам лучше понять значение слова "внедрение".