LINUX.ORG.RU

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

 


0

2

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

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

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

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

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

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

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

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



Последнее исправление: javaQest (всего исправлений: 2)

Более лучшие окружности

В динамически типизированном canvas'е.

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

Это не зависит от времени. Появление множества быдлоязычков не отменяет программирования как такового, и его основополагающих принципов

anonymous
()

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

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

Создавать/изменять в рантайме же. Компайлтайм это такая скукота, нужен лишь, чтобы поскорее начать создавать и изменять типы в рантайме.

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

нужен лишь, чтобы

вообще не нужен

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

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

Тебе надо пройти крэш-курс сомоллтока, например, прежде чем задавать подобные вопросы, хотя бы. А так это напоминает клоунаду, крошка-сын к отцу. Кому ты сдался, объяснять что-то тебе.

anonymous
()

Так то оно хорошо, но производительность же просядет, а ещё всё это будет жрать память.

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

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

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

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

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

Ну как минимум потому что надо хранить кучу информации о типах

тебе же популярно объяснили, что информацию о типах хранят сами типы

информацию о типах хранит только компилятор

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

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

простой пример, тип по дефолту не принимает какие то данные. По какому либо событию, он меняется, и начинает их принимать.

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

Кстати, да, удивительно, что кто то все еще думает, что жаба или, например хаскель сильно Икономят память, ты молодец.

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

define «тип», «дефолт», «принимать данные», «событие», «меняется»

Просто чтобы ты потом не съехал на кукареки.

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

Ну так кто из нас съехал на демогагию. Ладно, короче, ты на другом языке разговариваешь, ты вообще это никогда не поймешь, по ходу, нет желания время тратить на тебя. Щас начнется define программирование, компьютер, теща, тарелка борща. Отдохни.

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

простой пример, тип по дефолту не принимает какие то данные. По какому либо событию, он меняется, и начинает их принимать.

а тип чо, принимает данные?

что с данными после

По какому либо событию, он меняется, и начинает их принимать.
По какому либо событию, он меняется, и начинает их принимать.
...

?
это реализация АДа даных ?
«один раз не uint» (c) int ?

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

а тип чо, принимает данные?

А че нет? StringArray.push(number) -->>err

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

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

программирование

В контексте разработки ПО - процесс преобразования требований к ПО в форму, пригодную для исполнения на ЭВМ.

компьютер

Устройство, способное исполнять изменяемые последовательности вычислительных операций.

теща

Мать жены.

тарелка борща

Плоская круглая посуда с углублением в центре, наполненная супом из свеклы.

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

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

StringArray.push(number)

т.е. это по твоему тип принял данные, ок

Ты вообще, не пиши тут больше

иначе тебя забанят модеры
запомните этот твит (с)

з.ы. если ты откопал где-то желтушную IT-прессу - закопай обратно, отключи интернет и месяц посиди за чтением того что у тебя доступно локально (man, info, ...)

anTaRes ★★★★
()

Давай возьмём любой язык с зависимыми типами (например, Idris).

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

Check.

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

Check.

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

Check. +БОНУС: типы можно параметризовывать значениями (термами)

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

Нет, ибо динамикодрисня не нужна.

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

Check.

quantum-troll ★★★★★
()
Ответ на: комментарий от anTaRes

желтушную IT-прессу

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

javaQest
() автор топика

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

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

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от quantum-troll

объектами времени исполнения
Нет, ибо динамикодрисня не нужна.

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

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

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

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

Если нет динамики, то как они могут быть объектами времени исполнения?

И тем не менее, с типами можно обращаться точно так же, как со значениями. Например: http://docs.idris-lang.org/en/latest/tutorial/typesfuns.html#dependent-types

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

точно так же, как со значениями

как со значениями — это имеется в виду, видимо, как с примитивами. Например, присвоить можно, подать в качестве аргумента можно, а изменить — нет. Это немного не о том

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

а изменить — нет

В чистом функциональном языке значения вообще нельзя менять же.
Кстати, практический пример использования зависимых типов: http://www.youtube.com/watch?v=AWeT_G04a0A

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 2)

и тут ты приводишь юзкейсы

Первоклассность: могут быть использованы точно также, как и любой другой объект или значение.
Типы или классы являются объектами времени исполнения (не только времени компиляции)
Переменные могут иметь типы в качестве своих значений
Типы и классы могут быть созданы/изменены в рантайме
Мы имеем функции для манипуляции типами/классами, а также выражения для создания безымянных типов.
Нет необходимости в создании дополнительных динамических объектов для хранения типов, так как это делают сами объкты типов.

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

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

Очевидно Ваш, К.О.

anonymous
()

идеи модифицируемого кода витают ещё со времён ламповых вычислителей. сама идея забавная. но на практике, увы, малопригодная.
куда это применять? где на практике переменная может сменить пол и превратиться из одного типа в другой?
есть нестроготипизированные языки, где сплошная каша из данных и неявные приведения. и эта каша не способствует контролю над происходящим. сложно представить себе, что такое «функции для манипуляции типами» в физическом, а не теоретическом смысле. и тем более такой странный объект, как «безымянный тип». это как цвет волос лысого человека.
а что касается RTTI, то это и так реализовано во многих языках, без модификации типов переменных.

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

наполненная супом из свеклы

Наверное, всё-таки из быка. Суп из свеклы это как-то грустно.

mix_mix ★★★★★
()

javaQest

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

Мне иногда кажется, что тебя доводят до оргазма сами слова «тип», «динамически», «принимает параметры», «рантайм». Да?

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

ну, эппл и не образец для подражания. и весь инет завален вопросами «а как мне заставить это работать быстрее?».
смысл в том, что в машинном представлении никакой вариабельности не бывает. данные как записаны в память - так они там и лежат. программист при написании кода точно знает, какие данные к нему приходят. а если не знает, то использует дополнительные данные. байт, тем временем, остаётся байтом. у него нет ни вкуса, ни цвета, ни запаха. он не char и не int. он просто хранит 8 бит информации. можно над байтом навернуть кучу кода, который будет «помнить», что там хранится. но это ресурсоёмко и в 99% случаев не нужно.

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

ресурсоёмко и в 99% случаев не нужно

Что в 99% случаев совершенно не важно.

а как мне заставить это работать быстрее

У меня даже самые фанбойнутые знакомые андроидофилы признают, что и на топовых девайсах андроид не может не лагать, и до iOS'а ему по отзывчивости как до китая раком. Осмелюсь предположить, что все причины и решения вовсе не в отсутствии поля isa у каждого объекта, а в наличии рук/мозга у архитектора.

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

А по-твоему нельзя типизировать функции работающие с типами? В julia в каком-то виде такое есть.

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

Спешу напомнить, что

Deciding the equality of dependent types in a program may require computations. If arbitrary values are allowed in dependent types, then deciding type equality may involve deciding whether two arbitrary programs produce the same result; hence type checking may become undecidable.

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

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

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

потому что умели экономить и оптимизировать

Причина, ИМХО, в том, что оптимизации в компилтайме, а юзеринпут и интерактивность в рантайме. Отсюда и все проблемы. На момент компилтайма возможности оптимизации сильно огрничены.

То есть, все с точностью до наоборот.

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

при чём тут компилтайм? оптимизация - это оптимизация вообще. включая и архитектуру ПО. оптимизацией чисто компиляторной мало чего можно добиться. главное - сделать по уму.

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