psilogic: (Default)
[personal profile] psilogic
Есть кроссплатформенные языки типа Java. Но они все как назло - интерпретаторы.
Есть кроссплатформенные библиотеки к компиляторам. Но они все как назло - не стандарт языка.

А хочется странного. Хочется, чтобы многие вещи стали стандартом для компилируемого языка. Хочется языка типа C++, но с кое-какими изменениями. Могу я ведь помечтать, а? :)

Я напишу только один пункт моих "мечт".

1. Хочу, чтобы были стандартные средства работы с thread-ами - мутексы, треды, сигналы... Причем, даже не в форме библиотек, а в форме ключевых слов, дополнительных конструкций языка.

Например:

int a, b, c;
mutex x for a, b;

- чтобы компилятор завел мутекс x и использовал его сам, автоматически при обращениях к переменным a, b. Чтобы компилятор сам оптимизировал это дело. Например вот для такой серии:

a++;
c = 4;
b-= 2;

- хороший компилятор должен "понять", что хотя переменная c и не требует защиты мутексом, но присвоение занимает мало времени, а потому весь фрагмент лучше обрамить одной парой x.lock ... x.unlock.

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

Треды тоже... каждая операционка кто во что горазд. Надо единую хрень, встроенную в йезыг. Как-то так:

void myfunc(int x, char *y)
{
...
}
- Это просто функция. Параметры произвольные.

А потом так:

thread t= myfunc(99, "Loading...");
или так:
thread myfunc(99, "Loading...");

- то есть, чтобы произвольную функцию можно было средствами самого языка вызвать в отдельном треде как тред. И передать треду параметры не через жопу, а просто как параметры функции. В первом варианте синтаксиса еще и вернуть идентификатор треда.

Опционально чтобы у типа thread был какой-то разумный набор операций (suspend/resume/kill...). Как минимум - сравнение тредов, узнавание id текущего треда (ключевое слово thread.this ), узнавание id треда, который создал этот тред (ключевое слово thread.parent ).

Ну и, наконец, к тредам добавить средства синхронизации и передачи данных между тредами. Что-нибудь вроде такого:

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

...
class MyData
{
int a;
char *c;
};

...
MyData b;
MyData result;
...

thread t = myfunc(99, "Loading...");
...
b.a= 1; //заполняем данные в "подарке"
b >> t; /*отсылаем "подарок", какие-то дополнительные данные, которые
на момент вызова myfunc еще не были готовы */
...
result << t; //забираем результаты исполнения треда, ждем если надо

void myfunc(int x, char *y)
{
...
MyData b;
MyData result;
...
//берем какие-то дополнительные параметры
b << thread.parent; /* thread.parent - ключевое слово, означает тред, который создал этот тред */
...
//отсылаем результаты
result >> thread.parent;
}

Помечтаем, а? :)

Date: 2008-10-09 05:14 pm (UTC)
From: [identity profile] daddym.livejournal.com
А чем тебя интерпретаторы не устраивают?
Ну кстати видел:
http://haskell.org/haskellwiki/Haskell
http://caml.inria.fr/resources/index.en.html
http://smarteiffel.loria.fr/
http://www.erlang.org/
http://www.rapideuphoria.com/index.html
Кое что из них может компилироваться.

Date: 2008-10-09 05:18 pm (UTC)
From: [identity profile] psilogic.livejournal.com
У интерпретаторов два стандартных недостатка: медлительность и несамостоятельность.

