Автор Тема: прикладная монадология...  (Прочитано 28379 раз)

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #15 : Сентябрь 05, 2012, 07:26:58 pm »
Так ведь у стопки весьма ограниченный размер и её глубину сложно прогнозировать.

Цитировать
или регионы памяти...
Зарезервированное место фиксированного размера с реальным выделением при потребности? Если да, то логически ничем не отличается от большого статического массива (кроме экономии памяти, доступной другим приложениям).

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #16 : Сентябрь 05, 2012, 07:35:11 pm »
Так ведь у стопки весьма ограниченный размер и её глубину сложно прогнозировать.

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

Цитировать
или регионы памяти...
Зарезервированное место фиксированного размера с реальным выделением при потребности? Если да, то логически ничем не отличается от большого статического массива (кроме экономии памяти, доступной другим приложениям).

http://oberspace.dyndns.org/index.php/topic,310.msg7517.html#msg7517
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #17 : Сентябрь 05, 2012, 08:39:36 pm »
Так ведь у стопки весьма ограниченный размер и её глубину сложно прогнозировать.
Зависит от реализации (и от железяки). Весьма часто стек и куча делят память между собой. То есть есть у тебя скажем 100 Мб ОЗУ, и если из них стек скушает 80 мегабайт (после глубокой рекурсии), то на кучу останется 20 мегабайт.

Стек аппаратным бывает не слишком часто. Железяка обычно ничего не знает ни про кучу ни про стек. Есть просто память и есть указатель на вершину стека в регистре каком-то там.

Скажем в линуксе на x86 есть возможность сделать стек безразмерным (ограничено будет лишь объемом ОЗУ). То же самое в msp430 в принципе (другие подходы не эффективны и сложны, кроме того, в МК куча обычно не используется вообще - все на стеке (автоматическая) и "глобальных" переменных (статическая память) - глобальные в кавычках, потому что область видимости у них не глобальная).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #18 : Сентябрь 05, 2012, 08:50:08 pm »
Цитировать
Стопка -- в смысле стек?
Да, если вы не против, я люблю русские слова.

Цитировать
http://oberspace.dyndns.org/index.php/topic,310.msg7517.html#msg7517
Хоть убейте, ручное управление как было, так и осталось. Вот что интересно. Создали мы регион на 1000 объектов, все выделили, 500 из них стало мусором, просим выделить ещё один и программа валится на невозможности это сделать. Имеем простой самодельный менеджер памяти с функциями Alloc и ClearAll.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #19 : Сентябрь 06, 2012, 05:40:31 am »
Цитировать
Стопка -- в смысле стек?
Да, если вы не против, я люблю русские слова.
Это не всегда полезно, особенно в программировании.

И почему какая-то там стопка (тарелок, видимо), а не стандартный для русскоязычной программистской терминологии магазин?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: прикладная монадология...
« Ответ #20 : Сентябрь 06, 2012, 06:12:23 am »
Это не всегда полезно, особенно в программировании.
Это точно - лично мои ассоциации с чакушкой и поллитра... ну и некоторая неприязнь к  крайностям (это сугубо личное) в виде русофобии и русофилии..

DIzer

  • Гость
Re: прикладная монадология...
« Ответ #21 : Сентябрь 06, 2012, 06:13:51 am »
ну все раз такая ассоциация пошла - нужно выпить пива...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #22 : Сентябрь 06, 2012, 06:30:54 am »
Go'шный примерчик с Веб-сервером тоже никакой новизны в себе не нес. Подобному подходу минимум 20 лет :-)

Примерчик не нёс. Я его даже и не смотрел.
Стоп. Если ты его даже не смотрел, то о чем вообще речь?

Идея безопасного программирования системных и сетевых приложений - нова.
Говоря оберонистым языком - запрограммировать реализацию любого сетевого протокола/сервиса быстро, с хорошей абстракцией/декомпозицией, с эффективным использованием памяти (без GC) - и в то же время без SYSTEM.
Во-первых, при чем тут системное программирование вообще (особенно если мы говорим в контексте Go)? (вообще системное программирование - ужасный термин. под ним подразумевает столько всего сразу.. и написание драйвера системное программирование (хотя это банальнейшая программа работающая с железякой напрямую) и написание компилятора/транслятора внезапно тоже системное (а там наоборот - не банальная задача в полном отрыве от железа) )

Во-вторых чем сетевое программирование так уж принципиально отличается от банальной работы с файлами? По сути реализация какого-либо (сетевого)протокола это банальный парсер + конечный автомат (возможно с памятью). И то и другое отлично формализуется и автоматизируется.

А работа с файлами сетью эффективно и безопасно есть в той же Аде (привет 1983 год!), а если не пытаться писать все руками, то это безопасно и эффективно будет в любом языке, даже в Си. Заодно получим некоторые дополнительные преимущества, которые при программировании ручками ну никак не достижимы (и это уберет еще один класс ошибок).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #23 : Сентябрь 06, 2012, 06:37:28 am »
Я ими периодически делился. Например, про возможность сочетать герметичность и валидность ссылок с работой без GC. Это невозможно и в Java, ни в C#.
Зато это возможно как минимум в Аде (от 83 года) и в С++ (через свои типы). Как минимум. Также, если мне склероз не изменяет, в одном из фортранов. То есть ничего нового.
Вы так хорошо друг друга поняли, а я нет. Что такое "сочетать герметичность и валидность ссылок с работой без GC. Это невозможно и в Java, ни в C#" ? ? ?
Насколько я понял, речь идет о полиморфных объектах на стеке с невозможностью утекания ссылок на них куда-то во вне и без рукопашного управления памятью. Собственно ровно то, из за чего ты ковыряешь тему Оберона под .net.

