LINUX.ORG.RU

Более лучшие типы

 


0

2

Одна из известнейших персон CS, американский учёный в области вычислительной техники, директор по исследованиям корпорации Google,член Совета Американской ассоциации искусственного интеллекта, Питер Норвиг отмечает бесспорные преимущества первоклассных динамических типов:

Первоклассность: могут быть использованы точно также, как и любой другой объект или значение.

Типы или классы являются объектами времени исполнения (не только времени компиляции)

Переменные могут иметь типы в качестве своих значений

Типы и классы могут быть созданы/изменены в рантайме

Мы имеем функции для манипуляции типами/классами, а также выражения для создания безымянных типов.

Нет необходимости в создании дополнительных динамических объектов для хранения типов, так как это делают сами объкты типов.

http://norvig.com/design-patterns/design-patterns.pdf стр 11



Последнее исправление: javaQest (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Ну и да, если писали мудаки (а на статике мудаков пишет гораздо больше), то не важно на чем они пишут. Код совершенно одинаково говно.

anonymous
()
Ответ на: комментарий от crutch_master

Только когда тебе чей-то говнокод дадут сопровождать там нихрена понятно не будет.

Напомню, что мем «индусокод» пришел из мира жабки, где хардкорная статика. Там йоги воздвигают джомолунгмы говна, и все это кое-как работает только благодаря колотящему их палкой компилятору. На скриптоте у этих чертяк все рассыпалось бы после 100-й строки. Ведь известный же феномен, что жабисты с трудом осиливают жабаскрипт, вплоть до полного неосиляторства. Так что анонимус, макающий статикофанов, кое в чем прав. Апелляции к C/C++ тут не катят, это языки, где система типов совершенно не защищает от дурака, и дисциплина требуется высочайшая. Лучше вспомним эталоны быдлокодерства - Дельфи, VB, а на другой стороне Scheme, Python - динамическое как бы говно, на котором почему то глупые CS-ботаны учат студентов.

anonymous
()
Ответ на: комментарий от anonymous

Лучше вспомним эталоны быдлокодерства - Дельфи

Бля, лучше не будем.

anonymous
()
Ответ на: комментарий от crutch_master

И чо?

Что и чо? Это признак слабо типизированного языка. В сильно типизированном int на место float захуярить нельзя.

На то и void.

Ну опять же признак слабой типизации. В сильно-типизированных ЯП нету такой хуйни.

anonymous
()
Ответ на: комментарий от anonymous

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

Deleted
()
Ответ на: комментарий от anonymous

хардкорная статика

Я бы не сказал, что сильно. String + int там прокатит.

эталоны быдлокодерства - Дельфи, VB

Pascal и васик, как бы учебные языки, на которых кто-то подумал, что можно писать профессионально.

Напомню, что мем «индусокод» пришел из мира жабки

Да ладно. Может пруфы есть?

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

а на статике мудаков пишет гораздо больше

У тебя есть статистика по мудакам? Ссылочку кинь, да.

crutch_master ★★★★★
()
Ответ на: комментарий от Deleted

Никто и не говорит что это плохо.

anonymous
()
Ответ на: комментарий от crutch_master

1+97 почему не должно быть бодрячком?

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

anonymous
()
Ответ на: комментарий от anonymous

и она спокойно заработает с аргументом типа char.

При этом важно, что char - не подтип int. это именно неявная конверсия, чего в сильнотипизированных языках быть не должно.

anonymous
()
Ответ на: комментарий от crutch_master

То, что вопрос был про string + int.

Вопрос был про слабую типизацию. между string+int и int+char разницы никакой нет.

anonymous
()
Ответ на: комментарий от anonymous

чего в сильнотипизированных языках быть не должно.

Я не говорю о том насколько сильно он типизирован, а о результатах преобразования.

<?php 
$a = "aaa";
$b = 1;
$c = $a + $b;
echo $c; // 1
?>


<?php 
$a = "2";
$b = 1;
$c = $a + $b;
echo $c; // 3
?>

Плюсы хотя бы будут вести себя одинаково независимо от данных.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Я не говорю о том насколько сильно он типизирован, а о результатах преобразования.

И я о них же. В плюсах типизация такая же слабая, как и в пехепе, поэтому пример плюсов - плохой пример.

anonymous
()
Ответ на: комментарий от anonymous

разницы никакой нет.

Класс + целое 4 байта, 4 байта целое со знаком + 1 (обычно) байт целое без знака. Разницы никакой, да.

Вопрос был

А вопрос был:

«1»+2 - это что, сложение или склеевание строк? А если «с»+2?

А вы тут развели про типизацию.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Класс + целое 4 байта, 4 байта целое со знаком + 1 (обычно) байт целое без знака. Разницы никакой, да.

В обоих случаях один из типов неявно конвертируется к другому. При этом в случае конвертации между целочисленными типами и типами с плавающей точкой происходит потеря данных. По факту конвертация «2» в 2 всегда лучше, чем 2 в 2.0

anonymous
()
Ответ на: комментарий от crutch_master

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

anonymous
()
Ответ на: комментарий от anonymous

В обоих

Класс, как мы уже выяснили, ни к чему не конвертируется. Целые тупо расширяются.

все точно так же плохо

С float, да, косяк, но все равно лучше, когда видно, где float, где int, а где string, чем когда интерпретатор в рантайме решает что ему делать с переменными в зависимости от их значения. Видел одну функцию которая могла возвращать строку/логическое/целое. А если таких функций целый проект, то не стоит говорить, что всё плохо «так же».

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

А вы тут развели про типизацию.

Зачем ты прицепился к похапе? Да, там слабая типизация, но это проблема только похапешников, а не динамики в целом. Динамика может быть очень строгой, и даже запрещать любое приведение типов. В рантайме можно навесить какие угодно проверки. А в сишках твоих рантайм вообще не контролируется никак, и в итоге имеем такое минное поле, что несоответствие типов в скриптоте - детские шалости (и это моментально вылазит при тестировании в языках чуть более вменяемых, чем похапе).

anonymous
()
Ответ на: комментарий от crutch_master

Класс, как мы уже выяснили, ни к чему не конвертируется.

Что значит не конвертируется? Еще раз - был тип char станет int. Или был int, стал float. Классический пример конвертации.

Видел одну функцию которая могла возвращать строку/логическое/целое.

И в чем проблема с такой фунцией? В сишке строка/логическое/целое - вообще одно и то же.

anonymous
()
Ответ на: комментарий от anonymous

В сишке строка/логическое/целое - вообще одно и то же.

Просто в сишке ничего и нет, кроме чисел. Не до всех это доходит, люди искренне считают, что там есть какая-то система типов. Ну да, пока хелловорлды пишешь, такая иллюзия присутствует. На любом реальном коде она вдребезги разбивается о *void. Ну тоже ведь тип, фигле.

anonymous
()
Ответ на: комментарий от anonymous

Динамика может быть очень строгой

Разница тут со статикой тогда в чём? Что там пишут int i, а тут $int_i ?

А в сишках твоих рантайм вообще не контролируется никак

Как напишешь, так и будет контролироваться. Интерпретаторы скриптовые на чём сами написаны, как думаешь?

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

char, int, float - классы? Где там char стал вдруг int? Результат операции стал int, а char, как char'ом был, так им и остался. С float'ом тоже.

И в чем проблема с такой фунцией?

В том, что ты ждешь от функции число, а тебе внезапно приходит строка или класс. И это поведение не/хреново документировано.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Как напишешь, так и будет контролироваться.

Не будет, потому что задолбаешься. Как думаешь, зачем интерпретаторы и компиляторы высокоуровневых языков вообще пишут? Ведь казалось бы C++ хватит всем.

anonymous
()
Ответ на: комментарий от anonymous

Как думаешь, зачем интерпретаторы и компиляторы высокоуровневых языков вообще пишут?

Удешевить/ускорить процесс разработки. Ну и просто, если копмилять влом или скрипт часто правится/просматривается. Если нужна тонкая работа/производительность всё также берут C/C++

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Разница тут со статикой тогда в чём?

А нет никакой разницы, что тебе тут и стараются объяснить анонимусы. Разница только во времени: когда делаются проверки. В статике пытаются объять всё заранее до запуска, с разным успехом. Почти всегда это накладывает серьезные ограничения на возможные абстракции и выразительность языка. А возможности динамики безграничны, зависят только от ума и фантазии авторов. Но у тебя в голове почему то стойкая ассоциация: динамический язык == похапе. Про лиспы, смолток, ребол, ио не говорю, но даже попсовые руби с питоном мимо тебя прошли похоже.

anonymous
()
Ответ на: комментарий от anonymous

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

Вот, раз мимо тебя они не прошли, объясни в чём профит питона при написании, например, тетриса?

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

Что ты угараешь? Если надо что-то распарсить и влом писать это на сях, то пишем на пёрле. Если парсить надо много и быстро таки берём и компиляем.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Повторяй, тебя тут уже так обосрали, повторяй - не повторяй, один х...

javaQest
() автор топика
Ответ на: комментарий от crutch_master

Если надо что-то распарсить и влом писать это на сях, то пишем на пёрле. Если парсить надо много и быстро таки берём и компиляем.

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

javaQest
() автор топика
Ответ на: комментарий от javaQest

обоснуешь

За то, что на статике кроме hello world ничего серьёзнее написать нельзя сперва обоснуй.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

char, int, float - классы?

Типы. Какая разница являются они классами или нет? Речь о том, что берется один тип и неявно превращается в другой тип.

Где там char стал вдруг int?

Я делаю ф-ю, которая принимает int: int foo(int n){return 0}, а потом делаю:

char x = 1;
foo(x);
сильная статика должна дать по рукам. в сишке (слабой статике) тип х чудесным образом превращается из char в int и все чекается.

В том, что ты ждешь от функции число, а тебе внезапно приходит строка или класс.

Так если она может вернуть как числа, так и строку или класс, то я жду число, строку или класс, то есть тип (U Number String FooClass). Все впорядке.

anonymous
()
Ответ на: комментарий от anonymous

Так если она может

Откуда ты знаешь, что она может, если доки херовые, а название возвращаемой переменной неоднозначное? Весь говнокод будешь расколупывать?

неявно превращается в другой тип

Ты берешь переменную типа char передаешь её в функцию с типом int. Ты прекрасно видишь что куда передаешь.

х чудесным образом превращается из char в int

x остаётся char, как и был, не во что он не превращается. Int тут - n. Сравниваешь зубочистку с бревном.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Откуда ты знаешь, что она может, если доки херовые

Если доки настолько херовые, что даже не описывают, что может и не может вернуть ф-я, то статика уже точно тут никак не поможет. Ну и у нормальных людей все ок в с доками.

Ты берешь переменную типа char передаешь её в функцию с типом int.

И переменная типа char неявно конвертится к типу int, ага.

x остаётся char

Нет, не остается. После того как ты засунул его в ф-ю, он уже int. То есть выполнена неявная конверсия.

anonymous
()
Ответ на: комментарий от crutch_master

вот так должен вести себя язык с сильной типизацией:

> (: x Float)
> (define x 10)
. Type Checker: type mismatch
  expected: Flonum
  given: Positive-Byte in: 10
> (define x 10.0)
> (define x 1)
. Type Checker: type mismatch
  expected: Flonum
  given: One in: 1
> (define x (exact->inexact 1))
> 
как видишь, никаких неявных конверсий, чтобы тайпчекер допустил программу, надо явно преобразовать integer во float.

anonymous
()
Ответ на: комментарий от anonymous

Нет, не остается.

Хочешь сказать x до вызова char, а после - int? Как так может получиться? Было выделено на x 1 байт, а стало 4. Или это char расширяется, после того, как ты передал его функции с аргументом int? Или плюсы стали динамичнее? Лучше бы ты написал:

char c = 10;
int i;
i = c;
А вообще, если включить варнинги, компилятор тебя благополучно пошлёт.

Если доки настолько херовые, что даже не описывают, что может и не может вернуть ф-я, то статика уже точно тут никак не поможет.

Листал тут код на плюсах, не поверишь, всё понятно без доков. Листал до этого код на пыхе, ну ты понял.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 4)
Ответ на: комментарий от crutch_master

