• catpad

Комментарии


1. Начальная рыба должна быть
а) либо пустой, тогда понять как инициируется
б) либо задаваться параметрами какими-то


Ну так она и есть пустая, в данном случае - белая. Можно было и чёрной сделать, но смотрится некрасиво.


2. Необходимо строго определить весь порядок функционирования
а) В какой момент выполняется Angler (в конце цикла или сразу)
б) В какой момент созданный angler, incident или track начинает работать (сразу или со след.цикла)


Да, это, действительно очень важно, потому что я и сам сейчас твёрдо не скажу, какой там порядок.


От 2 очень зависит результат работы. Поскольку по сути рыба атомарна, я думаю всё должно происходить потактово. А именно циклический список фаз:
1. Bait phase - составить список incidents
2. Seine phase - определить код для выполнения согласно incidents
3. Strike phase - выполнить код
4. Stun phase - получить новое состояние


Это точно так и делается ! Только, конечно, формальное определение звучит гораздо лучше.

Так, например создание track и сразу следом изменение значения scale приведёт к выполнению соответствующего angler только в следующем цикле.


И это так и делается.

Опять же, согласно определению второй фазы, любые модификации кода во время фазы 3 на выполняемые в данном цикле инструкции никак не влияют (сохраняем транзитивность)
А код меняться может легко, например создание нового angler c тем же именем по идее должен *заместить* предыдущий и унаследовать все incidents & tracks.


Всё так, всё так ! А я про замену в книге не писал ? Нехорошо.

simple

Фазы в Shark

Отвечаю здесь:
Так и я о том же: зачем называть это Акулой, если можно просто FiPL переделать
Я вроде написал "codename", типа как Windows 95 называлось Чикагой :)
Ну типа это модно, ага :) Т.е. FiPL 2.0, а коденаме - Акула :)

Создадим комиссию и постепенно сделаем стандарт FiPLа.
Для работы комиссии, когда она создастся, необходим прототип работающей FVM (как был в своё время Cfront у Страуструпа), на котором и производить эксперименты.

Кстати, появились следующие мысли (особо некогда было, по дороге на работу прикинул)
1. Начальная рыба должна быть
а) либо пустой, тогда понять как инициируется
б) либо задаваться параметрами какими-то
2. Необходимо строго определить весь порядок функционирования
а) В какой момент выполняется Angler (в конце цикла или сразу)
б) В какой момент созданный angler, incident или track начинает работать (сразу или со след.цикла)
в) итп

От 2 очень зависит результат работы. Поскольку по сути рыба атомарна, я думаю всё должно происходить потактово. А именно циклический список фаз:
1. Bait phase - составить список incidents
2. Seine phase - определить код для выполнения согласно incidents
3. Strike phase - выполнить код
4. Stun phase - получить новое состояние

Так, например создание track и сразу следом изменение значения scale приведёт к выполнению соответствующего angler только в следующем цикле. Опять же, согласно определению второй фазы, любые модификации кода во время фазы 3 на выполняемые в данном цикле инструкции никак не влияют (сохраняем транзитивность)
А код меняться может легко, например создание нового angler c тем же именем по идее должен *заместить* предыдущий и унаследовать все incidents & tracks.

Тут только проблема с apprenticies (а что если их кол-во в новом angler не совпадает со старым?), но думаю это легко решается:
а) либо по ++сному, когда два англера с разным числом аппрентисов - разные англеры
б) либо по простому, когда всегда есть ровно один аппрентис и не больше и не меньше
в) либо по тупому :) когда нельзя переопределить англер с другим числом аппрентисов

ЗЫ: Я так и не услышал ничего конкретного по поводу документа от вас, други мои...
simple

Чего только с недосыпу не сделаешь...

Вот, повозился ранним бодрым утром после трудовой ночи с фишем. Точнее уже даже не с фишем, а с Fish-2 (codename Shark). Плющило и колбасило конкретно, поэтому прошу расценивать изложенное по нижеуказанной ссылке как бред, маразм, извращение и прочие аналогичные fishки :)

Прошу также прощения у тех, кто будет смотреть, что HTML нагло сгенерён Word-ом (брр... самому противно), но уже сил никаких нет, а форматирование сохранить хочется. Потом переделаю :)

Welcome комментировать Project Shark draft!

Update: Я совершенно намеренно изменил синтаксис, постаравшись однако сохранить дух рыбы :) Очень уж хотелось получить в основном префиксный язык. Обсуждаемо.
  • Current Music
    Run Lola Run - Running Three (Tykwer, Klimek,
simple

На тему "многомерных" рыб

NOTE: Я не математик, в универе учился давно, да и не доучился, так что не ругайте меня за путаницу в понятиях и терминах. Лучше поправьте, если что не так :)

Предлагаю немного обобщить понятие рыбы, а именно формализовать следующие размышлизмы:
Обобщённая рыба (Generic Fish) имеет два вида размерностей (пока 2, позднее перейдём к трём).
Первая - это размерность вектора значения scale. В классической рыбе она равна трём (RGB).
Вторая - это размерность самого пространства scale. В классической рыба она равна единице, причём синтаксис не позволяет её увеличивать.
Если принять терминологию n-m-рыба, где n - это первая, а m - вторая размерность, то классическая рыба является 3-1-рыбой.
При переходе к рыбам других размерностей возникает собственно проблема адресации scale, значений scale и прочего. Причём появляется зависимость программы от размерности рыбы, что вообще говоря не очень хорошо.

