greenadine: (Default)
[personal profile] greenadine
Там-там телеграф, как нам обустроить java, память на голоса.

Лингвистический журнал из прошлых мелочей порадовал статьей о системе там-тамов. Как выяснилось (вольный пересказ одной из систем), язык там тоновый, и при передаче фразы из нее выкидываются все гласные и согласные, оставляют только тона. Для каждого из трех тонов языка есть свой звук (для нижнего и среднего используются разные стороны ассиметричного большого там-тама, для верхнего - второй, маленький).
Автор задалась вопросом, сохраняется ли что бы то ни было после такой редукции. Прояснилось все в момент записи звука: она просила настучать какие-нибудь примеры перед микрофоном, и через некоторое время стали подтягиваться люди...
Сообщение состоит из четырех частей (это я - программист - начал протокол связи расписывать):
- сигнатура начала сообщения: верхний тон;
- заголовок, содержащий обращение (поле "To:"), может быть личным, общим, либо к какой-то группе;
- тело сообщения, в котором чередуются известные формы ("идите, идите", "все ко мне", "отвечайте", "сегодня праздник" и т.п.) и конкретная онформация ("день рождения вождя", "умер Вася Пупкин", "не валяйте дурака" - последний пример не придуман). Заключительный тон каждого слова стучится чуть громче остальных. Радист-тамтамщик намеренно вставляет известные всем формулы, чтобы упростить трактовку сообщения, устранить неоднозначности;
- сигнатура конца сообщения: нижний-нижний-средний-средний тона;
Ну разве не прелесть?


Программерское: слегка нервирует в java наследование NullPointerException от RuntimeException. Из-за чего про него регулярно забывают.
Понятно, что нельзя тупо сделать его обычным Exception: любую точку после имени переменной прийдется окружать try - catch. По этому поводу несколько идей:
1. Сделать доступ ко всем членам "обычного" класса throws NullPointerException на системном уровне, вылетающее, когда переменная == null. Но при этом предусмотреть интерфейс NotNullable, реализовав который мы снимаем это неудобство, зато приобретаем такое же throws для всех операций присвоения (в том числе вызов конструктора), если выражение справа == null. В таком случае, вместо того, чтобы после каждого присвоения проверять, не null ли там (и в зависимости от этого выбрать поведение программы), мы делаем try - catch на присвоении, код try выполняется, когда переменная имеет значение, catch - в случае null.
2. Дальнейшее развитие идеи - не классы реализуют интерфейс NotNullable, а переменные в момент инициализации (а то и каждого присвоения). Например, "a = b;" работает как сегодня, зато все последующие вызовы членов переменной a декларируются как throws NullPointerException. А сделав "a := b;", мы оборачиваем try - catch только эту строку, а не все последующие обращения к объекту.

Если вы дочитали до этого момента, скорее всего на языке вертится вопрос "нахрена?" Идея в том, чтобы код, написанный без соответствующих try - catch просто не компилировался. Как сегодня уже делается с каким-нибудь IOException.

Интересно, в каком-нибудь языке это реализовано в таком виде? Или ересь и бред все это?


Смотрел вчера Les guignols, там издевались над книжкой в духе "Ив Монтан домогался до меня, когда мне было 5 лет". Кукла Монтана (скелет в черном цилиндре с тростью) говорила удивительно знакомым голосом. Только сегодня вспомнил - оказалось, он играл в Jean de Florette. Вместо Наденькиной памяти на лица - у меня на голоса.
(deleted comment)

Date: 2004-10-01 06:40 am (UTC)
From: [identity profile] greenadine.livejournal.com
Это-то все понятно, но все держится на хорошей памяти и доброй воле разработчика. Я именно о том, чтобы загнать себя в жесткие рамки.

Date: 2004-10-02 01:05 am (UTC)
From: [identity profile] bratelnik.livejournal.com
мазохист :)

Date: 2004-10-03 11:31 am (UTC)
From: [identity profile] alekro.livejournal.com
На копейку продолжу тему насчет массивов. Кажется паттерн зовут NullObject. Суть в том, что для всех классов приклады, объекты которых вполне могут быть null (пока не уверен, что стоит делать вообще для всех), создаются ничего не делающие классы заглушки. Все они должны имплементить интерфейс без методов, к примеру Nullable. Если коду клиентва не лень, он может проверить объект на instanceof Nullable.
Конечно удобнее заделать на системном уровне вокруг NotNullable, а то задолбали эти нал поинтеры по самое нехочу. Но мне кажется, все же это иллюзия. Дядьки "не помню откуда" доказали, что отследить для конечных автоматов, где не определено значение, до рантайма невозможно. Поэтому как тут ни крутись..

