У GreyLink DC++ есть спецификация на такой режим режим работы. TTH (24 байта) чуть больше BTIH (20 байт), и BTIH + порядковый индекс файла в торренте образуют структуру той же длины, что и TTH, и по ней предполагалось делать поиск. Хотя лучше бы трекеры повернулись к нам лицом и начали требовать от заливающих TTH в торрентах. Вот один портал, называть который слишком много чести, требует отдельно текстом указать MD5 и SHA1, а TTH почему-то не требует ни текстом указать, ни в торрент включить.
Вообще, я не следил за состоянием, может, что-то и исправили, но вот какие отличия увидел на примере Shareaza:
DC++ наиболее близок к старому доброму FTP. Он отлично передаёт все нюансы структурированной файловой системы. Скажем, в торренте нельзя описать пустую папку, а в dcls — можно. Были ещё детские болезни вроде «не качать пустой файл» (подразумевается, что и не создавать тоже) и «не качать совпадающие файлы» (подразумевается, что и не копировать из шары тоже), нарушающие целостность директорий по сравнению с эталонным FTP, но ими DC++ клиенты переболели лет 8 как.
Что касается Shareaza, то там структура в скачанных списках файлов реализована очень своеобразно, я когда первый раз увидел, просто в осадок выпал. Там дерево папок ведёт себя как фильтр файлов. Я выбрал папку и увидел все файлы из подпапок поскиданными в одно место. Я скачал, и действительно, там вся структура папок сплющилась. В Gnutella1 с директориями всё было плохо, их не было, но G2, такое чувство, что этой детской болезнью до конца не переболела. Мне что, вручную воссоздавать директории? F7, Shift-F6, F7, Shift-F6, я правильно понимаю? Это я вот этим должен заниматься?
Далее, вот есть dcls для многофайловых раздач, а в Shareaza для этого есть коллекции. Только я что-то не увидел в wiki, как там дела с поддиректориями. Они вообще есть? Я вот подозреваю, что нет. И раз уж DC++ застолбил этот формат, будет логично, если Shareaza поддержит dcls, чтоб по нескольку раз не напрягаться для разных клиентов. Хотя это и не оформленная раздача, как в Shareaza.
Кроме того, я наблюдаю, что DC++ совершенно нормально обрабатывает мои многотысячные списки файлов, со всякими Platform SDK незапакованными. А у других видел и под миллион. В DC++ оптимальнее не запаковывать, чтобы общие файлы находились. Platform SDK, MSDN Library разных версий — они во многом повторяются по файлам. А Shareaza, наоборот, с каждым новым файлом начинает корчиться в муках и корчить в муках мой ноут. Что ещё хуже, если Shareaza вдруг ненароком увидела всю бездну файлов DC++, шокирована она будет навсегда. Хоть там убрать шокирующую папку из базы, хоть базу средствами программы почистить, всё равно мегатормоза. Только вручную если поудалять базу данных и заново расшарить, помогает. Получается, наоборот, оптимальнее упаковывать файлы в архивы, но тогда поиск альтернативных источников — до свиданья, и это получается как ещё один торрент, где владельцы идентичных файлов как в кромешной тьме и не могут друг друга найти. А мне с одним торрентом уже хватает головной боли. Это уже исправлено?
А ещё я считаю нормальным не иметь вычисленный sha1. Когда p2p только зарождался, разработчики делали proof of concept, были довольно наивными, а для наивного человека нормально полагать, что можно с 20и источников скачать файл общим размером 20Гб, и потом просто в дежурном режиме проверить SHA1 от 20Гб, и ни у кого клиент не сглючит, никто не обманет, хеш сойдётся. По идее, эта наивность должна остаться в далёком прошлом, вместе с SHA1, MD5 и всеми остальными недревовидными хешами, когда пошли жалобы «моя закачка начинается снова и снова, что делать?». Зачем вообще вычислять недревовидные хеши? Они же бесполезны. А если я на сервере хотел бы сгенерить коллекцию Shareaza, и у меня есть имя, размер, TTH, и больше ничего нет? Что, смогу я это сделать или нет? А вот по магнитной ссылке с TTH загрузка файла может начаться? Там в протоколе уже по чистому TTH закачка инициируется или всё ещё надо сначала ненужный SHA1 получить?
А так, в принципе, если бы DC++ расширить Gnutella2, это было бы хорошо. Стронговская DHT мне не понравилась, в Shareaza глобализация явно лучше. Только со спамом беда. На DC++ хабах спамераста можно выпнуть с хаба, а в Gnutella2 выпнуть некому, а было бы нелишне иметь небольшой контроль. Что-то вроде подсети Gnutella2, где каждый участник получил криптографическое подтверждение на право присутствия в хабе. И сообщения от хаба нумеровать серийными номерами, подписывать и через узлы оптимально распространять.
Возвращаясь к вопросу об оформлении, это сложный вопрос, выходящий за рамки проблем p2p. У нас есть отличный блог-редактор Windows Live Writer и протоколы XML-RPC, по которым он работает, но нет застывшего в файле аналога XML-RPC, чтоб как в Word, HTML с картинками содержал. Если мне по работе нужно было запостить на два наших сайта, я делаю пост в WLW, переключаю учётку и делаю ещё раз пост. А если репост с ненашего сайта — я шёл выколупывать с того сайта картинки по одной. А новостей может быть по 10 в день, в каждой по 5 картинок. Если новый пост пишу не я, а журналисты, отправляя друг другу на проверку и переделку, что чаще всего, то писать его будут не в WLW, потому что в нём нет файлов, а в Word, где файлы есть, но потом каждый раз в HTML переделывать надо из-за разной вёрстки. Знали бы вы, какой геморрой так каждый день. А всё потому что нет формата застывшего XML-RPC с вменяемым редактором для него. WLW не может ни сохранить в файл, ни открыть из файла, а если ковырять, то там какой-то вообще левый формат wpost Compound Document, который было бы сложно парсить и генерить на сервере. Другие HTML редакторы не аналогичны Word, в смысле, не умеют положить картинку внутрь общего файла. У Mozilla какой-то HTML редактор картинки кладёт в data URI, что для многих и без того непростых HTML парсеров на сервере стало бы серьёзным испытанием, когда картинки под мегабайты. Последний SAX парсер, которым я пользовался, не позволял читать атрибуты по 8К блокам, а возвращал их все сразу. С точки зрения формата идеально устроен WizHtmlEditor, там всё как надо, формат .zip, а в нём HTML с картинками, но сам редактор топорный до безумия, там даже картинку разместить с обтеканием без залезания в HTML код не получится. И XML-RPC нет. Непаханное поле, и вот кто это поле вспахал бы, заодно и с форматом p2p раздач вопрос решил.
Вот так выглядит облом в BitTorrent. Это я искал редкие файлы (среди которых основной — OEDev.zip) всякими разными способами, и когда нашёл, решил раздать во все сети, где я раньше тщетно пытался найти. Этот торрент давно без сидов, а вот один пир ну очень долго тусовался, но выкачать OEDev.zip целиком так и не смог, потому что его начало в одном куске с другим файлом, которого у меня нет. И никак. И чата нет, чтоб как–то по–другому файл передать. Смотрим друга на друга, немые, как рыбы.
А могу рассказать ещё одну замечательную историю. Как это обычно бывает в торрентах, четвёртый год пытаюсь скачать 6AE765434DEB78AB7CBDA3AAC869363E81046348. Когда мне админ одного сайта передал-таки один из файликов, я решил, а не раздать ли тоже хоть часть файлика. Правда, человек, который создавал торрент, запаковал каждый файл в торренте в отдельный rar, ну а я, конечно, не угадаю, как в этот rar запаковать, чтоб так же было. И тоже смотрим молча друг на друга.
В самом деле, хорошо, что чата нет! Просто замечательно!
Посмотрел, сильно отличается от оригинала. Звучание инструментов не такое. Но имена файлов помогли найти в Интернете нормальную версию с расширением .mid: http://www.ekn.net/midi/misc/Dance/index.html (заглавная тема — ethno_pa)
В QuickTime Player, по крайней мере, воспроизводится как надо.
Предполагается, что, натренировавшись, можно сделать что-то лучше, и то, что SOM не применяется — это в какой-то степени благо, можно сбросить балласт архаичных решений. А вместо совместимости с SOM на бинарном уровне я бы предпочёл частичную совместимость с Objective-C на уровне исходных кодов. Чтоб был специальный компилятор с модифицированной семантикой для портирования на новую модель.
Кстати, я пишу вам сейчас из Comodo IceDragon, который почти Mozilla Firefox, а там XPCOM, и в некотором смысле COM себя замечательно чувствует. А ещё достаточно популярен VirtualBox со своей разновидностью XPCOM. Если вам нужно написать офисный документ, возьмёте, скорее всего, для этого вы либо Microsoft Word с понятно, какой начинкой, либо один из клонов бывшего StarOffice, в котором UNO. Ранее упомянутый Objective-C сейчас сложно заподозрить в недостатке внимания. А в Windows Metro есть такая штука, как Windows Runtime, и она, кроме поддержки .NET и JavaScript, пошла обратно в натив, и происходит это через COM. Как следствие, в супер-пупер новой Windows Runtime можно прочитать про такие ограничения, как «A ref class that has a public constructor must be declared as sealed, to prevent further derivation.» или, ещё раз, «You must declare as sealed any classes that are publicly exposed by your Windows Runtime Component.». Qt разрабатывается на обычном C++, и чтобы там не прекращалась совместимость, приходится плясать вот так. Другие разработчики под Linux этим правилам не следовали, и как результат, фрагментация дистрибутивов Linux. Если не нашёлся ноулайфер, который пересоберёт программу под очередной выпуск очередного дистрибутива Linux, оно там, если просто скопировать, имеет все шансы не запуститься, и о магазинах приложений под Linux остаётся только мечтать. А старый SOM эти проблемы решал и делал лучше всех других существующих решений.
Да обстановка такая, что как ни очередной «Под куполом», «Хоббит», «Гарри Поттер» или «Очень странные дела», снятый за рубежом ориентировочно после 2010го, так там педерасня, которую не особо приятно трогать, я уж не говорю о том, что с годами начинаешь не только в физике ляпы замечать, но и в отношениях причинно–следственные связи неадекватные. И эта «мода» на отсутствие положительного героя, вместо которого подсовывают негодяя, просто чуть более симпатичного, чем другой негодяй.
А как начинаешь хвататься за голову в поисках, а что же тогда останется посмотреть, так получается, что если сами не озаботимся, то и не появится, и вот уже вполне добровольно начинаем собирать на «28 панфиловцев», «Учитель физики желает познакомиться», мультфильм «Час быка», трилогию «Частное пионерское», все по мере сил поддерживаем, чтобы наше (не только по языку, но и по менталитету) искусство хоть как–то жило.
На самом деле нет. К сожалению, в стране, которой уже нет, не задумались о том, чтобы обезопасить своё творчество на будущее и лицензировать продукцию соответствующим образом, и исключительные права собственности принадлежали некой организации, которая после перестройки–перестрелки благополучно стала русофобским ФГУПом и активно препятствует распространению того, что не стыдно назвать достоянием, попирая идеалы создателей этого достояния. Например, у Константина Сёмина нередко ролики Агитпропа банятся за врезки кинофильмов. Если за «Славянку» страйки летят вообще от каких–то непонятных организаций, то у Сёмина, не стесняясь, «Мосфильм» показывает своё звериное мурло.
Выяснил, что там какой–то лимит на две запущенных программы. Первая — mount, вторая — это собственно запущенная программа, но если вместо программы там будет ещё один mount или subst, после него всё равно всё остановится.
Сделал у себя пока такое: http://online.pascal.net.ru/1
Если Crt подключать, проблема с чтением stdin не возникает. Я думал, kstack.com её решит, ведь он, как и модуль Crt, вроде как содержит собственный обработчик клавиатуры, но, видимо, нет.
Тем, кто интересуется в наши дни, на заметку:
21000 руб. за AnywhereUSB против 6400 руб. ($99) за Linux версию Quantum Access LAN Mini PC Stick или Star Cloud PCG02U LAN (клоны Intel Computing Stick с Ethernet)
code name
0x11 sha1
0x12 sha2-256
0x13 sha2-512
0x14 sha3-512
0x15 sha3-384
0x16 sha3-256
0x17 sha3-224
0x18 shake-128
0x19 shake-256
0x40 blake2b
0x41 blake2s
# 0x00-0x0f reserved for application specific functions
# 0x10-0x3f reserved for SHA standard functions
# 0x14 formerly had the name «sha3», now deprecated
То есть, TIGER, из которого получается TTH, тут нет, петабайтная локалка уже сегодня в качестве кеша работать не сможет, а вот если все поставят IPFS, ну тогда, может быть, что–нибудь и получится. Inter-Planetary как бы намекает, в каком временном диапазоне это может случиться.
COBOL — это императивный, процедурный язык, а с 2002 года — объектно-ориентированный.
С датировкой что–то явно не то. COBOL был одним из языков, которые реализовали Direct-to-SOM. Учитывая, что последнюю версию SOM для мейнфреймов выпустили в 1997м году (потом в IBM посходили с ума, прекратили разработку SOM и переключились на Java), и COBOL тут не какой–то, а именно IBM, то объектно–ориентированным он стал ну явно не позже, чем закрыли SOM.
Я хочу, например, иметь обобщенные списки и вообще полноценные коллекции объектов
Так я в 2005м году открыл для себя Аду.
Непревзойдённые (почти) качества в языке–таки имеются. Я рассматриваю Delphi как 2 языка в одном, и второй, менее мейнстримный язык, очень привлекателен. В первом языке — ручное управление памятью, единоличное владение и try…finally для объектов, а во втором — счётчик ссылок и RAII. Это можно видеть на примере, как реализаованы мейнстримный TJSONObject с ручным управлением памятью и мой CVariant. Диапазонные типы имеются, пусть даже ими сложнее пользоваться, чем в Аде (В языке Ада цикл от -1 до 0 не выбрасывает исключение нарушения диапазона, потому что система типов двухуровневая, для диапазонов обычно не создаются новые диапазонные типы, с которыми будут проблемы, как в Delphi, а делается ограниченный подтип существующего типа, и арифметические операции по умолчанию возвращают результаты в самом широком подтипе типа). Но даже такая плохонькая система типов может повышать целостность, особенно, если начать диапазон с -1 и не бояться использовать его в for. По крайней мере, в диапазоне от -1 до 15 не затесается 50.
Язык нативный, подходит для низкоуровневого программирования, при этом особенности компилятора позволяют контроллировать целостность. К сожалению, проверки по умолчанию отключены, как если бы каждый первый встречный писал на Delphi видеокодеки, но их хотя бы можно включить, и я видел, как всплывает вот это вот всякое, когда во всём проекте резко врубить все проверки, и как всё оздаравливается, если исправить ошибки, вызывавшие эти исключения. В C++ коде для vector<> вы так просто в проекте проверки галочкой в настройках не включите. Мне приходилось делать другой шаблон, который заменял operator[] на at(). Что касается контроля диапазонов, в Java для сравнения, свой тип нельзя определить, а для встроенных типов переполнение не проверяется. В C# ключ /checked нужно использовать при компиляции, тоже под видеокодекописателей язык заточен, наверное.
Наравне с C++ и Objective-C, Delphi и Ada позволяют в том или ином виде использовать RAII и счётчики ссылок, в то время, как многие разработчики инструментов разработки посходили с ума и заколебали остальных своей сборкой мусора. ARC в Objective-C очень распиарен, но хронологически в Delphi он был раньше, жаль только, что он был в немейнстримной версии языка.
DC++ наиболее близок к старому доброму FTP. Он отлично передаёт все нюансы структурированной файловой системы. Скажем, в торренте нельзя описать пустую папку, а в dcls — можно. Были ещё детские болезни вроде «не качать пустой файл» (подразумевается, что и не создавать тоже) и «не качать совпадающие файлы» (подразумевается, что и не копировать из шары тоже), нарушающие целостность директорий по сравнению с эталонным FTP, но ими DC++ клиенты переболели лет 8 как.
Что касается Shareaza, то там структура в скачанных списках файлов реализована очень своеобразно, я когда первый раз увидел, просто в осадок выпал. Там дерево папок ведёт себя как фильтр файлов. Я выбрал папку и увидел все файлы из подпапок поскиданными в одно место. Я скачал, и действительно, там вся структура папок сплющилась. В Gnutella1 с директориями всё было плохо, их не было, но G2, такое чувство, что этой детской болезнью до конца не переболела. Мне что, вручную воссоздавать директории? F7, Shift-F6, F7, Shift-F6, я правильно понимаю? Это я вот этим должен заниматься?
Далее, вот есть dcls для многофайловых раздач, а в Shareaza для этого есть коллекции. Только я что-то не увидел в wiki, как там дела с поддиректориями. Они вообще есть? Я вот подозреваю, что нет. И раз уж DC++ застолбил этот формат, будет логично, если Shareaza поддержит dcls, чтоб по нескольку раз не напрягаться для разных клиентов. Хотя это и не оформленная раздача, как в Shareaza.
Кроме того, я наблюдаю, что DC++ совершенно нормально обрабатывает мои многотысячные списки файлов, со всякими Platform SDK незапакованными. А у других видел и под миллион. В DC++ оптимальнее не запаковывать, чтобы общие файлы находились. Platform SDK, MSDN Library разных версий — они во многом повторяются по файлам. А Shareaza, наоборот, с каждым новым файлом начинает корчиться в муках и корчить в муках мой ноут. Что ещё хуже, если Shareaza вдруг ненароком увидела всю бездну файлов DC++, шокирована она будет навсегда. Хоть там убрать шокирующую папку из базы, хоть базу средствами программы почистить, всё равно мегатормоза. Только вручную если поудалять базу данных и заново расшарить, помогает. Получается, наоборот, оптимальнее упаковывать файлы в архивы, но тогда поиск альтернативных источников — до свиданья, и это получается как ещё один торрент, где владельцы идентичных файлов как в кромешной тьме и не могут друг друга найти. А мне с одним торрентом уже хватает головной боли. Это уже исправлено?
А ещё я считаю нормальным не иметь вычисленный sha1. Когда p2p только зарождался, разработчики делали proof of concept, были довольно наивными, а для наивного человека нормально полагать, что можно с 20и источников скачать файл общим размером 20Гб, и потом просто в дежурном режиме проверить SHA1 от 20Гб, и ни у кого клиент не сглючит, никто не обманет, хеш сойдётся. По идее, эта наивность должна остаться в далёком прошлом, вместе с SHA1, MD5 и всеми остальными недревовидными хешами, когда пошли жалобы «моя закачка начинается снова и снова, что делать?». Зачем вообще вычислять недревовидные хеши? Они же бесполезны. А если я на сервере хотел бы сгенерить коллекцию Shareaza, и у меня есть имя, размер, TTH, и больше ничего нет? Что, смогу я это сделать или нет? А вот по магнитной ссылке с TTH загрузка файла может начаться? Там в протоколе уже по чистому TTH закачка инициируется или всё ещё надо сначала ненужный SHA1 получить?
А так, в принципе, если бы DC++ расширить Gnutella2, это было бы хорошо. Стронговская DHT мне не понравилась, в Shareaza глобализация явно лучше. Только со спамом беда. На DC++ хабах спамераста можно выпнуть с хаба, а в Gnutella2 выпнуть некому, а было бы нелишне иметь небольшой контроль. Что-то вроде подсети Gnutella2, где каждый участник получил криптографическое подтверждение на право присутствия в хабе. И сообщения от хаба нумеровать серийными номерами, подписывать и через узлы оптимально распространять.
Возвращаясь к вопросу об оформлении, это сложный вопрос, выходящий за рамки проблем p2p. У нас есть отличный блог-редактор Windows Live Writer и протоколы XML-RPC, по которым он работает, но нет застывшего в файле аналога XML-RPC, чтоб как в Word, HTML с картинками содержал. Если мне по работе нужно было запостить на два наших сайта, я делаю пост в WLW, переключаю учётку и делаю ещё раз пост. А если репост с ненашего сайта — я шёл выколупывать с того сайта картинки по одной. А новостей может быть по 10 в день, в каждой по 5 картинок. Если новый пост пишу не я, а журналисты, отправляя друг другу на проверку и переделку, что чаще всего, то писать его будут не в WLW, потому что в нём нет файлов, а в Word, где файлы есть, но потом каждый раз в HTML переделывать надо из-за разной вёрстки. Знали бы вы, какой геморрой так каждый день. А всё потому что нет формата застывшего XML-RPC с вменяемым редактором для него. WLW не может ни сохранить в файл, ни открыть из файла, а если ковырять, то там какой-то вообще левый формат wpost Compound Document, который было бы сложно парсить и генерить на сервере. Другие HTML редакторы не аналогичны Word, в смысле, не умеют положить картинку внутрь общего файла. У Mozilla какой-то HTML редактор картинки кладёт в data URI, что для многих и без того непростых HTML парсеров на сервере стало бы серьёзным испытанием, когда картинки под мегабайты. Последний SAX парсер, которым я пользовался, не позволял читать атрибуты по 8К блокам, а возвращал их все сразу. С точки зрения формата идеально устроен WizHtmlEditor, там всё как надо, формат .zip, а в нём HTML с картинками, но сам редактор топорный до безумия, там даже картинку разместить с обтеканием без залезания в HTML код не получится. И XML-RPC нет. Непаханное поле, и вот кто это поле вспахал бы, заодно и с форматом p2p раздач вопрос решил.
Вот так выглядит облом в BitTorrent. Это я искал редкие файлы (среди которых основной — OEDev.zip) всякими разными способами, и когда нашёл, решил раздать во все сети, где я раньше тщетно пытался найти. Этот торрент давно без сидов, а вот один пир ну очень долго тусовался, но выкачать OEDev.zip целиком так и не смог, потому что его начало в одном куске с другим файлом, которого у меня нет. И никак. И чата нет, чтоб как–то по–другому файл передать. Смотрим друга на друга, немые, как рыбы.
А могу рассказать ещё одну замечательную историю. Как это обычно бывает в торрентах, четвёртый год пытаюсь скачать 6AE765434DEB78AB7CBDA3AAC869363E81046348. Когда мне админ одного сайта передал-таки один из файликов, я решил, а не раздать ли тоже хоть часть файлика. Правда, человек, который создавал торрент, запаковал каждый файл в торренте в отдельный rar, ну а я, конечно, не угадаю, как в этот rar запаковать, чтоб так же было. И тоже смотрим молча друг на друга.
В самом деле, хорошо, что чата нет! Просто замечательно!
В QuickTime Player, по крайней мере, воспроизводится как надо.
Кстати, я пишу вам сейчас из Comodo IceDragon, который почти Mozilla Firefox, а там XPCOM, и в некотором смысле COM себя замечательно чувствует. А ещё достаточно популярен VirtualBox со своей разновидностью XPCOM. Если вам нужно написать офисный документ, возьмёте, скорее всего, для этого вы либо Microsoft Word с понятно, какой начинкой, либо один из клонов бывшего StarOffice, в котором UNO. Ранее упомянутый Objective-C сейчас сложно заподозрить в недостатке внимания. А в Windows Metro есть такая штука, как Windows Runtime, и она, кроме поддержки .NET и JavaScript, пошла обратно в натив, и происходит это через COM. Как следствие, в супер-пупер новой Windows Runtime можно прочитать про такие ограничения, как «A ref class that has a public constructor must be declared as sealed, to prevent further derivation.» или, ещё раз, «You must declare as sealed any classes that are publicly exposed by your Windows Runtime Component.». Qt разрабатывается на обычном C++, и чтобы там не прекращалась совместимость, приходится плясать вот так. Другие разработчики под Linux этим правилам не следовали, и как результат, фрагментация дистрибутивов Linux. Если не нашёлся ноулайфер, который пересоберёт программу под очередной выпуск очередного дистрибутива Linux, оно там, если просто скопировать, имеет все шансы не запуститься, и о магазинах приложений под Linux остаётся только мечтать. А старый SOM эти проблемы решал и делал лучше всех других существующих решений.
А как начинаешь хвататься за голову в поисках, а что же тогда останется посмотреть, так получается, что если сами не озаботимся, то и не появится, и вот уже вполне добровольно начинаем собирать на «28 панфиловцев», «Учитель физики желает познакомиться», мультфильм «Час быка», трилогию «Частное пионерское», все по мере сил поддерживаем, чтобы наше (не только по языку, но и по менталитету) искусство хоть как–то жило.
Сделал у себя пока такое: http://online.pascal.net.ru/1
Если Crt подключать, проблема с чтением stdin не возникает. Я думал, kstack.com её решит, ведь он, как и модуль Crt, вроде как содержит собственный обработчик клавиатуры, но, видимо, нет.
21000 руб. за AnywhereUSB против 6400 руб. ($99) за Linux версию Quantum Access LAN Mini PC Stick или Star Cloud PCG02U LAN (клоны Intel Computing Stick с Ethernet)
То есть, TIGER, из которого получается TTH, тут нет, петабайтная локалка уже сегодня в качестве кеша работать не сможет, а вот если все поставят IPFS, ну тогда, может быть, что–нибудь и получится. Inter-Planetary как бы намекает, в каком временном диапазоне это может случиться.
С датировкой что–то явно не то. COBOL был одним из языков, которые реализовали Direct-to-SOM. Учитывая, что последнюю версию SOM для мейнфреймов выпустили в 1997м году (потом в IBM посходили с ума, прекратили разработку SOM и переключились на Java), и COBOL тут не какой–то, а именно IBM, то объектно–ориентированным он стал ну явно не позже, чем закрыли SOM.
Так я в 2005м году открыл для себя Аду.
Непревзойдённые (почти) качества в языке–таки имеются. Я рассматриваю Delphi как 2 языка в одном, и второй, менее мейнстримный язык, очень привлекателен. В первом языке — ручное управление памятью, единоличное владение и try…finally для объектов, а во втором — счётчик ссылок и RAII. Это можно видеть на примере, как реализаованы мейнстримный TJSONObject с ручным управлением памятью и мой CVariant. Диапазонные типы имеются, пусть даже ими сложнее пользоваться, чем в Аде (В языке Ада цикл от -1 до 0 не выбрасывает исключение нарушения диапазона, потому что система типов двухуровневая, для диапазонов обычно не создаются новые диапазонные типы, с которыми будут проблемы, как в Delphi, а делается ограниченный подтип существующего типа, и арифметические операции по умолчанию возвращают результаты в самом широком подтипе типа). Но даже такая плохонькая система типов может повышать целостность, особенно, если начать диапазон с -1 и не бояться использовать его в for. По крайней мере, в диапазоне от -1 до 15 не затесается 50.
Язык нативный, подходит для низкоуровневого программирования, при этом особенности компилятора позволяют контроллировать целостность. К сожалению, проверки по умолчанию отключены, как если бы каждый первый встречный писал на Delphi видеокодеки, но их хотя бы можно включить, и я видел, как всплывает вот это вот всякое, когда во всём проекте резко врубить все проверки, и как всё оздаравливается, если исправить ошибки, вызывавшие эти исключения. В C++ коде для vector<> вы так просто в проекте проверки галочкой в настройках не включите. Мне приходилось делать другой шаблон, который заменял operator[] на at(). Что касается контроля диапазонов, в Java для сравнения, свой тип нельзя определить, а для встроенных типов переполнение не проверяется. В C# ключ /checked нужно использовать при компиляции, тоже под видеокодекописателей язык заточен, наверное.
Наравне с C++ и Objective-C, Delphi и Ada позволяют в том или ином виде использовать RAII и счётчики ссылок, в то время, как многие разработчики инструментов разработки посходили с ума и заколебали остальных своей сборкой мусора. ARC в Objective-C очень распиарен, но хронологически в Delphi он был раньше, жаль только, что он был в немейнстримной версии языка.
Впрочем, через всякие оперы турбы вероятность поймать ламера становится более осязаемой.
Надеюсь, поможет