Но я тут подумал, и пришел к выводу что в случае java у оптимизатора достаточно информации для того чтобы описанный Ильей сценарий реализовывался всегда когда это возможно. То есть, переходя к сишным терминам, new Foo будет всегда когда это возможно вызывать не malloc, а alloca. Причем у оптимизатор тут может работать более эффективно чем человек (потому что он не ленится заглянуть во все библиотеки и выявить все места где это возможно).

(про C# ничего не скажу, я его не знаю)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #24 : Сентябрь 06, 2012, 06:54:14 am »
Я ответил - потому что имею возможности не заморачиваться, делать сам инструменты, не зависеть от кого-нибудь, кто вложил годы в свои инструменты и теперь всех на них подсаживает. Делаю свои и решая разные задачи, которые передо мной ставит жизнь. Особенно если учесть свои возможности подготовки кадров.
А какие ты инструменты делаешь? Насколько я вижу (то есть то что публично известно) компиляторы Оберона например ты не пишешь.

Период знакомства с самыми разными языками у меня прошёл очень давно. Все основные и неосновные книги по языкам, парадигмам (типа Пратта, Кауфмана, Бен-Ари и много других) были перечитаны. Уважаю компактные языки типа Форта, Смоллтока, Лиспа, Эрланга и проч., но вижу, что по универсальности и подходящести под любую задачу и "под любой свежий мозг свежего кадра" они уже Оберона.
Не скажу за  смоллтолк и лисп, я их не слишком знаю (да, чтобы знать lisp не достаточно знать s-expressions, нужно целиком осилить весь Common Lisp, и, да, я бы не назвал его компактным :-) ), но форт и ерланг применимы там и решают те задачи, где оберон будет смотреться ну очень не к месту. Я вообще слабо себе представляю как можно противопоставлять оберон и ерланг. Они просто для разного созданы. Совсем для разного. На уровне того что пишешь в момент изучения языка (пишешь сам с нуля) этого просто не видно.

Уважаю Аду за основательность и гарантии, но позволить себе зависимость от такого жирного инструментария не могу.

У Ады сейчас одна радость и одна печаль - AdaCore. Радость потому, что AdaCore Аду развивает, печаль потому, что AdaCore либо вытеснила либо поглотила всех конкурентов. Моновендор (которому к тому же не интересны все кто мельче Боинга).

Принимаю подход Страуструпа в плане свойств "универсального языка системного программирования", вообще библиотечно на КП воплощаю некоторые свойства, достижимые именно на С++ (на котором я тоже пописал 2 года).
К сожалению те свойства, которые мне нужны от С++, на КП не достижимы.


В общем, я сейчас однозначно за подход библиотечных экспеиментов, как самый экономичный, близкий к практике. На базе Оберона, потому что... сто раз говорено, почему. Язык выше уровнем, прячущий императивную машину, задаром не нужен, ибо я её и сам спрячу библиотечно. Языки того же уровня ничего принципиального содержать не могут, а цена зависимости от жирного инструмента высока.
С++ выше уровнем чем Оберон. Ada, С# и даже Java - тоже выше. Ниже уровнем, если не ошибаюсь, Паскаль (обычный, не Object). А вот Modula-3 уже выше. Куда поставить Си я затрудняюсь сказать (по некоторым признакам он ниже уровнем, по некоторым выше).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #25 : Сентябрь 06, 2012, 06:55:47 am »
Да, как пример где нет ручного управления памятью (для объектов) и сборщика мусора тоже нет: Objective-C 2.0

И все эффективно :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #26 : Сентябрь 06, 2012, 07:16:05 am »
Да, на счет эффективности подхода Go. Вот результаты теста того самого Web-сервера

Как видим, Java с её не эффективной работой с памятью этот самый эффективный Go как Тузик грелку.

Ах да, под большими нагрузками у Go-примерчика еще и самая большая латентность (по горизонтали число одновременных соединений: 30, 100, 1000, 5000 соответственно, латентность в миллисекундах):

3010010005000
Nginx html(1C)14423,079
Nginx module(1C)14323,047
Nginx module(Multi-core)162053,036
Erlang(1C)386296,337
Erlang(Multi-Core)272233,084
Java, Netty1333,084
Go2633479,005

Желающие могут перепроверить на современных версиях всего этого: http://timyang.net/programming/c-erlang-java-performance/

PS. Илья, помнится писал что его Веб-сервер, видимо тот самый о котором в данном треде идет речь, бегал почти или также шустро как Apache web server, так вот, апач тут был бы еще медленее чем Go.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #27 : Сентябрь 06, 2012, 07:34:11 am »
Да, интерпретируемый функциональный erlang (оторванный от реального железа и замаскировавший императивную машину) со сборщиком мусора работает на уровне java и быстрее чем хвалимый Go.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #28 : Сентябрь 06, 2012, 07:39:35 am »
А вот тут сравнение Go с Python'ом: http://ziutek.github.com/web_bench/ Внезапно быстродействие одно и то же.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: прикладная монадология...
« Ответ #29 : Сентябрь 06, 2012, 07:43:29 am »
Я ответил - потому что имею возможности не заморачиваться, делать сам инструменты, не зависеть от кого-нибудь, кто вложил годы в свои инструменты и теперь всех на них подсаживает.
Кстати, а что значит "подсаживает"? Ну вот кто конкретно подсаживает например на С++?

И, какие такие специфические у тебя задачи, что тебе требуется автономность в плане компиляторов (именно компиляторов, в плане ОС и другого софта а также железа, по моему, у тебя нет таких требований).

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