Date: 2008-10-09 05:22 pm (UTC)
From: [identity profile] daddym.livejournal.com
Спешка нужна лишь при ловле блох:) Одно дело какой нибудь Питон и совсем другое Эрланг, на котором куча телекомовского оборудования работает в реальном времени:)
Несамостоятельность это ты о чем? Многие из перечисленных мною написаны на себе.

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-09 05:31 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2008-10-09 05:41 pm (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-09 05:49 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2008-10-09 05:53 pm (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-09 06:48 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2008-10-09 07:02 pm (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 09:09 am (UTC) - Expand

(no subject)

From: [identity profile] lemantar.livejournal.com - Date: 2008-10-09 06:58 pm (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2008-10-09 07:30 pm (UTC) - Expand

Date: 2008-10-09 10:00 pm (UTC)
From: [identity profile] white-thesis.livejournal.com
есть и более неприятные
невозможность отлова всех синтаксических ошибок во _всем_ объеме кода
пока управление по этой ветке кода не пройдет - интерпретатор ни гугу :(

Date: 2008-10-09 05:42 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А почти все описанные фичи есть в C#/.NET :) Кроме кроссплатформенности.

Date: 2008-10-09 09:31 pm (UTC)
From: [identity profile] lemantar.livejournal.com
да и кроссплатформенность некоторая есть (см. моно) - даже для Симбиана (смартфоны) чегото там соорудили.

Date: 2008-10-09 06:10 pm (UTC)
From: [identity profile] lemantar.livejournal.com
А в чем проблема? .NЕТ давно уже это делает.

Date: 2008-10-09 06:47 pm (UTC)
From: [identity profile] psilogic.livejournal.com
что "это"? треды встроены в йезыг или опять дополнительные библиотеки?

Date: 2008-10-09 06:59 pm (UTC)
From: [identity profile] lemantar.livejournal.com
лучше. Thread это класс! ;-)

(no subject)

From: [identity profile] flammar.livejournal.com - Date: 2008-10-10 07:39 am (UTC) - Expand

(no subject)

From: [identity profile] lemantar.livejournal.com - Date: 2008-10-10 08:09 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 09:06 am (UTC) - Expand

(no subject)

From: [identity profile] lemantar.livejournal.com - Date: 2008-10-10 09:10 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 09:35 am (UTC) - Expand

(no subject)

From: [identity profile] lemantar.livejournal.com - Date: 2008-10-10 09:54 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 09:59 am (UTC) - Expand

(no subject)

From: [identity profile] apoudy.livejournal.com - Date: 2008-12-19 06:59 pm (UTC) - Expand

Date: 2008-10-09 07:01 pm (UTC)
From: [identity profile] metaclass.livejournal.com
есть ключевое слово lock, позволяющее запилить ресурс от одновременного доступа, есть атрибуты для декларативного описания методов, как требующих защиты от доступа.
Ну и треды встроены в виртуальную машину, потому как без нее никуда - можно считать что они в языке.
From: [identity profile] yoshke.livejournal.com
Я извиняюсь, а javac - это разве не java-компилятр?

Date: 2008-10-09 07:28 pm (UTC)
From: [identity profile] arifg.livejournal.com
Ява, если только не имеется в виду "Ява-скрипт" - не интерпретатор. Программы там компилируются в то, что можно назвать "псевдокодом" или кодом виртуального ассемблера, т.е. он достаоточно низкоуровневый со сравнительно низким оверхедом. Отсюда - "виртуальная машина". А иным способом кроссплатформенности и кросспроцессорности не достичь.
(deleted comment)

Date: 2008-10-09 08:36 pm (UTC)
From: [identity profile] arifg.livejournal.com
С++ не является кроссплатформенным, если понимать кроссплатформенность как возможность запуска приложения на другой платформе без пересборки. Тут уж или-или. Или имей эмулятор и запускай псевдокод, или имей весь набор библиотек и компилятор и пересобирай какждое приложение на платформе исполнения. Что касается вопроса "ява - интерпретатор или компилятор" то это вопрос терминологии. Классическое понимание интерпретатора - это ява-скрипт, где сам текст программы на высоком языке и является по сути исполняемой программой. Таков, например, был досовский бэйсик. Язык HTML - тоже интерпретатор. А вот когда текст программы преобразуется (причем зачастую необратимо, т.е. без возможности обратного преобразования) в любой другой компактный формат - это уже все-таки традиционно является компилятором. Многие трансляторы с Паскаля тоже компилируют в промежуточный P-код, который при исполнении на лету преобрауется в рантайме в исполняемый.

Виртуальная машинка интерпритирует байт-код.

Что же касается Явы, то тут тоже все зависит от устройства виртуальной машины. ВМ может интерпретировать псевдокод, но это медленно, а может его на лету один раз преобразовать в нативный код и исполнять уже как обычное приложение - достоинство песевдокода в том, что такое преобразование делается весьма быстро. А можно сочетать и то и другое - компилировать какие-то модули, и загружать их интепретирующим диспетчером. Обычно так и поступают.
(deleted comment)

(no subject)

From: [identity profile] livsy.livejournal.com - Date: 2009-01-14 02:21 am (UTC) - Expand

Date: 2008-10-09 08:42 pm (UTC)
From: [identity profile] arifg.livejournal.com
Ктстати, если Вы помните, знаменитый червяк Морриса использовал текст на "С" как кроссплатформенный: он пропихивал по сети этот текст на заражаемую машину, после чего при помощи скрипта запускал там С-компилятор, который и генерил платформо-зависимый исполняемый код червя, который дальше делал всю работу. Чем не "виртуальная машина"? :)

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 08:36 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 08:37 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 08:39 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 09:44 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 09:52 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 09:56 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 09:59 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 10:01 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 10:06 am (UTC) - Expand

Date: 2008-10-09 07:29 pm (UTC)
From: [identity profile] payalnik.livejournal.com
>Есть кроссплатформенные языки типа Java.
Какой бред :)
Есть кроссплатформенные API вроде QT.

Date: 2008-10-10 09:12 am (UTC)
From: [identity profile] psilogic.livejournal.com
этой новости сколько лет?
(deleted comment)
(deleted comment)

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 09:35 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 12:15 pm (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-10 01:38 pm (UTC) - Expand

Date: 2008-10-10 03:05 pm (UTC)
From: [identity profile] shaman-odnako.livejournal.com
- чтобы компилятор завел мутекс x и использовал его сам, автоматически при обращениях к переменным a, b. Чтобы компилятор сам оптимизировал это дело. Например вот для такой серии:

a++;
c = 4;
b-= 2;


ПЛОХО. Неочевидное поведение.

Date: 2008-10-11 02:34 pm (UTC)
From: [identity profile] kelavrik-0.livejournal.com
А в чём проблема? Что же ты такого наваял, что медленно работает?

Date: 2008-10-11 04:45 pm (UTC)
From: [identity profile] psilogic.livejournal.com
пока все нормально :)

Date: 2008-10-17 08:38 am (UTC)
From: [identity profile] http://mylid.net/ketmar (from livejournal.com)
таки не могу понять, зачем тащить в язык фичи, которые логичней делать внешними библиотеками. это приводит к распуханию компиляторов безо всякой практической пользы, мне кажется.

Date: 2008-10-17 08:41 am (UTC)
From: [identity profile] http://mylid.net/ketmar (from livejournal.com)
вдогон — вообще, ящитаю, что будущее за динамическими языками с хорошими возможностями метапрограммирования. ну право же, это 50 лет назад надо было выжимать из железяк соки и писать страшно заоптимайзеный код, иначе всё дичайше тормозило. сейчас такое попросту неудобно — как неудобно летать на воздушных шарах: оно-то в принципе летит, но как-то хреново и неудобно.

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 08:58 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 09:09 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 09:40 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 09:53 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 09:57 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 10:01 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 10:04 am (UTC) - Expand

(no subject)

From: [identity profile] http://mylid.net/ketmar - Date: 2008-10-17 10:08 am (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-10-17 10:13 am (UTC) - Expand

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 21st, 2025 07:28 pm
Powered by Dreamwidth Studios