Далее, третья размерность, о которой я говорил, это "наборы ячеек". В классической рыбе два набора ячеек - S и T, причём они отличаются качественно. Потенциально, ничего не мешает иметь 1 или 3 набора ячеек, отличающихся качественно. Это нужно для повышения производительности, особенно в рамках Quantum Fish & Multiverse.
Иными словами, я могу сделать 1-1-рыбу с 3 наборами:
- Q[5] (5 квантовых ячеек) со свойствами истории и предсказания. Соответственно для них возможны все операции in N cycles, was, и так далее
- S[10] (10 scales), со свойствами обычных чешуй, как то incidents, etc
- H[3] (3 historian), со свойствами только хранения истории
- и т.п. и т.д.
Причём, естественно, наборы создаются динамически :) При повторном создании набора с таким же именем, старый уничтожается:
create Q of 5 scales with history, future, incidents;
create H of 3 scales with history;
etc...

Размышляя далее, приходим к выводу, что первичная размерность рыбы (видимо) должна быть одинаковой для всех scales, а вот вторичная размерность разных наборов может отличаться.

create Q of 5 scales with history, future, incidents; // 1-net in N-fish - 5 quantum scales
create H of 3,3 scales with history; // 2-net in N-fish - 3x3 matrix of history-only scales
H(0,0) is like Q(0) in 4 cycles;
Q(5) is like H(2,2) 2 cycles ago;

Вот пока и всё :)
Если многоуважаемый catpad укажет местоположение исходных текстов (можно мылом на orangy@mail.ru), то я в свободное время повожусь с имплементацией на С++.
  • Current Music
    Nightwish - Beauty and The Beast
  • catpad

Ещё ответы

Выдержки из переписки с orangyk о Рыбе:

она не безумна. наивно полагать безумием сущность, имеющую внутреннюю логику (пусть не очевидную)

Всякое безумие имеет свою внутреннюю логику. Иначе это не безумие, а бред.

она не бесполезна. концепция атомарных конечных автоматов, конечно, не нова, но вот запихать эту концепцию в язык - это как минимум оригинально.

Не могу не согласиться. Самому понравилось.

она действительно сложна, но местами сложность синтаксическая, местами надуманная. я думаю здесь стоит поработать профессионалам по лингвистике и семантике :) шутка. имхо, стоит наделать много глупостей, а потом вычистить язык до стройного состояния.

Ну тут я имел в виду вещи более прозаические - программу такую написать не так уж легко.

кстати о синтаксисе. дальнейшее развитие я, в частности, вижу в многомерных рыбах, а для этого синтаксис совершенно не приспособлен. Для внешнего же сходства с чешуёй предлагаю запись s{1} или просто {1} (скобки фигурные). Это во-первых расширяемо, во-вторых похоже на чешую, в-третьих упрощает лексический анализ "шаблонов" (%1, см другой мой пост), позволяет делать арифметические операции (например s{%1 - 1}) и много еще чего :)

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

для действительности не хватает
- отладки
- идола-гуру, статьи которого поднимают шум в прессе
- вирусов под фиш :)
- возможности "скомпилять" рыбу в ехе-шник :)
- вобщем всяческого environment


- Отладка практически есть. Если вы запустите FVM без апплета, то она выдаёт всю необходимую информацию. Но, конечно, сделать полноценную IDE - это моя мечта !
- Почему нет гуру ? - это я и есть :))))
- вирус - ну это уж слишком ! (Я пока что знаю только один, но он для квантовой Рыбы - называется Fish Multiverse Deadlock).
- В экзешник её, в экзешник !!!

  • catpad

Ответы

Опять отвечаю на вопросы orangyk. Большая просьба - если уж вы член коммьюнити, пишите прямо в неё на правах автора - в комменты вряд ли кто заглянет.

я имел ввиду, что флип-флоп по ссылке менят свое значение в каждом цикле на текущий цвет одной из двух ячеек.
например,
S10 is flip-flop of S11 and T5; // без like
в этом цикле устанавливается в цвет s11 в этом цикле, в следующем - в цвет t5 в ЭТОМ цикле и т.п.
поэтому если значения ячеек будут меняться - будут меняться и цвета флип-флопа
что не противоречит принципу фф


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

кроме того, возможно имеет смысл расширить синтаксис до произвольного количества элементов, таким образом chain реализуется прозрачно (и в концепции языка) без всяких новых ключевых слов. Опять же при необходимости, squad реализуется (хотя и не всегда наверное, надо подумать) тем же "мульти-флопом" с дополнительным инцидентом для окончания.

Совершенно неправильно ! Мульти-фф никоим образом не заменяет "цепочку". Мульти-фф - это просто чешуя, циклически изменяющая цвет, а chain - это несколько ячеек, к которым можно обращаться по очереди и производить над ними разные действия. Например:

current is BLACK;
current is flip-flop of...
current is apprentice of...
S0 is apprentice of current...

и так далее.