Date: 2004-10-04 12:42 am (UTC)
From: [identity profile] greenadine.livejournal.com
Шу, а я не говорю, что это должно отсекаться на уровне компилятора. Он иногда должен тупить, заставлять писать лишние, невыполнимые catch. Но вот наоборот - нет. Не пропускать ни единой возможности.

Date: 2004-10-01 05:51 am (UTC)
From: [identity profile] bgmt.livejournal.com
а есть еще языки свиста. Наверно, там так же. Но нам, убогим, не дано. У нас есть только два тоновых слова: положительное и отрицательное мычание.
Кстати, я так и не понял за все это время, так ли же мычится по-французски и по-английски. Слышал разные ответы.
А вообще чему удивляться в смысле протокола? Весь синтаксис - протокол! Более того, в совсем уж другой области белок доставляется в клетке куда надо, потому что у него на носу сидит адрес, состоящих из паролей прохождения мембран. Каждая обрезает свой кусочек, и оно идет себе дальше. Так что жизнь - игра в протокол.

Date: 2004-10-01 06:43 am (UTC)
From: [identity profile] greenadine.livejournal.com
Точно, меня дантист не понимал, когда я мычал "ага", не имея возможности ответить более внятно. И с белками - вспомнил, видели мы с Наденькой это в Villette, хороший пример :-)
Я не особо удивляюсь протоколу, я уже прочитал достаточное количество книжек, объясняющих, что современное программирование - всего лишь моделирование той или иной грани жизни. Мне именно реализция понравилась. Сродни передачи TCP голубиной почтой, где скорость передачи завидела от таких параметров, как накормленность птиц и длина лапки, на которую бумажку накручивали.

Date: 2004-10-01 06:51 am (UTC)
From: [identity profile] ex-maao644.livejournal.com
позволю откомментировать, поскольку немного связан с

java разрабатывается только внутри sun microsystems (кстати, люди, которые непосредственно придумывают и пишут, иногда бывают в москве и питере). сама корпорация ставит задачи и цели себе самостоятельно. внешние упреки и предложения в корпорацию попадают только из комитета java community process (http://www.jcp.org/).
если у вас есть гениальная идея - напишите об этом в jcp, они рассмотрят, и, если всё ок, передадут в sun для включения в следующую версию языка.
кстати, в новой версии 1.5 есть три функции и один метод, предложенный из россии

Date: 2004-10-01 07:38 am (UTC)
From: [identity profile] greenadine.livejournal.com
Я как минимум еще не уверен в осмысленности моего предложения :-) А так да, за что и любим java :-)

Date: 2004-10-02 01:06 am (UTC)
From: [identity profile] bratelnik.livejournal.com
Можно поинтересоваться, какие именно методы из России?

Date: 2004-10-04 12:28 am (UTC)
From: [identity profile] greenadine.livejournal.com
class java.lang.String:
public String toKOI8();

Date: 2004-10-01 07:11 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
Это реализовано в C++: можно написать собственный класс взамен стандартного пойнтера, "smart pointer", и придать ему любые свойства, в том числе перечисленные (запрет принимать 0 в присваивании и правила бросания). Всё, что в дальнейшем требуется от программиста -- пользоваться не стандартными пойнтерами, а этими самодельными (но и у вас требуется не забыть двоеточие в а:=b). Синтаксис полностью сохраняется. В язык это не включают, поскольку разным людям oчевидно нужны разные смарт пойнетеры....

Date: 2004-10-01 07:41 am (UTC)
From: [identity profile] greenadine.livejournal.com
Разве в C++ есть механизм Exception на уровне проверки при компиляции?

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

Date: 2004-10-01 07:54 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
А, нету, конечно, прошу прощения. Это я упустил. Вот, кстати товарищ пишет на сходную тему.
(deleted comment)

Date: 2008-07-10 08:43 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Я до сих пор этот номер ищу, я его в библиотеке брал.
(deleted comment)

Date: 2008-07-11 07:38 am (UTC)
From: [identity profile] green-fr.livejournal.com
В смысле? Переиздание того, что я выкладываю? Или параллельно кто-то ещё большее написал?

Date: 2008-07-11 07:40 am (UTC)
From: [identity profile] green-fr.livejournal.com
Увидел :-)

Date: 2008-07-11 07:46 am (UTC)
From: [identity profile] green-fr.livejournal.com
Вау!!! У них там, похоже, всё "честно" набрано, в том числе старо-монгольский, который я давно искал. Вернусь с викенда, буду копать, как они это сделали!

Profile

greenadine: (Default)
greenadine

December 2025

S M T W T F S
 123456
78910111213
141516 17181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 11th, 2026 10:30 am
Powered by Dreamwidth Studios