Как язык программирования может быть “реализован”?

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

Например:

import java.util.Date;

class Test{

  public static void main(String [] args){

    // your own date
    my.own.Date myOwndate ;

    // util.Date
    Date utilDate;
  }
}
22
задан Inno 1 July 2010 в 10:05
поделиться

8 ответов

Вы правы, в этих утверждениях нет никакого смысла. Совершенно очевидно, что тот, кто сделал эти утверждения, не понимает разницы между языком программирования и компилятором (или интерпретатором).

Это удивительно распространенная проблема. Например, иногда люди говорят об интерпретируемых языках или компилируемых языках. Это то же самое: языки не интерпретируются и не компилируются, они просто есть . Интерпретация и компиляция - это особенности реализации , а не языка.

Еще одна приятность: у Python есть GIL. Нет, это не так: одна реализация Python имеет GIL, все другие реализации - нет, а сам язык Python определенно не имеет . Или: у Руби зеленые нити. Опять же, неправда: у Ruby есть потоки. Период. Независимо от того, решает ли какая-либо конкретная языковая реализация реализовать их как зеленые потоки, собственные потоки, потоки платформы или что-то еще, это черта этой конкретной реализации, а не Ruby. И, конечно, мой любимый вариант: Ruby 1.9 быстрее, чем Ruby 1.8. Это даже не имеет смысла: Ruby 1.9 и Ruby 1.8 - это языки программирования, то есть набор абстрактных математических правил. Вы не можете запустить язык программирования, поэтому один язык программирования никогда не может быть «быстрее» или «медленнее», чем другой.

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

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

Если мы вернемся к утверждению, что «Python реализован на C», теперь должно быть очевидно, что это утверждение не просто неверно. Если бы утверждение было неправильным, это означало бы, что утверждение даже имеет смысл, то есть что существует некоторый возможный мир, в котором оно могло бы, по крайней мере, теоретически быть правильным. Но это не так. Это утверждение не является ни неправильным, ни правильным, оно просто не имеет смысла. Если бы английский был типизированным языком, это было бы типографской ошибкой.

Python - это язык программирования. Языки программирования ни в чем не реализованы. Они просто реализованы. Компиляторы и интерпретаторы реализованы на языках. Но даже если вы интерпретируете это утверждение таким образом, это неправда: Jython реализован на Java, IronPython реализован на C #, PyPy реализован в RPython и Python, Pynie реализован в PGE, NQP и PIR. (Да, и у всех этих реализаций есть компиляторы, так что вот ваш «Python - интерпретируемый язык».) Подобно Ruby: Rubinius реализован в Ruby и C ++, JRuby и XRuby реализованы в Java, IronRuby и Ruby.NET реализованы на C #, HotRuby реализованы в ECMAScript, Red Sun реализованы в ActionScript, RubyGoLightly реализованы в Go, Cardinal реализованы в PGE, NQP и PIR, SmallRuby реализован в Smalltalk / X, MagLev реализован в GemStone Smalltalk и Ruby, YARI реализован в Io. А для C ++: Clang (который является интерфейсом C, C ++ и Objective-C для LLVM) реализован на C ++ (все три интерфейса реализованы на C ++).

22
ответ дан 29 November 2019 в 03:37
поделиться
1111 Вот очень академический ответ (от давнего академика). Сначала я перефразирую вопрос:

Что означает, что будет реализован язык программирования ?

Начну с " что такое язык программирования ":

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

  2. Язык реализуется, когда предоставляется средство для чтения в высказывании и выполнения вычисления, то есть вычисления функции или выполнения поведения. Средство есть реализация.

Типичные реализации включают в себя

  • Прямая интерпретация синтаксиса языка. Эта модель встречается редко, но FORTH, вероятно, ближе всего к ней.

  • Перевод синтаксиса в код виртуальной машины, также называемый байт-кодом, который сам по себе является другим языком и который интерпретируется. Популярно писать интерпретаторы байт-кода на C. Lua, Perl, Python и Ruby реализованы более или менее таким образом.

  • Перевод синтаксиса в инструкции машинного оборудования, который сам по себе является другим языком и который интерпретируется вашим процессором. C и C ++ обычно (но не всегда) реализуются таким образом.

  • Прямая интерпретация языка в аппаратных средствах. Машинный код IA-32 и машинный код AMD64 реализованы таким образом.

