Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Замыкание в Смолтоке должно происходить на переменную
Ответ
 
Опции темы Опции просмотра
  (#31 (permalink)) Старый
Вася Чайко Вася Чайко вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.02.2007
По умолчанию 06.11.2009, 20:20

Цитата:
Symbol это подкласс от String, и в нём есть реализация кое-какого дополнительного интересного поведения. Во первых, невозможно создать символ, в котором есть буквы, противоречащие правилам именования объектов в Smalltalk, например, в символе не может быть пробелов.
Вы считаете что #'символ с пробелами' - это не символ?
Ответить с цитированием
  (#32 (permalink)) Старый
Вася Чайко Вася Чайко вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.02.2007
По умолчанию 06.11.2009, 20:43

Цитата:
И про байт-код: где бы о нём почитать? Хочу понять, из каких инструкций он состоит.
http://stephane.ducasse.free.fr/FreeBooks/...ok/Bluebook.pdf

Четвёртая часть.
Ответить с цитированием
  (#33 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 07.11.2009, 04:31

Насчёт "обработать Смолток напильником" для соответствия синтаксиса языка решаемой задаче - оказывается, идея не нова.
Думаю, это будущее программинга - для каждой задачи генерировать подходящий синтаксис и выражать решение на нём.
http://en.wikipedia.org/wiki/Languag...ed_programming
А идея приучать себя к строгому соответствию синтаксиса языка - имхо, пережиток прошлого. Это всё равно что ездить на трамвае - хотя едешь не совсем туда куда хочешь, зато по рельсам
Заметьте, весь путь эволюции языков программирования нацелен на поднятие уровня абстракции от машинных инструкций к решаемой программистом проблеме. Поэтому от "напильника" никуда не уйти, и в конце концов языки-трансформеры поработят мир кодеров.

UPD.
Вот это весчь!
http://ru.wikipedia.org/wiki/Katahdin
Ответить с цитированием
  (#34 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 07.11.2009, 05:34

Цитата:
Смоллток не такая черепаха, как кажется. Арифметика, которую вы так любите, может поразить скоростью и удобством использования.
1024 factorial посчитайте в воркспейсе что ли.
Ещё какая черепаха!
Посмотрел алгоритм вычисления факториала в дольфине. Вычислительная сложность алгоритма - квадратичная. То есть, почти самый хреновый алгоритм из всех существующих. Да ещё помножить это на тормознутость Смолтока. Короче, любой студент легко напишет программу на Паскале, вычисляющую факториал больших чисел в 10+ раз быстрее. Ну и зачем, скажите, загружать 10 процессоров параллельным Смолток-вычислением, когда то же самое можно сделать на одном процессоре, использовав другой язык/среду разработки? Имхо, ниша "управляемого" кода не столь уж и широка - реализовать самую муторную часть работы (напр, визуальный интерфейс), код которой не критичен к скорости выполнения, и запустить это на одном из процессоров системы, в то время как остальные будут в это время выполнять быстрые базовые примитивы обработки данных, написанные на низкоуровневом языке и заточенные под текущее железо (шифрование, кэширование, реализация всевозможных деревьев быстрого доступа и т.д.).

А насчёт удобства использования - вообще не понял о чём Вы. Чем "1024 factorial" удобнее "1024!" или "fac(1024)"?
Ответить с цитированием
  (#35 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 08:53

Цитата:
Ещё какая черепаха!
Посмотрел алгоритм вычисления факториала в дольфине. Вычислительная сложность алгоритма - квадратичная.
То есть, почти самый хреновый алгоритм из всех существующих. Да ещё помножить это на тормознутость Смолтока. Короче, любой студент легко напишет программу на Паскале, вычисляющую факториал больших чисел в 10+ раз быстрее.
Ага, Thompson & Ugur лохи, а Cornered_Rat кросавчег, умеет считать быстрее.
Вот и чудненко. Предъявите в студию, pls, программу на Паскале, считающий не по Томпсону-Угуру точный факториал 1024.
Мне очень интересно посмотреть её скорость работы. Заодно поймёте, о каком удобстве использования я говорю.
Ответить с цитированием
Ads.
  (#36 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 07.11.2009, 09:15

Эээ... Ну надо же какая неграмотность в Computer Science встречается среди программистов!
Маленький ликбез: перемножить два длинных числа можно обычным способом (в столбик) за время O(n^2), где n = длина чисел, а можно с помощью хитрых приёмов значительно быстрее, за время O(n*log(n)). Материала об этом в интернете - по самое "не хочу". Ищите и обрящете. Приводить код здесь не имеет смысла, т.к. тема большая и интересная, но к Смолтоку не относится.

Цитата:
Cornered_Rat кросавчег
За комплимент спасибо

UPD.
Кстати, сам метод томсона-угура можно легко усовершенствовать, разбивая числа не на пары, а на группы из большего количества чисел. Усовершенствованный метод будет, очевидно, быстрее томсона-угура.
Ответить с цитированием
Ads
  (#37 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 09:17

Цитата:
Вы считаете что #'символ с пробелами' - это не символ?
Да, звиняй, брат, не знал о таком виде символьных литералов.
Ответить с цитированием
  (#38 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 09:25

Цитата:
Эээ... Ну надо же какая неграмотность в Computer Science встречается среди программистов!
Маленький ликбез: перемножить два длинных числа можно обычным способом (в столбик) за время O(n^2), где n = длина чисел, а можно с помощью хитрых приёмов значительно быстрее, за время O(n*log(n)). Материала об этом в интернете - по самое "не хочу". Ищите и обрящете. Приводить код здесь не имеет смысла, т.к. тема большая и интересная, но к Смолтоку не относится.

За комплимент спасибо
Хитрое FFT умножение даёт профит начиная с каких-то серьёзных битностей -- там инициализация долгая. Так что отмазаться не получится -- покажите быструю программу на Паскале. Контролировать успешность процесса сможете при помощи вот такого кода: Time microsecondsToRun: [1024 factorial].
Ответить с цитированием
  (#39 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 09:36

Цитата:
Кстати, сам метод томсона-угура можно легко усовершенствовать, разбивая числа не на пары, а на группы из большего количества чисел. Усовершенствованный метод будет, очевидно, быстрее томсона-угура.
Вот вам замечательный инструмент для экспериментов в этой области -- быстрый к изменениям кода смоллток. Отшлифуете свой метод Cornered_Rat'a до блеска и войдёте в историю
Как считать время исполнения кода, я показал топиком выше.
Но я почти уверен, что ничего такого не будет. Потому что голословно болтать языком легче.
Ответить с цитированием
  (#40 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 07.11.2009, 10:10

Простите, мне влом писать код. Стимула нет и результат очевиден. И я понимаю, почему дольфиновцы тоже не напрягались над реализацией самого быстрого алгоритма, а выбрали алгоритм, умещающийся на десятке строк - потому что при реализации в смолтоке время дополнительно умножается на свойственный управляемому коду "коэффициент тормознутости", так что удивить скоростью смолток всё равно никого не сможет. Писать ресурсоёмкие вычислительные процедуры тут бессмысленно. Это за пределами ниши этого языка.
А кроме FFT есть ещё другие способы умножения, с промежуточной сложностью между O(n ln(n)) и O(n^2), более простые в реализации и дающие выигрыш в производительности при более малых длинах чисел. У нас целый спецкурс был по быстрым вычислительным методам.
Ответить с цитированием
  (#41 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 17:25

Цитата:
Простите, мне влом писать код. Стимула нет и результат очевиден.
Каэш, это же ДЕЛАТЬ что-то надо. Дольфиновцы ему видите ли не напряглись... Бгг...
Смею заметить, что долфин писали 2 человека.
Один человек (Блейр фамилия) колдовал над VM (C++), другой (Бауэр) над средой, над смоллтоком. Вот такой вот симбиозец получился, статики с динамикой.
Вы в своей жизни что написали?
Ответить с цитированием
  (#42 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 07.11.2009, 18:19

Цитата:
Вы в своей жизни что написали?
Много чего. Последние 10 лет пишу разную хрень на дельфях (мелкие и не очень мелкие проекты для разных заказчиков). До этого предпочитал x86-ассемблер (из давних "подвигов" помню, что написал отладчик защищённого режима, чтобы выполнить заказ по локализации одной игрушки, работавшей через DOS4GW, а подходящих для этого отладчиков у меня не было). Перед этим любил писать программки для БК0010, причём в машинных кодах. До этого был калькулятор МК-52.
Среди других моих нынешних увлечений - программирование микроконтроллеров.

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

А авторов дольфина я нисколько не упрекаю. Они затратили оптимальное количество усилий на написание процедуры факториала. Большее количество затраченных усилий на реализацию быстрого алгоритма всё равно не было бы оценено по достоинству - использовать смолток для быстрого вычисления больших факториалов никто и так не станет.
Ответить с цитированием
  (#43 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 07.11.2009, 20:43

Переход на личности связан вот с чем:
Цитата:
Посмотрел алгоритм вычисления факториала в дольфине. Вычислительная сложность алгоритма - квадратичная. То есть, почти самый хреновый алгоритм из всех существующих. Да ещё помножить это на тормознутость Смолтока. Короче, любой студент легко напишет программу на Паскале, вычисляющую факториал больших чисел в 10+ раз быстрее.
Про алгоритм вычисления факториала -- ложь, потому что использован один из лучших алгоритмов ВЫЧИСЛЕНИЯ ФАКТОРИАЛА, про умножение потом уже заговорили.
Про студентов на паскале -- ложь, потому что наверно один из тысячи сможет найти вменяемую библу работы с большими целыми, подключить её, и откомпилировать. И если спросить этого студента потом об удобстве работы со всем этим хозяйством, он и не на такие личности может перейти.
Потом ещё были пассажи на Томпсона-Угура, что есть Особые Методы Группировки чисел, и можно сделать быстрее, а то что группировка требует маш. ресурсы, об этом как-то забыли. В общем, сами напросились.
Ответить с цитированием
  (#44 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 08.11.2009, 07:01

Увы, но во всей нашей дискуссии по поводу смолток-факториала у Вас было лишь одно верное высказывание (о том, что я - кросавчег).

Цитата:
Про алгоритм вычисления факториала -- ложь, потому что использован один из лучших алгоритмов ВЫЧИСЛЕНИЯ ФАКТОРИАЛА, про умножение потом уже заговорили.
Вот более быстрый алгоритм вычисления факториала: чтобы вычислить произведение длинного списка чисел, нужно разбить эти числа на две группы - которые на чётных местах и которые на нечётных, рекурсивным вызовом этой же функции вычислить произведение каждой из этих групп чисел, а потом полученные результаты перемножить. Если при умножении использовать не самый тупой алгоритм, то вычисление факториала будет значительно быстрее.

Цитата:
Про студентов на паскале -- ложь, потому что наверно один из тысячи сможет найти вменяемую библу работы с большими целыми, подключить её, и откомпилировать.
Какие ещё библы? Если студент не может написать свою функцию для умножения длинных чисел, то это неправильный студент Но даже паскалевская программа тупого студента, вычисляющая факториал по вышеприведённому алгоритму через медленное умножение длинных чисел ("столбиком"), всё равно будет работать в разы быстрее смолтоковского томсона-угура.

Цитата:
Потом ещё были пассажи на Томпсона-Угура, что есть Особые Методы Группировки чисел, и можно сделать быстрее, а то что группировка требует маш. ресурсы, об этом как-то забыли.
Какие ещё маш. ресурсы? Томсон-Угур их группирует парами, если группировать тройками, получится в 1.5 раза быстрее.
Код:
factorial3p
  "Томсон и Угур идут лесом"

  | x0 x1 x2 x3 |
  self < 3 ifTrue: [^self < 0 ifTrue: [self error: 'negative factorial'] ifFalse: [self = 2 ifTrue: [2] ifFalse: [1]]].
  x0 := 6.
  x1 := x0.
  x2 := 108.
  x3 := x0.
  self // 3 - 1 timesRepeat: 
    [x1 := x1 + x2.
    x0 := x0 + x1.
    x2 := x2 + 162.
    x3 := x3 * x0].
  self \\ 3 > 0 ifTrue: [x3 := x3 * self].
  self \\ 3 = 2 ifTrue: [x3 := x3 * (self - 1)].
  ^x3
Ответить с цитированием
  (#45 (permalink)) Старый
Dionisiy Dionisiy вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.06.2007
По умолчанию 09.11.2009, 02:11

Эффективные алгоритмы - это конечно здорово и интересно.

Но для того чтобы быстро решить задачу вычисления факториала , на смолтолке нужна минута, а то и меньше. А вот реализорвать такой же рекурсивный тупой алгоритм на С или паскале это проблема. Потому что он будет работать, только когда результат укладывается в int или long.
На смолтолке подобная рекурсивная реализация факториала будет работать и для миллиона и для миллиарда. Ограничение накладывает только объем доступной оперативной памяти компа.

Сила смолтолка как раз в возможности быстро найти решение, не отвлекаясь ограничения несвязанные с проблемой. А когда решение найдено, никто не мешает реализовать его более эффективно (применив другой алгоритм, оптимизировав текущею реализацию). Кстати, для оптимизации в смолтолках есть множество очень интересных решений. В VisualWork'e, например, есть пакет позволяющий писать код метода на эссемблере. Причем, этот эссемблер синтаксически является смолтолком. В сквике виртуальная машина и плагины (внешние модули) написаны на Slang-e некотором подмножестве смолтолка. Отладка этого кода ничем не отличается от отладки обычной смолтолк программы. А современные технологии оптимизации посылок сообщений Jitter'ы в теории способны давать производительность выше производительности C-программ. Это связано с тем, что виртуальная машина, в отличие от статического компилятора, знает намного больше о реальных условиях в которых выполняется программа (отдельные методы), и соответственно может сгенерить более оптимальный машинный код там, где это действительно необходимо.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
так должно быть или нет???? Пархоменко Вадим Процессоры 3 01.09.2011 13:49
файлы или что должно находиться в папке aleks.tarasow Любые вопросы от новичков 3 04.08.2011 16:23
Здесь должно быть название темы! natalya00000 Любые вопросы от новичков 2 06.06.2011 16:39
Считается, что никакое число не должно начинаться с нуля dastM Lisp 6 24.02.2011 11:06
Реализация замыкание контекста на с++ denis120 С/С++ 15 17.01.2011 02:14
Объекто-ориентированный анализ с примерами на Смолтоке Вася Чайко Smalltalk 1 14.08.2008 15:05
Приер XML + XSL. Должно выводиться одно, выводистя другое oneword XML & WML 10 15.08.2007 16:16
Помогите найти ошибку(и) - говорят, что должно работать... wampu Prolog 7 02.08.2007 09:32
Есть число float a=0.01 как его умножить на 0,33% должно получиться 0,000033 freeway C++ Builder 8 23.05.2007 11:39
В edit1 набираю 123 нажимаю на кноку должно появится в label 321 как реализовать ROLF Delphi 5 19.10.2006 01:03
При выборе радио- кнопки должно выходить текст Mad_tea C++ Builder 7 06.07.2005 16:34



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов