Re: Нужна ли нам статическая типизация?
От: vdimas Россия  
Дата: 01.09.13 06:48
Оценка:
Здравствуйте, nikov, Вы писали:

N>Взгляните, например, на это выражение (псевдокод, синтаксис Haskell/Ela):

N>[haskell]
N>let foo f = (f fst, f snd)
N> bar g = g (id, [])
N> in (foo bar, foo map)

Этот пример ничего не показывает кроме св-в конкретной системы типов. Ничего не мешает вывести типы абстрактно/неуточненно, если бы система типов некоего статически компиллируемого языка это позволяла.

В шаблонном коде "абстрактные" типы превращаются в реальные только в месте применения реальных же типов. По аналогии с С++, можно уточнять шаблоны конкретными типами, а можно так же шаблонными. Недобство в синтакцисе С++ тут в том, что каждый новый уровень шаблонов требует нового ключевого слова template. Если бы синтаксис позволял делать это автоматом и сколько угодно глубоко иерархически, то проблем с аналогами приведеного примера не было бы. Конкретные типы выводились бы в местах вызова с конкретными же типами. Чуть выше на макросах+шаблонах С++ показали абсолютно правильно.

Другое дело, что макросы и шаблоны — это же родственные технологии, т.к. у них родственная задача — обобщенная кодогенерация. В этом смысле, если сделать св-ва подстановки шаблонов "автоматом и сколько угодно глубоко иерархически" это будет то же самое, что добавление св-ва "нетипизированности" макросов в шаблоны... Но я всё еще не вижу здесь потери статической типизированности, ведь любая подстановка в итоге должна породить корректное, с т.з. системы типов, выражение. Я вижу потенциальную проблему только в диагностических сообщениях о подобных выражениях после серий подстановок. ))
Re[6]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.13 01:41
Оценка:
Здравствуйте, WolfHound, Вы писали:

N>>И часто нужно модули в бинарной форме распостранять, без исходников.

WH>Тут либо одно. Либо другое.

Можно производить частичную компиляцию. В бинарники можно АСТ или другое промежуточное представление засовывать, например.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 16.09.13 12:13
Оценка:
Здравствуйте, VladD2, Вы писали:

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

Ты не хуже меня знаешь, что это фактически распространение в исходниках.
Декомпиляторов для .НЕТ тьма.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.13 00:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ты не хуже меня знаешь, что это фактически распространение в исходниках.

WH>Декомпиляторов для .НЕТ тьма.

Знаю точно, что это не исходники. Декомпиляторы тут не причем. Решается не задача обфускации, а задача бинарного распространения библиотек. Те же макры без намного удобнее подключать к проекту в виде длл-без нежели тащить с собой проекты.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 17.09.13 12:56
Оценка:
Здравствуйте, VladD2, Вы писали:

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

Ну, так можно просто закатывать исходники в архив и всё.
И будет бинарное распространение.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.13 19:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ну, так можно просто закатывать исходники в архив и всё.

WH>И будет бинарное распространение.

Это если ты инфраструктуру сделаешь. А просто зип будет такой же неудобный и проблемый как исходники.

Тут целью является достижение модульности. В сборке с АСТ-ом могут разные метаданные валяться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 17.09.13 19:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это если ты инфраструктуру сделаешь. А просто зип будет такой же неудобный и проблемый как исходники.

Ну, так и для сериализованного АСТ нужна инфраструктура.

VD>Тут целью является достижение модульности. В сборке с АСТ-ом могут разные метаданные валяться.

Больше чем в исходниках валяться не может. Единственное преимущество сериализованного АСТ перед архивом с исходниками это скорость работы.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.13 19:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ну, так и для сериализованного АСТ нужна инфраструктура.


Нужна, но я не о том.

WH>Больше чем в исходниках валяться не может. Единственное преимущество сериализованного АСТ перед архивом с исходниками это скорость работы.


Может. Информация о проектах. В исходнике банально может не хватать зависимостей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Нужна ли нам статическая типизация?
От: Кодт Россия  
Дата: 18.09.13 08:28
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>
RO>tnpo (Just x) = Just (Just (Just (tnpo x)))
RO>tnpo Nothing = Just Nothing
RO>collatz x = collatz3 x x x
RO>collatz3 x (Just y) (Just (Just z)) = collatz3 x y z
RO>collatz3 x y Nothing = collatz y
RO>collatz3 x y (Just Nothing) = collatz (tnpo x)
RO>


Ты это сам придумал?! Но чёртвозьмихолмс, как?

RO>И какой тип возвращаемого значения collatz (Just (Just (... (Just Nothing))...)? Я вот уверяю, что эта функция берет Maybe a и всегда возвращает Nothing. Докажи или опровергни :−)


