Рубин сильно или слабо напечатан? - PullRequest
21 голосов
/ 06 февраля 2009

Рубин сильно или слабо напечатан?

Предположительно, то же самое верно и для Javascript.

Ответы [ 7 ]

42 голосов
/ 06 февраля 2009

Рубин - это " строгий тип ".

Строгая типизация означает, что тип объекта (не в смысле ООП, а в общем смысле) проверяется перед выполнением над ним операции, требующей определенного типа.

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

Edit: Прошло 6 лет с тех пор, как этот ответ был опубликован, и я думаю, что он требует дополнительных разъяснений:

На протяжении многих лет понятие «безопасность типов - это набор, а не абсолют» стало использоваться в пользу двоичного значения (да / нет)

Ruby типизирован "сильнее" (с "er"), чем большинство типичных динамических языков. Тот факт, что ruby ​​требует явных выражений для преобразования IE: Array ("foo"), "42" .to_i, Float (23), приближает диск набора текста Ruby ближе к концу спектра "Strong Typed", чем к "слабому типу" .

Так что я бы сказал, "Ruby - это более типизированный динамический язык, чем большинство распространенных динамических языков"

26 голосов
/ 07 февраля 2009

Википедия помечает его как «динамический (« утка »)».

Что касается комментария Попа о том, что он "строго напечатан" - я не уверен, что его объяснение действительно соответствует тому, что происходит под обложками. МРТ на самом деле не «проверяет», чтобы увидеть, можно ли выполнить операцию над объектом; он просто отправляет объекту сообщение, и если этот объект не принимает это сообщение (либо путем объявления метода, либо путем обработки его в #method_missing), он вызывает barfs. Если среда выполнения действительно проверяется, чтобы убедиться, что операции возможны, #method_missing не будет работать.

Кроме того, следует отметить, что, поскольку все в Ruby является объектом (и я имею в виду все ), я не уверен, что то, что он сказал о "не в каком-то смысле", является точным , В Ruby вы либо объект, либо сообщение.

11 голосов
/ 06 февраля 2009

Пока вы можете вступать в споры по поводу определения этого термина, я бы сказал:

Динамически и строго типизированный Ruby, в то время как JavaScript динамически и слабо типизированный.

8 голосов
/ 06 февраля 2009

ИМХО Ruby строго, но динамически типизирован.

3 голосов
/ 06 февраля 2009

Я бы посчитал эти языки утка набранной

1 голос
/ 10 января 2019

Я просто наткнулся на эту старую ветку, но подумал, что правильно, что я могу высказать свое мнение. (Нет, я не "угоняю" зомби-нить.)

Моя разговорная интерпретация термина "строго типизированный ™" конкретно относится к "compile time." (Что-то что многие языки сегодня, включая Ruby, «просто не имеют».

Например, простой оператор присваивания, такой как a = b;, может быть оценен компилятором как приемлемый или нет, основываясь на его оценке "типов" a и b и на основе положений о преобразовании типов (если применимо) , предоставленных программистами. Если утверждение было сочтено неприемлемым, возникнет ошибка времени компиляции, и «исполняемый» файл не будет создан.

Это понятие, конечно, не совместимо с основными принципами проектирования языков, таких как Ruby, PHP, Perl, JavaScript или многих других языков, которые сегодня используются чрезвычайно широко (и чрезвычайно успешно). , (Имейте в виду, я не имею в виду это как «суждение» ни за, ни против них. Они такие, какие они есть, и они обязательно приносят домой бекон.)

Поскольку у этих языков нет «времени компиляции», к моему (!) Разговорному выражению их нельзя назвать «строго типизированным». Они обязаны принимать решения во время выполнения , которые по своей конструкции не могли быть приняты раньше.

<Ч />

(Также обратите внимание, что я специально исключаю из рассмотрения различные "lint инструменты", появившиеся для того или иного языка, чтобы заранее выявлять больше ошибок. Это очень полезно, да, да, но не одно и то же.)

(я также намеренно исключаю различные превосходные (!) Инструменты, которые генерируют исходный код на различных целевых языках, о которых идет речь ... по тем же причинам.)

И - еще раз говорю - я делаю классификацию, , а не суждение.

0 голосов
/ 06 февраля 2009

Слишком упрощенный ответ заключается в том, что как ruby, так и javascript слабо типизированы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...