Подтвердить что ты не робот

Является ли рубин сильно или слабо типизированным?

Является ли рубин сильно или слабо типизированным?

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

4b9b3361

Ответ 1

Ruby имеет значение strong typed.

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

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

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

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

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

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

Ответ 2

Wikpedia называет его "динамическим (" утка ")".

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

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

Ответ 3

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

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

Ответ 4

IMHO Ruby сильно, но динамически типизирован.

Ответ 6

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

Моя разговорная интерпретация термина "строго типизированный ™" конкретно относится к "времени компиляции". (Это то, что многие языки сегодня, включая Ruby, "просто не имеют".)

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

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

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


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

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

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

Ответ 7

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

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