Доказательство очень простое: единственная нерекурсивная ветка здесь — tnpo Nothing = Just Nothing.
Поэтому, если программа останавливается, то она останавливается на Just Nothing.
А проблема остановки решается очень просто: ставим хаскелл на Крэй-1 и ждём 6 секунд
Перекуём баги на фичи!
Re[4]: Нужна ли нам статическая типизация?
От: Roman Odaisky Украина  
Дата: 18.09.13 08:45
Оценка:
Здравствуйте, Кодт, Вы писали:

RO>>
RO>>tnpo (Just x) = Just (Just (Just (tnpo x)))
RO>>tnpo Nothing = Just Nothing
RO>>collatz x = collatz3 x x x
RO>>collatz3 x (Just y) (Just (Just z)) = collatz3 x y z
RO>>collatz3 x y Nothing = collatz y
RO>>collatz3 x y (Just Nothing) = collatz (tnpo x)
RO>>


К>Ты это сам придумал?!


Нет, конечно, пытался как-то сделать тип, соответствующий гипотезе «3n+1». Там еще не хватает collatz (Just Nothing) = Just Nothing, чем всё и должно завершаться. Теперь компилятор, чтобы вывести тип, должен доказать гипотезу или опровергнуть.
До последнего не верил в пирамиду Лебедева.
Re[13]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 18.09.13 11:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Может. Информация о проектах. В исходнике банально может не хватать зависимостей.

А в сборку их святой дух записывает?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.09.13 20:41
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Может. Информация о проектах. В исходнике банально может не хватать зависимостей.

WH>А в сборку их святой дух записывает?

Нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 19.09.13 11:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Может. Информация о проектах. В исходнике банально может не хватать зависимостей.

WH>>А в сборку их святой дух записывает?
VD>Нет.
Так откуда она берётся? Правильно. Из исходников.
Вот я и говорю что единственная разница между сборкой и исходниками это потребление ресурсов на машине пользователя.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Нужна ли нам статическая типизация?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.09.13 18:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>>>Может. Информация о проектах. В исходнике банально может не хватать зависимостей.

WH>>>А в сборку их святой дух записывает?
VD>>Нет.
WH>Так откуда она берётся? Правильно. Из исходников.

Из файлов проектов, из метаинформации других сборок.

Исходники не несут всей информации. Не будет у тебя какого-то класса и как понять что это?

WH>Вот я и говорю что единственная разница между сборкой и исходниками это потребление ресурсов на машине пользователя.


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

Плсю в сборку можно положить не только АСТ, но и код его обработки. А это уже совсем другой уровень, как ты понимаешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Нужна ли нам статическая типизация?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.09.13 23:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Вот я и говорю что единственная разница между сборкой и исходниками это потребление ресурсов на машине пользователя.


Главная разница между исходниками и бинарниками в том, что в бинарнике все имена отресолвлены, типы выведены и весь синтаксический сахар развернут.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[17]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 22.09.13 12:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

WH>>Вот я и говорю что единственная разница между сборкой и исходниками это потребление ресурсов на машине пользователя.


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


И что это даёт кроме того на что ты отвечаешь?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 22.09.13 12:32
Оценка:
Здравствуйте, VladD2, Вы писали:

WH>>Так откуда она берётся? Правильно. Из исходников.

VD>Из файлов проектов, из метаинформации других сборок.
Ну, так архивы с их исходниками лежат рядом.

VD>Исходники не несут всей информации. Не будет у тебя какого-то класса и как понять что это?

Ту таки святой дух работает?

VD>Разница в полноценности. Имея сборку можно определить зависимости. С исходниками же все сложнее. Им нужны проекты, мекфайлы, правильное расположение на диске, внешние утилиты... В общем, все это сложно.

Те нужна инфраструктура. Но она и сборкам нужна.

VD>Плсю в сборку можно положить не только АСТ, но и код его обработки. А это уже совсем другой уровень, как ты понимаешь.

Я даже не понял выделенное. Это о чём?
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Нужна ли нам статическая типизация?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.09.13 12:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>И что это даёт кроме того на что ты отвечаешь?


Гарантию отсутствия ошибок определенного рода. Я в свое время с питоном наелся подобного, когда скрипт где то внутри осыпается по непонятным причинам из-за того что где то что то неотресолвилось или отресолвилось неправильно.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[19]: Нужна ли нам статическая типизация?
От: WolfHound  
Дата: 22.09.13 15:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Гарантию отсутствия ошибок определенного рода. Я в свое время с питоном наелся подобного, когда скрипт где то внутри осыпается по непонятным причинам из-за того что где то что то неотресолвилось или отресолвилось неправильно.

Мы же говорим про статическую типизацию? Так что питон тут вообще не причём.
А перед созданием архива исходники можно проверить.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Нужна ли нам статическая типизация?
От: BulatZiganshin  
Дата: 25.09.13 15:36
Оценка:
Здравствуйте, nikov, Вы писали:

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


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

для небольших/исследовательских проектов (write-only) дин. типизация предпочтительней

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