правильно Strongtalk 24 июля 2013 г., 15:35 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Nikolay Kleptsov
Что же вы такое говорите? Статическая проверка типов работает во время компиляции, а не во время присваивания чего-то куда-то. 2013/7/24 Nikolay Kleptsov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
как можно на этапе компиляции проверить, если присвоение переменной происходит в активное время, а присвоить к переменной можно любой объект.
24 июля 2013 г., 15:37 пользователь Semyon Novikov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Smalltalk - живая среда. Каждый метод компилируется отдельно. Очень трудно отследить какой будет тип ответа из метода. 24 июля 2013 г., 15:41 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Nikolay Kleptsov
Я прямо теряюсь, что вам ответить. Мы вообще о разных вещах говорим, похоже. Обычно статически типизированные программы как раз быстрее. И проверка типов идет только во время компиляции."Очень трудно" это вам так кажется, а на практике это ничем не отличается от компиляции в .o файлы разных кусков одной программы на C++. 2013/7/24 Nikolay Kleptsov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Nikolay Kleptsov
Если только не указать какой тип будет возвращать каждый метод 24 июля 2013 г., 15:43 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Про вывод типов вы не слышали, я чувствую. 2013/7/24 Nikolay Kleptsov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Nikolay Kleptsov
Почему же тогда не используют Strongtalk - судя по сайту высокоэффективный яз программирования 24 июля 2013 г., 15:45 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Потому что его бросили поддерживать, я об этом и пишу. 2013/7/24 Nikolay Kleptsov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Конечно можно совершить насилие над Smalltalk добавив привязку к типам. Придется перелопачивать всю среду почти каждый объект. Сколько времени потребуется на отладку... Нету даже 50-ти процентной уверенности, что получится что хорошее. 24 июля 2013 г., 15:51 пользователь Semyon Novikov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Единственный вариант, кому нужна строгая типизация - это добавление в качестве отладочного инструмента, который можно включить и отключить. На exept.de (Smalltalk/x) есть статья про скорость, а также ее сравнительный анализ. Smalltalk в этом отношении довольно шустрый.
24 июля 2013 г., 15:54 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Насчет шустроты: http://benchmarksgame.alioth.debian.org/u64/benchmark.php?test=all&lang=vw&lang2=ghc&data=u64 Я не хочу сказать, что языки с динамической типизацией медленнее, если что. Это объективно не всегда так. Но как правильно статически-типизированные языки почему-то быстрее.2013/7/24 Nikolay Kleptsov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Вообще нас опять не туда прет совершенно. У меня претензий к быстродействию Smalltalk нет, если что. 2013/7/24 Semyon Novikov <[hidden email]>
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Что-то не так с тестами. Ну не в 10-30 раз медленнее. 24 июля 2013 г., 16:25 пользователь Semyon Novikov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Оверквотинг порезан.
Хочу добавить свои 5 копеек. Вся проблема с статической типизацией, что она требует более полного описания системы правил на каждом этапе разработки. В идеале, любая программа должна иметь наиболее полную и естесвенно непротиворечивую систему правил по которой она работает. Но написание самого кода собственно и есть процесс формирования этой системы правил. Что происходит, когда компилятор требует от вас то, о чем вы еще не подумали и что еще вам самим непонятно? Вам приходиться перестраиваться под него, чтобы его удовлетворить. И вот получается, что при написании программы вам вместо формирования своих правил, приходиться отвлекаться на занудство компилятора. И этот диктат очень сильно влияет на конечный результат. Простой пример: попробуйте унаследовать интерфейс в Жабе.. и допустим что на данный момент ваш код вызывает только один (1) метод этого интерфейса, тогда как интерфейс описует 10. Однако компилятор в жизни не отпустит вас пока вы не накопи-пастите все 10 методов. Работая с С++ я очень часто с сталкивался с подобным: я хочу чтоб было вот так, а компилятор (после чесания своей сверх-умной головы несколько минут) выдает мне ошибку и говорит садись двойка. В результате, все-равно я делаю как хотел изначально, но только после пары часов упрашивания компилятора не выдавать ошибку. Более того, очень важное отличие: в смаллтолке ошибка это норма. На самом деле такое понятие как "ошибка" даже не определена на уровне языка. Конечно за исключением ошибок синтаксиса, но с учетом насколько прост синтаксис это никогда не вызывает головной боли. Ошибки в смаллтолке определены как отдельная библиотека, которой можно пользоваться, а можно и полностью игнорировать. Что такое ошибка, а что нет полностью отдано на суд разработчика. То-есть не система определяет что есть ошибка в коде/программе, а человек. А это значит, что мне для описания своего свода правил ничего не мешает. (окромя семантики языка которая зашита намертво в ВМ :) ) -- Best regards, Igor Stasenko. -- -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Отличный текст, спасибо!
Совершенно справедливое замечание по поводу процесса формирования требований во время написания кода. А вот это уже лукавство, попытка удовлетворить компилятор это тревожный звоночек. Дело в том, что компилятор сам по себе не понимает, что вы пишете, но он понимает как работает то, что вы уже описали. Если вы начинаете противоречить самому себе -- он справедливо возмутится. То есть тактика "компилятор ругается, кастану тип" она проигрышна, потому что не компилятор нужно удовлетворять, а непротиворечивость модели данных.Что происходит, когда компилятор требует от вас то, о чем вы еще не подумали и что еще вам самим непонятно? Вам приходиться перестраиваться под него, чтобы его удовлетворить. Я еще раз повторю, что C++ и Джава в контексте дискуссии это не те системы статической типизации о которых я говорил. -- -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Nikolay Kleptsov
К слову, Smalltalk и так строго типизирован. Статические типы (опциональные) не так сложно (не сказать, просто) ввести в Smalltalk. Ведь тип — это всего лишь "сопроводительная" информация к объекту, добавить такие метаданные — совсем не проблема.
Автоматический вывод типов — существует уже в нескольких воплощениях: начало я видел в статьях еще 80-х годов, лет пять–десять назад запомнился RoelTyper, в прошлом и в этом году в GSoC-е участвуют соответствующие проекты. Поиск по "Smalltalk type inference" дает массу интересных ссылок, включая совсем свежую статью [http://pleiad.dcc.uchile.cl/papers/2013/allendeAl-scp2013.pdf]. В общем, там наверняка куча проблем, но не все так безнадежно.
Вот с использованием типов, похоже, все несколько сложнее… По крайней мере, я не припомню существующих инструментов, которые бы извлекали пользу из типов, хотя бы, при рефакторинге… Но это, наверное, просто характеризует качество реализации существующих инструментов — думаю их просто сложно переделать. Но, возможно, я просто не в курсе.
Про организацию проверки правильности программ я вообще не припомню чтобы слышал — нужно это вообще в Smalltalk-е? А попытаться увеличить скорость выполнения программ — вот это действительно интересная задача… и очень сложная, как я понимаю, при современном устройстве того же Pharo. Но, возможно, в этом направлении тоже идет работа?
-- Best regards, Dennis Schetinin 24 июля 2013 г., 14:02 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by semka.novikov
2013/7/24 Semyon Novikov <[hidden email]>:
> Отличный текст, спасибо! > Совершенно справедливое замечание по поводу процесса формирования требований > во время написания кода. > > Что происходит, когда компилятор требует от вас то, о чем вы еще не > подумали и что еще вам самим непонятно? Вам приходиться > перестраиваться под него, чтобы его удовлетворить. > > А вот это уже лукавство, попытка удовлетворить компилятор это тревожный > звоночек. Дело в том, что компилятор сам по себе не понимает, что вы пишете, > но он понимает как работает то, что вы уже описали. Если вы начинаете > противоречить самому себе -- он справедливо возмутится. То есть тактика > "компилятор ругается, кастану тип" она проигрышна, потому что не компилятор > нужно удовлетворять, а непротиворечивость модели данных. > Я еще раз повторю, что C++ и Джава в контексте дискуссии это не те системы > статической типизации о которых я говорил. > Возможно в Хаскеле дело обстоит получше, однако это не меняет подхода целиком. В смаллтолке нет даже такого понятия как "скомпилировать" программу, равно как нет и самого понятия как программа, что меня честно говоря сильно озадачивало, когда я впервые начал его изучение. Очень много вещей, которые я принимал за само-собой разумеющееся, отсутствовали в среде.. что конечно вызывало немалое удивление, как такое может работать без серьезной поддержки некой "системы типов", "компилятора" и т/п. Оказывается может.. и еще как. Сейчас я вообще считаю смаллток прямым свидетельством того, что сложные системы можно строить без использования статических типов и прочей формализации на этапе сборки программы. Одно дело детские шалости с ПХП, Перлом и т.п., которые сводятся к бультыханию в веб песочнице, и уж совсем другое это полноценная, зрелая среда разработки, плюс свой пользовательский интерфейс и прочее и прочее. К слову о Strongtalk и типах: действительно на начальном этапе разработки планировалось введение "мягкой" статики. Но как оказалось в последствии, после реализации JIT, надобность требовать от разработчика выводить типы в ручную и помечать ими методы и переменные совершенно лишняя, а виртуальная машина сама эффективно с этим справляется. В этом смысле Google Dart - прямой наследник Strongtalk-а. Позиционируется как компромисс между любителями статики и динамики. Но так же как и в Strongtalk-е они говорят: вы конечно можете помечать все что видите типами. Однако на скорости выполнения это не скажеться. Единственное в чем может быть преимущество это статический анализ кода, но это уже не основное требование системы, а как дополнитеная фича. -- Best regards, Igor Stasenko. -- -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
К слову о Strongtalk и типах: действительно на начальном этапе А вот это интересно. Где можно увидеть подробности? Я когда-то читал обратное, и эта мысль выглядит достаточно логичной: например, можно улучшить производительность за отказа от динамического поиска реализации и замены ее встраиванием там, где типы говорят, что это не нужно. Мне видится, что "не нужно" бывает очень часто в наиболее ключевых местах, типа Boolean-овских базовых методов (и за счет введения типов можно было бы отказаться от "грязных хаков" по оптимизиации в ВМ. Сейчас не могу сообразить, но интуитивно кажется, что типы (и/или другие подсказки со стороны программиста) могут помочь оптимизировать производительность и другими способами… Нет?
-- Best regards, Dennis Schetinin 25 июля 2013 г., 3:02 пользователь Igor Stasenko <[hidden email]> написал: 2013/7/24 Semyon Novikov <[hidden email]>: -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
In reply to this post by Dennis Schetinin
2013/7/25 Dennis Schetinin <[hidden email]> Ну на мой взгляд это как раз десятая проблема для St, на данный момент его производительность вполне приемлема.
Да, это типичная ошибка, путать strong typing с static typing.
Сами типы сделать просто, сложнее сделать вывод типов и грамотную систему типов в принципе.
Интересно, спасибо. RoelTyper у меня полтора года назад не захотел работать просто никак.
Мы сейчас про St или вообще? Если вообще, то я накидывал ссылок на инструменты основанные на системе типов.
Собственно основная задача статической типизации — проверка корректности. Как так не слышал? :)
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group. Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email]. Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out. |
Free forum by Nabble | Edit this page |