Хочешь сказать x до вызова char, а после - int?

Нет, я хочу сказать, что f(x) меняется на f((int)x).

Листал тут код на плюсах, не поверишь, всё понятно без доков.

Ну так и на динамике он понятен будет.

Листал до этого код на пыхе, ну ты понял.

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

anonymous
()
Ответ на: комментарий от javaQest

По моему скромному мнению, тебе с твоими открытиями вообще не место вне дурдома, но ты же упертый, и постоянно заново вылазишь.

leave ★★★★★
()
Ответ на: комментарий от leave

Я вот. в прошлый раз был не сдержан. Но ты мое мнение о себе знаешь. По-идее, за такие высеры, которые ты себе тут позволяешь, тебя из модераторов должны были выкинуть уже давно. я уже молчу об уровне твоей компетентности. Но стучать я не буду, не сцы, я по прежнему джентельмен, не опускаюсь до уровня животных, за всю жизнь, на мне нет ни одного пятна, по этому поводу. Надеюсь, так оно и будет впредь.

Это последнее, что я тебе сказал, если будет ответ, я его не увижу, ты отныне в игноре.

javaQest
() автор топика
Ответ на: комментарий от javaQest

Модераторов нельзя игнорировать, извини )

leave ★★★★★
()
Ответ на: комментарий от leave

Может, при регистрации на лоре все-же пора начинать требовать справку, что не шизофреник? А то какая-то зашкаливающая концентрация пациентов.

anonymous
()
Ответ на: комментарий от anonymous

Мне иногда кажется, что он под тебя пытается косить, только соображалкой не вышел.

leave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.