The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Увидел свет язык программирования Julia 1.0, opennews (?), 09-Авг-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


37. "Увидел свет язык программирования Julia 1.0"  +1 +/
Сообщение от Blind Vic (ok), 10-Авг-18, 08:03 
> Динамическая типизация: язык не требует явного определения типов для переменных по аналогии со скриптовыми языками программирования.

Насколько мне известно, смысл динамической типизации в том, что переменная имеет всегда один тип. А явное определение типа не признак статической типизации.

Похоже на трудности перевода и напридумывание, потому что на главной странице сайта:

> Julia has a rich language of descriptive datatypes, and type declarations can be used to clarify and solidify programs.

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

40. "Увидел свет язык программирования Julia 1.0"  +1 +/
Сообщение от Аноним (38), 10-Авг-18, 08:22 
> Насколько мне известно, смысл динамической типизации в том, что переменная имеет всегда один тип. А явное определение типа не признак статической типизации.

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

В Julia объектная модель, хоть и простая, но есть. Есть универсальный тип Any. Однако можно указать значение какого типа должна принимать переменная (или потомка этого типа). Впрочем, сейчас это сделано для аргументов функций и при инициализации. Глобальные переменные типизировать нельзя.

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

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

43. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 10-Авг-18, 08:46 
> Смысл динамической типизации в том, что переменная вообще не имеет типа. Тип есть у

значения переменной.

Откуда вы такое взяли? Можно источник? Потому что не вижу смысла в этих словах.

По вашей логике у всех переменных в динамических языках всегда один тип -- ссылка на объект.
А "тип значения переменной" для меня эквивалентно "тип переменной".

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

46. "Увидел свет язык программирования Julia 1.0"  +1 +/
Сообщение от Аноним (38), 10-Авг-18, 09:00 
> По вашей логике у всех переменных в динамических языках всегда один тип -- ссылка на объект.

Обычно так и есть. В противном случае будут проблемы с выделением памяти под значение

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

54. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от nobody (??), 10-Авг-18, 09:31 
И какой размер в памяти занимает переменная, если она не ссылка и хранит любой объект внутри себя? Тоже "любой"?
В динамических языках переменные это именно что ссылки на объекты
Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

58. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 10-Авг-18, 09:41 
> И какой размер в памяти занимает переменная, если она не ссылка и
> хранит любой объект внутри себя? Тоже "любой"?
> В динамических языках переменные это именно что ссылки на объекты

Вы с кем разговариваете / кому отвечаете?

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

59. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от nobody (??), 10-Авг-18, 09:42 
Вам. По ветке не очевидно?
Ответить | Правка | Наверх | Cообщить модератору

61. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 10-Авг-18, 09:46 
Просто вы сказали то же самое, что и я.

> В динамических языках переменные это именно что ссылки на объекты
> По вашей логике у всех переменных в динамических языках всегда один тип -- ссылка на объект.

Это был мой ответ на

> Смысл динамической типизации в том, что переменная вообще не имеет типа.

Я имел в виду, что переменные имеют один тип, во-первых. Во-вторых, отсюда следует вывод, что это статическая типизация. Исходя из логики первого комментария.

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

64. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от nobody (??), 10-Авг-18, 09:51 
Я, в свою очередь, отвечал на Вашу реплику: "По вашей логике у всех переменных в динамических языках всегда один тип -- ссылка на объект". Всё так и есть. И тип объекта и тип переменной - это разные вещи. Переменная всегда имеет один тип - "ссылка на объект". Но вот объекты либо имеют разные типы (когда объектная можель построена на классах), либо не имеют типа вообще (когда объектная модель построена на прототипах, как в SELF).
Ответить | Правка | Наверх | Cообщить модератору

65. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Аноним (38), 10-Авг-18, 09:53 
>> Смысл динамической типизации в том, что переменная вообще не имеет типа.
>Я имел в виду, что переменные имеют один тип, во-первых. Во-вторых, отсюда следует вывод, что это статическая типизация. Исходя из логики первого комментария.

Если переменная имеет тип, конторый не определён в пространстве языка программирования, то, считайте, что у неё нет типа. В динамических языках программирования, как правило, нет типа "чистая ссылка". Поэтому фраза, что "переменная не имеет типа", в целом, корректна.

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

78. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от forsimenemail (ok), 10-Авг-18, 10:29 
Не знаю, где это взял аноним, но у меня такие сведения отсюда: https://books.google.hu/books?id=4pgQfXQvekcC&pg=PT248&lpg=P...
Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

84. "Увидел свет язык программирования Julia 1.0"  –1 +/
Сообщение от Blind Vic (ok), 10-Авг-18, 10:49 
> Names have no types... Because variables have no types...

Я считаю, что это для более легкого понимания так написали.

https://en.wikipedia.org/wiki/Variable_(computer_science)

> In computer programming, a variable ... is a storage location (identified by a memory address) paired with an associated symbolic name (an identifier), which contains some known or unknown quantity of information referred to as a value. The variable name is the usual way to reference the stored value, in addition to referring to the variable itself, depending on the context.

a = 1

На низком уровне идентификатор `a` привязан к адресу в памяти, к-й содержит указатель на некий объект класса `int`. И так со всеми переменными. Т.е. все переменные являются указателями -- имеют тип, причем один и тот же на протяжении их жизни. Что, по сути, является признаком статической типизации, если придраться.

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

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

88. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от forsimenemail (ok), 10-Авг-18, 11:01 
Ну мы же про динамическую типизацию.
Ответить | Правка | Наверх | Cообщить модератору

155. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от freehckemail (ok), 11-Авг-18, 13:10 
>> Names have no types... Because variables have no types...
> Я считаю, что это для более легкого понимания так написали.

Сильно зависит от того, что понималось под 'variable' в том контексте.

> На низком уровне идентификатор `a` привязан к адресу в памяти, к-й содержит
> указатель на некий объект класса `int`. И так со всеми переменными.

Да, Вы правы, что все имена связываются с участками памяти через указатели. Разница лишь в том, когда происходит разыменование имени в указатель. В компилируемых языках зачастую разыменование происходит на этапе компиляции, и когда Вы, например, собрали программку на C, ей для выполнения уже и не нужно знать, что данная область памяти была в исходном коде связана с неким именем `a`. Правда, можно сохранять эти имена (их называют дебаг-символами) для отладочных нужд. В интерпретируемых языках эти имена придётся сохранять в любом случае.

> Т.е. все переменные являются указателями -- имеют тип, причем один и
> тот же на протяжении их жизни. Что, по сути, является признаком
> статической типизации, если придраться.

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

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

163. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 12-Авг-18, 08:39 
> Да, разница между статической и динамической типизациями заключена как раз в том, может ли связывание имени и типа меняться вместе с контекстом выполнения.

Рад , что в этом мы согласны. И жаль, что столько сообщений ушло в другом направлении.

Возвращаясь к моему первому комментарию.

> -  Динамическая типизация: язык не требует явное определение типов для переменных по аналогии со скриптовыми языками программирования. Поддерживается интерактивный режим работы;

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

Но это неправда. Похоже, что автор решил "помочь" своими объяснениями, хотя в оригинале этого нет.

> Although one sometimes speaks of dynamic languages as being "typeless", they are definitely not: every object, whether primitive or user-defined, has a type. The lack of type declarations in most dynamic languages, however, means that one cannot instruct the compiler about the types of values, and often cannot explicitly talk about types at all. In static languages, on the other hand, while one can – and usually must – annotate types for the compiler, types exist only at compile time and cannot be manipulated or expressed at run time. In Julia, types are themselves run-time objects, and can also be used to convey information to the compiler.

https://docs.julialang.org/en/stable/

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

164. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от freehckemail (ok), 12-Авг-18, 12:57 
>> Да, разница между статической и динамической типизациями заключена как раз в том, может ли связывание имени и типа меняться вместе с контекстом выполнения.
> Рад , что в этом мы согласны. И жаль, что столько сообщений ушло в другом направлении.

Ну там много чего наложилось. Опечатки вон те же.

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

А вот вопрос: есть ли динамически типизированный язык, где всегда надо указывать типы?

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

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

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

166. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 12-Авг-18, 19:37 
> А вот вопрос: есть ли динамически типизированный язык, где всегда надо указывать типы?

Интересно. Особенно интересно узнать мотивацию такого, если такое есть.

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

162. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 12-Авг-18, 08:31 
> Although one sometimes speaks of dynamic languages as being "typeless", they are definitely not: every object, whether primitive or user-defined, has a type.

https://docs.julialang.org/en/stable/

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

87. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 10-Авг-18, 10:57 
Кажется, я опечатался.

Надо было

> смысл статической типизации в том, что переменная имеет всегда один тип.

Либо

> смысл динамической типизации в том, что переменная может менять тип.

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

100. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от freehckemail (ok), 10-Авг-18, 13:01 
> Кажется, я опечатался.

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

Мыслите, отталкиваясь от понятия связывания. Это упростит размышления:
- статически типизированные языки запрещают изменение типа связывания
- динамически типизированные языки разрешают его смену

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

102. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Blind Vic (ok), 10-Авг-18, 13:04 
Что значит тип связывания?
Ответить | Правка | Наверх | Cообщить модератору

154. "Увидел свет язык программирования Julia 1.0"  +1 +/
Сообщение от freehckemail (ok), 11-Авг-18, 12:54 
> Что значит тип связывания?

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

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

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

Есть задачи, где гибкость более важна. Например символьные вычисления (Wolfram Mathematica и Maxima). Например, когда скорость разработки важнее гарантированного отсутствия багов, которые могут возникнуть в результате ошибок проектирования -- в этом случае проектировать систему надо очень осторожно, поэтому крупные компании стараются с этим не связываться, но для стартапа, который хочет конкурировать с гигантами, это если не единственно разумный, то как минимум вполне уместный вариант (Viaweb).

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

147. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от Аноним (145), 11-Авг-18, 00:15 
Вы путаете динамическую типизацию и вывод типов. Вывод типов = статическая типизация.
Ответить | Правка | К родителю #37 | Наверх | Cообщить модератору

165. "Увидел свет язык программирования Julia 1.0"  +/
Сообщение от freehckemail (ok), 12-Авг-18, 13:11 
> Вы путаете динамическую типизацию и вывод типов.

Я думаю, что и Вы тоже путаете вывод типов и необходимость указывать тип.

> Вывод типов = статическая типизация.

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

Тем не менее, ну вот берёте Вы скриптовый язык типа php. И вот допустим Вы пишете `a=1` или `a="1"`. Он же определит, что `a` в первом случае имеет тип int, а во втором -- string. Это тоже ведь в некотором смысле вывод типов, как-никак.

PS: Вон в Scala, говорят, тоже есть "вывод типов". Почитайте, в каком виде, посмеётесь. Тем не менее это -- вывод типов. ))

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

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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