Когда человек говорит «Язык X реализован на Y», они обычно говорят, что переводчик для X или интерпретатор для байт-кода X написан на языке Y. Один из великих секретов авторов компиляторов - это умение писать компилятор для языка X на самом языке X. Если вас это интересует, получите статью Эндрю Аппеля «Аксиоматическая начальная загрузка: руководство для хакеров компиляторов» .

1122 Иногда ответ на этот вопрос не очевиден. Squeak Smalltalk пишет переводчик и интерпретатор байт-кода в Smalltalk, а затем переводит интерпретатор в C, который переводится в машинный код. В чем реализован Squeak? Smalltalk.


Ткни профессора; получить лекцию.

23
ответ дан Norman Ramsey 29 November 2019 в 03:37
поделиться

Чтобы создать новый язык, вам не обязательно делать это на низкоуровневом машинном коде (например, на ассемблере). Таким образом, использование другого языка для достижения вашей цели (создание нового языка здесь) совершенно нормально. Итак, когда мы говорим: Python был реализован на C, это просто означает, что C использовался для создания этого языка. Например, C может быть совместим со многими различными архитектурами, поэтому программистам не нужно заботиться о разных типах компьютеров (портативных).

Язык - это просто способ выразить себя на компьютере. Сегодня это можно сделать разными способами. Но когда вы используете тот же синтаксис, что и язык, и создаете свой собственный фреймворк, он называется библиотекой или фреймворком. Язык программирования - это просто обозначение для написания программы. Если запись поменялась, у вас другой язык. Как французский или испанский происходит от латыни. (Французский реализован на латыни;)

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

2
ответ дан Sauleil 29 November 2019 в 03:37
поделиться

«Python был реализован на C» означает, что по крайней мере один компилятор Python (в данном случае наиболее часто используемый) написан с использованием C. Разработчики этой реализации Python приняли сознательное решение не использовать C ++. Как утверждение, оно является неполным, поскольку Python также был реализован в Java, в C # и в Python.

Основная актуальность заключается в том, что он дает вам некоторое представление о системах, на которые вы могли бы перенести язык: все, на что нацеливается компилятор C, должно (по крайней мере в теории) быть способным запускать реализацию C Python, но если бы они решили использовать C ++, был бы меньший набор систем, которые могли бы его запускать.

C ++ обычно не реализуется в C в наши дни: я полагаю, что это обычно реализуется в C ++. Весьма распространено, чтобы языки были реализованы на одном и том же языке (или подмножестве языка), поскольку это означает, что вы больше не зависите от какого-либо другого несвязанного языка, доступного для цели. Чтобы загрузить новую систему, вы кросс-компилируете из какой-то другой системы.

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

6
ответ дан Duncan 29 November 2019 в 03:37
поделиться

Прямой ответ: Реализация в контексте, о котором вы говорите, означает просто написанное, а язык на самом деле означает компилятор. Исходный компилятор C ++, как я понимаю, был написан на C. Нет ничего (кроме знаний и времени), чтобы помешать вам писать компилятор C ++ на другом языке.

Реализация - это код, который заставляет программное обеспечение работать. Часто мы говорим о реализации функции, например: «функция еще не реализована». например, void foo ()
{
// функция еще не реализована
throw ();
}

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

0
ответ дан developer 29 November 2019 в 03:37
поделиться

Язык программирования - это стандарт. Его интерпретатор или компилятор является реализацией этого стандарта.

4
ответ дан 29 November 2019 в 03:37
поделиться

Утверждение «Язык X реализован на языке Y» имеет смысл и истинно тогда и только тогда, когда существует каноническая реализация языка X и , реализация которой написана на Язык Y. В обычном использовании первая или самая популярная реализация часто считается канонической.

Например, Perl - один из немногих языков с определенным каноном. «Python реализован на C» имеет смысл, если CPython рассматривается как каноническая реализация Python, а «C ++ реализован на C» верно для CFront, исходной реализации «C с классами» Бьярна Страуструпа.

1
ответ дан 29 November 2019 в 03:37
поделиться

«C ++ реализован на C». Я понимаю это как «компилятор C ++ написан на языке C». Довольно просто, без особой философии.

Как правило, компилятор C ++ может быть написан на любом языке, включая сам C ++ (кроме первой версии компилятора).

11
ответ дан 29 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

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