The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Релиз языка программирования Rust 1.21"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Релиз языка программирования Rust 1.21" –2 +/
Сообщение от Sw00p aka Jerom (?), 19-Окт-17, 20:15 
>>Ну это закономерный приём.

ну я в принципе ждал ответа вроде этого: "тип" - это .....

Приведу выдержку из википедии (по вашему совету):

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

Теория типов — математически формализованная база для проектирования, анализа и изучения систем типов данных в теории языков программирования (раздел информатики). Многие программисты используют это понятие для обозначения любого аналитического труда, изучающего системы типов в языках программирования. В научных кругах под теорией типов чаще всего понимают более узкий раздел дискретной математики, в частности λ-исчисление с типами.

Современная теория типов была частично разработана в процессе разрешения парадокса Рассела и во многом базируется на работе Бертрана Рассела и Альфреда Уайтхеда «Principia mathematica»[1].
"""

Обратите внимание на второй абзац, "изучения систем <ЖИРНО>типов данных</ЖИРНО> в теории языков программирования", то есть значения элементов множеств, а сам тип есть некие допустимые рамки этих значений, и в информатике этими рамками служит размер хранимого значения, память ведь линейная, достаточно вспомнить, что представляет из себя всякие символьные, целочисленные, строковые "типы" в языке С, чем они отличаются эти по сущности последовательности байтов? - размером. Ассемблеру разве не всё равно, берёте вы значение для сложения из ячейки памяти для строки или для инта.

Продолжу цитатой из вики (по вашему совету):

""" Система типов
Система типов — совокупность правил в языках программирования, назначающих свойства, именуемые типами, различным конструкциям, составляющим программу — таким как переменные, выражения[en]*, функции или модули. Основная роль системы типов заключается в уменьшении числа багов в программах[1] посредством определения интерфейсов между различными частями программы и последующей проверки согласованности взаимодействия этих частей. Эта проверка может происходить статически (на стадии компиляции[en]) или динамически (во время выполнения[en]), а также быть комбинацией обоих видов.
"""

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

Ниже по тексту:

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

Вот и всё, когда дело доходит до исполнения, понятие "типа" данных ЯП исчезает, включается понятие "типа" как размера, ибо инструкция выполняющая допустим сложение двух флоатов требует соответствующего размера регистров, и отсюда вся хренотень с db dw dd dq - и собственно для каждого размера свои инструкции.

Далее по тексту:

"""
Изучением систем типов занимается теория типов, хотя на практике конкретная система типов языка программирования основывается на особенностях архитектуры компьютера, реализации компилятора и общем образе языка.
"""

В самой архитектуре нет того понятия "типа" которое придумали в ЯП, отсюда и появляются всякие рантайм проверки типов (RTTI) (в С конечно их нет, С++ есть но на примитивы).


Идём дальше

""" Типобезопасность
Робину Милнеру принадлежит выражение «Программы, прошедшие проверку типов, не могут „сбиться с пути истинного“»[10]. Иначе говоря, безопасная система типов предотвращает заведомо ошибочные операции, связанные с неверными типами. Например, выражение 3 / "Hello, World" очевидно является ошибочным, поскольку арифметика не определяет операцию деления числа на строку. Формально, безопасность означает гарантию того, что значение любого выражения, прошедшего проверку типов, и имеющего тип τ, является истинным элементом множества значений τ, то есть будет лежать в границах диапазона значений, допустимого статическим типом этого выражения.
"""

3 / "Hello, World" - как это выражение можно написать на ассемблере? (3 - 4 байта, "Hello, World" - 12 байтов (без терминирующего нуля допустим))


""" Каламбур_типизации
на досуг
"""

>>Задайся вопросам: каким целям служит понятие типа в том или ином языке?

зачем мне уходить в абстракцию идти вверх, если нужно идти вниз, ближе к архитектуре.
В самой архитектуре нет понятия "типа" как в ЯП, тока тип как размер данных который принимает та или иная инструкция. я же могу 4 байта инта сложить с четырмя байтами строки, так и строки то нет - она же тоже из нуля и единицы. Сложится ? - да сложится. Результат будет "верный" (подразумевается успешное исполнение инструкции) ? - да, но не ожидаемый как значение.


>>Зачем программисты используют типы? Чего они достигают?

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


>>Даже с точки зрения размера это разные типы.

разные типы для кого? для человека может разные символьные и целочисленный, для компилятора С почти по барабану (или целое число в диапазоне 0-255, -127-+127), для архитектуре и подавно главное размер регистра.

>>То есть даже с точки зрения размера -- это разные типы.

я вот об этом же - кроме как "тип" как размер регистра(ячеек памяти) для архитектуры другого нет. Зачем всё усложнять? Я был бы рад если бы архитектура строго выделяла бы все описанные выше "типы", но она этого не делает, и нужность (необходимость) этих "типов" - увы не доказана даже в теории. Главный вопрос - зачем ввели эту теорию типов - остаётся открытым.



Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Релиз языка программирования Rust 1.21, opennews, 14-Окт-17, 09:35  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру