Wed Jun 08 2005 10:30, Serguey Zefirov wrote to Maxim Kizub:
SZ>>> Как ты сам понимаешь, если ты ее будешь делать на чем-то привычном, то
SZ>>> как мы сможем проверить эту платформу? Если же ты будешь ее делать на
SZ>>> ней же самой, то, получается, стоимость работы программиста для этой
SZ>>> платформы превышает один миллион денег в год (несколько -- это
SZ>>> обязательно больше двух).
MK>> Hе, ну я же в смысле сметы, а не в смысле что сам накодирую :D
MK>> Hу и "пара лет" - это в смысле демо-версии, на которой
MK>> уже можно пускать бенчмарки, но не что-то реальное. А под
MK>> бенчмарки и прочие крики о крутости - уже занимать у
MK>> банков или на бирже реальные деньги, то есть десятки лимонов...
MK>> Это же работа сравнимая с написанием c++/java/.net и пр. -
MK>> за пару лет лаборатория может выдать на гора продукт,
MK>> который уже раскручивается маркетологами долгие годы...
MK>> [....] Когда технология
MK>> уже будет более отработана (что лет пять, минимум) - тогда
MK>> уже на персоналки и сервера можно.
SZ> Что-то опять плохо выходит. ;)
SZ> Что ты планируешь отрабатывать "лет пять" и чем это будет отличаться от
SZ> современных технологий, которым тоже надо сравнимое время (.Net как раз и
SZ> имеет возраст лет в пять)?
Hу я тут писал кой-чего, это по отношению к Java.
1. Если будет возможность сделать изменения железа
- тегирование примитивных типов данных (9-й бит в байте),
работа с тегами и аппаратная верификация операций
по тегам
- аппаратная поддержка GC (не GC реализованный в железе, а
именно поддержка, за счет тегированых данных, поддержка
read/write барьеров и пр.)
- аппаратная поддержка компактного кода (фактически
интерпретаторов, что позволит раза в 3 уменьшит размер
редко исполняемого кода), возможно с использованием
тегов примитивных данных
Возможно ещё кой-какие улучшения поддержки ОО языков
(типа специальных регистров контекста, то есть для this,
и пр.)
2. Рантайм (VM)
- поддержка unsafe инструкций, вплоть до target ассемблера
- больший набор базовых операций (ротация битов, unsigned
арифметика, операции с упакованными в битовые поля данными
и пр.)
- поддержка структур, union, tuple, размещение их в
heap, стеке, массивах и пр.
- тегированные 1 словом в заголовке сложные данные (структуры
и т.д.), убрать из базового класса Object все методы
и данные
- поддержка как GC, так и ручного управления выделенной
памятью, разные типы памяти (с cpmpaction и без, со сборкой
мусора и без, read-only и read-write и так далее)
- поддержка указателей и их арифметики
- верификация и компиляция как на target устройстве, так и
на host (server), в том числе и частично на host и частично
на target
- отделение типа данных от класса, параметризированные типы;
класс описывает структуру данных, тип - это набор
constraints - параметры класса, класс памяти (immutable,
movable и пр.), user-defined RTTI, таблица методов и пр.
- больше опций для scheduling-а тредов (типа disable preemption
тредов одной задачи, но возможность переключения между задачами),
нормальный набор классов для синхронизации (mutex, semaphore,
атомарные операции по записи данных и пр.)
- inner methods, включая анонимные inner методы (closures),
указатели на методы (в том числе как в функциональных
языках), и на код; указатели на фреймы методов
и возможность создавать фреймы в heap-е
- больше поддерживаемых методов вызова и диспатчинга методов -
tail recursion calls, multimethods и pattern-matched вызов
методов
- множественное наследование делегированием, через интерфейсы
(как в dylan), и как в С++
- security организована не через ACL (access control list),
а через возможность или невозможность получить доступ
к интерфейсу реализующему защищённую функциональность
ну, может что-то упустил
3. Язык программирования.
- код будет редактироваться и сохранятся в виде linked tree
базовых и определяемых программистом узлов
- синтаксис отстуствует как таковой, но для отображения
кода (то есть узлов дерева) и его редактирования можно
задавать свой синтаксис
- изменена система типов - тип, это просто набор constraints;
эти условия и ограничения могут использоваться для
верификации и оптимизации кода;
- в зависимости от "настроек" компиляции конкретного модуля
или метода, требуется более или менее жёсткое задание
constraints типов; например, в одном место NullPointerException
будет checked, а в другом нет - следовательно, в первом
месте надо будет задавать возможность указателя быть
или не быть null и делать проверки на null вручную,
а в другом месте можно это не указывать, и будут вставляться
проверки на null автоматически
- более тонкие настройки оптимизации, задание space/time оптимизации
для методов, более разнообразные call conventions;
- user-defined уровень доступа к полям и методам (а не фиксированный
набор - public/private/...); реализуется через view (аналог
SQL-ного view - у вас одна таблица, но можно создать много
виртуальных отображений этой таблицы) то есть множество
compile-time "интерфейсов" одного класса.
- встроенные узлы для trace/log/assert/throw позволяющие
автоматически генерировать (или не генерировать) трейс
или ассерты, выносить отладочные сообщения в debug
информацию (а не включать её в выполняемый код) и пр.
Вообще это будет не язык, а некая "заготовка". То есть
на его основе можно будет создавать "языки" от низкого
уровня (С/Pascal) до скриптов.
Поскольку синтаксис отсутствует, для редактирования необходим
будет специальный редактор (фактически IDE), и в этом
IDE можно будет редактировать и отлаживать весь код проекта
(хотя отдельные части кода и будут выглядеть "написанными"
на разных языках). Фактически этот IDE будет проводить
и аудит кода.
Я там ещё про библиотеки писал, о том, какие они уродские в яве,
но это сюда пихать не стоит.