Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Каким должен быть язык программирования - при минимальной привязке к аппаратуре?

1.8K
10 августа 2004 года
Sanya DLR
123 / / 03.03.2004
Представте, что вы - просто юзер (все ими были) и ничего не понимаете в железе. У вас есть некая программно-аппаратная система и алгоритм - в терминах математики, логики, графики, видео, 3D-игр, токарного станка или чего угодно. Нужен язык на который легко перевести этот алгоритм для системы. То есть суть в том, чтобы взять общие понятия из всех возможных областей применения программ и исключить редкие и специфичные. На основе этого выделить абстрактные классы устройств, данных и операций над всем этим.
С одной стороны команды должны быть как можно более сложные(и "человечные"), чтобы можно было использовать хоть в интерпретаторе. А с другой стороны команд должно быть как можно меньше, чтобы не утонуть в их изучении, но универсальные.
Короче - короткий и универсальный язык, ориентированный на нужды конечного пользователя автоматизированной системы.
6.0K
12 августа 2004 года
TarasCo
28 / / 10.03.2004
Java
и ее последователи типа С#
3.0K
14 августа 2004 года
O.S.D.
28 / / 09.10.2003
Цитата:
Originally posted by TarasCo
Java
и ее последователи типа С#



А на оно те надо??? Хочеш свой язык разработать???

1.8K
15 августа 2004 года
Sanya DLR
123 / / 03.03.2004
Цитата:
Originally posted by O.S.D.


А на оно те надо??? Хочеш свой язык разработать???


Может и хочу. Вот и спрашиваю, чтобы вовремя передумать, есло что. Я уже начал разочаровываться в универсальности, которая приводит к дешевому ширпотребу.

6.3K
15 августа 2004 года
Denri
43 / / 12.08.2004
Цитата:
Originally posted by Sanya DLR

Может и хочу. Вот и спрашиваю, чтобы вовремя передумать, есло что. Я уже начал разочаровываться в универсальности, которая приводит к дешевому ширпотребу.


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

1.8K
16 августа 2004 года
Sanya DLR
123 / / 03.03.2004
Цитата:
Originally posted by Denri

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


На каком же все таки уровне абстракции реально написать неспециализированный язык с указанными выше требованиями?

3.0K
18 августа 2004 года
O.S.D.
28 / / 09.10.2003
Цитата:
Originally posted by Sanya DLR

На каком же все таки уровне абстракции реально написать неспециализированный язык с указанными выше требованиями?



Был у меня один знакомый - так он "создал" свой язык - смесь Паскаля и СИ ?!?!?! Да ещё и обьектный. Я случайно познакомились с ним на одной олимпиаде. А он сам студент ХДУ(кто-то знает где это, я сам туда поступил!!!)

Насчёт твоей идеи - то тебе и виртуальную машину самому придётся писать (eg Java), или что-то наподобие. И этот язык ещё должен быть платформенно независим - ну и тем более какой нидь эмулятор сначала надо будет накатать.

1.8K
18 августа 2004 года
Sanya DLR
123 / / 03.03.2004
Речь не о создании программы компилятора/интерпретатора. Пока просто сам язык. Среда выполнения пока не существенна.
Вопрос надо было поставить так:
1. для каких прикладных задач можно использовать программно-аппаратные системы (не только ПК)?
2. какие классы устройств (которые принципиально различаются по конечному назначению) существуют в природе и разумном воображении?
Из этого можно будет сделать предварительные выводы:
1. Каких действий (над устройствами и данными) достаточно от системы, чтобы построить любой алгоритм.
2. Какие типы данных используются в этих действиях.
При этом учитывать, что язык должен быть:
1. с комплексными командами (чтобы, скажем, одной командой перемножить последовательность матриц).
2. с минимальным(!), но достаточным количеством команд и типов данных (чтобы не пришлось решать 2+2=4 при помощи тех же матриц).
Вобщем надо свести все программирование к преобразованию данных между всеми возможными входами и выходами системы, и не касаться её внутреннего устройства.
Мне почему-то кажется, что такой язык создать можно. А глубинная суть идеи в том, чтобы однажды построить тот уровень, на котором перевод с человеческого языка на формальный станет делом техники.
P.S. Паскаль и Си, как мне кажется, нечто вроде структурной надстройки над ассемблером. Они во многом ориентированы на инструкции и типы данных компьютера. А нынешние ПК как-то слабо ориентированы на человеческую логику - больше на электронику (так проще, а спрос все равно есть).
5.4K
19 августа 2004 года
kkip
16 / / 10.01.2004
Во, тут тоже единомышленники есть :)

Я уже приличный срок занимаюсь (в свободное время) проектированием ОС, ЦП и языка.

Такой набор позволяет "полнее" ощутить усю нагрузку на жопу инженеров и кодеров, которые это изобретали :)
Главное - так можно эффективнее учитывать потребности в универсальности. А уни - это то, к чему я фсегда подсознательно стремлюсь, это, вероятно будет прогресс для будующего, но в настоящем - из за этого я очень медленно двигаюсь с места, оно и не удевительно. Denri прав, куда проще проектировать "узкие специализации".

Язык, который ты описываешь - помоему, целая ОС, да еще и с AI.

По пунктам:

1) Вопрос странно поставлен. Для чего ты используешь калькулятор? А для чего Calc.exe? А Windows? (я пропустил PC, тк редко кто его использует в явном виде, как правило используются подсистемы (os, soft))
одним словом - калькулятор можно "прикладывать" пожалуй только к вычеслительным работам. А ПК и прочие более совершеные системы, можно "приложить" к любым вычислениям, работе с любым видом информаци и интерактивной работе например с видео (если есть то, что "показывает" и то, что "видит") или с аудио (если есть, что "пищит" и что "слышит") или механическом интерактивном взаимодействии (если есть, что "нажимает" и что "принимает нажатия" и прочие действия). Другими словами ПК пожалуй, неимеет ограничения в етом плане. Всё можно нарастить, если понадобилось какое-то устройство. Хоть радиоактивные датчики подключай - для него физический смысл маловажен. Ну понятно, что на счет ограничений, он конечно не смоделирует сложные химические реакции с максимальной точностью за пару сек, но и это исправимо - дело array processors или нейрокомпьютера.

2) А вот классы устройств - это не подходит для универсализации! Можно, конечно, условно классифицировать, например, "устройство непосредственно взаимодействует с пользователем" или "съемное устроуство" и прочие критерии, но, помоему сложно (если возможно) да и ненужно проводить такую классивикацию. Хотя суть и резон вопроса я прекрасно понял, сам был на таком месте, теже аопросы возникали.

1) Действий? Причем от ос?
ну резон, опять же ясен.
если говорить о взаимодействии CPU<->OS, то тут всё чуть проще, т.к. они редко меняются, а вот программ - туева хуча! Последний раз я остановился вот на каком варианте:
Ос знает, какие комманды (микропрограммы, алгоритмы) реализованы в процессоре. Откуда? Она это запоминает один раз, и потом обновляет, если проц поменялся, причем, разумеется делает это до начала загрузки, и используя только самый стандартный набор. А инфа о командах спрашивается прямо у проца, там все зашивается!
Дальше - если нужно выполнить некую комманду, она либо выполняется ЦП, либо перехватывается ОС.

2) На счет типов данных - я сторонник одного типа - байт! (unsigned char) Причем, неважно, какого он размера, главное что это универсально! Разумеется, при программировании легко создать свои типы/классы, но с одним базовым типом процу куда легче справиться.

1) Наверно уже немодно иметь такие комманды :) а как на счет мультипроцессоров? как на счет того, что в мультипроцессорах и массивах нужно использовать специальные комманды, для распределения данных? Я остановился пока на таком варианте:

систему сложно отнести к array cpu, milticomputer, multiprocessor, тк она выполняет функции любой из этих конструкций. В программе используется особый вызов процедур, который приводит к инициализацие и запуску новой ячейки!

таким образом, для сканирования медицинского снимка (образа) в поисках раковых клеток, можнонаписать такой код (условно):

for(int i=0;i<=1000) scanSector(i);

и слегкостью перевести для мультипроцесоора, установив спец модификатор при описании scanSector()

в результате основной поток будет заниматься прогонкой цикла, и инициализацией ячеек, и в ето время все инициализированные на из этого потока ячейки будут выполнять одну и туже процедуру scanSector, но каждая со своими исходными данными. Вроде это открытый параллелизм, а вроде и ничего, короме модификатора (который может поставить и компилятор, как inline) мы не указывали! Вот оня универсальность :))

2) Колво-комманд :) Ну опять же лучше скажу о процессорах. В ЦП, который я в прошлом году спаял на русской логике, была всего одна комманда! Так что не пришлось тратить место под код комманды.

а в языках - я полностью сфанател на С++. Некоторые говорят - это яз Выс Уровня. Несомненно, как он управляется с ООП впечетляет! Некоторые говорят, то это язык Низкого Уровня, приводя в док-во комманду i++. Я, например, с уверенностью могу возразить, что ето обычный матем оператор! С другой стороны С++ действителньно поглащает все ну программирование... а Java, кот так на него похожа - специально и создана для аппаратной развязки (по мнениям некоторых)! (конечно не только для этого - для компактности кода и простоты апп&прог интерпретации тоже)
но вот адрессацию можно привести в пример НУ улик! С другой стороны, каждый язык как-то должен работать с адресами, вот в С++ избран такой путь, пусть он и сильно напоминает аппаратный. Теоретически, программу на С++ с использованием всех его прелестей можно скомпилировать даже на мой проц с одной коммандой и одним способом адресации! (конечно я еще не хочу совсем повеситься, создавая свой компилятор :), но етим еще предется заняться)

Ну что, кто решил с нами универсализировать мир дальше?? 8-D
4.4K
19 августа 2004 года
captain cobalt
43 / / 04.03.2004
Цитата:
Originally posted by kkip
Во, тут тоже единомышленники есть :)


Да? А где ещё единомышленники есть? :)

5.4K
19 августа 2004 года
kkip
16 / / 10.01.2004
Цитата:
Originally posted by captain cobalt

Да? А где ещё единомышленники есть? :)



ты имеешь ввиду, на какие еще темы есть единомышленники, или где я еще встречал единомышленников на данную тему? :)

1.8K
20 августа 2004 года
Sanya DLR
123 / / 03.03.2004
... "Язык, который ты описываешь - помоему, целая ОС, да еще и с AI."
Ты говоришь о выполнении программы на этом языке (то есть о некоторой системе, которая будет это компилировать или исполнять). Это следующий этап.
А я пока имел ввиду только саму идею, этакий подход к программированию, когда нет необходимости заниматься оптимизацией под железо. Пусть производители оптимизируют свое железо под этот подход! Ну, а если реально смотреть на вещи, то роль "умного железа" может выполнять некоторая "виртуальная машина", то есть программная оболочка, которая может быть запущена на крутом компе или использовать вычислительные ресурсы сети.

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

Типы данных вроде байта - это дань уважения существующему железу, но не алгоритму программы. Наращивать какие-то структуры на основе простых байтов - будет громоздко (и плохо скажется на скорости исполнения (при той оптимизации, которую я пока подразумеваю)). Ну представь, что у тебя есть процессор, который за один такт может либо произвести действие с двумя байтами, либо с двумя структурами (то же произведение матриц, например, в 3D-графике).
Разрабатывать систему, разумеется, придется и в битах, и в тактах, и в умпульсах, и в уровнях напряжения - иначе пользователи будут вспоминать тебя гораздо реже, чем твою родительницу. Но самим пользователям (в данном случае - прикладным программистам) нужен другой уровень общения с компом - а иначе нафиг вообще что-то менять - давайте лучше писать проги под железо, а не платить ( :) ) за операционные системы?

P.S. Кстати, идея создания языка возникла как решение задачи создания защищенной ОС, где программам нет доступа к процессору, а всё только через ОС (то есть, исполняются только команды обсуждаемого сейчас языка). Исполнение, вероятно, будет происходить в режиме интеллектуального интерпретатора с предкомпиляцией (а обычно, чем меньше команды программы, тем больше времени уходит на выполнение кода самого интерпретатора). При этом ОС берет на себя оптимизацию многозадачной работы (интерпретируемые программы более предсказуемы и оптимизировать будет легче). Некая альтернатива интеловской аппаратной многозадачности с принудительным вытеснением.
5.4K
20 августа 2004 года
kkip
16 / / 10.01.2004
Цитата:
Originally posted by Sanya DLR
... "Язык, который ты описываешь - помоему, целая ОС, да еще

и с AI."
Ты говоришь о выполнении программы на этом языке (то есть о

некоторой системе, которая будет это компилировать или

исполнять). Это следующий этап.
А я пока имел ввиду только саму идею, этакий подход к

программированию, когда нет необходимости заниматься

оптимизацией под железо. Пусть производители оптимизируют свое

железо под этот подход!



А у меня, браток здесь такой взгляд:
Проц должен иметь возможность реализации при минимальной

стоимасти, сложности, количестве микросхем. Поэтому у меня и

используется одна комманда :). С другой стороны, всё, что

касается ускорения за счет аппаратной части, может быть

применено, и активировано (введено в использование)

операционкой. Всё, что прога хотела сделать, но проц

неподдерживал, то перехватывается ОС. А вообще самая основная

работа приходится на компилятор. Должна поддерживаться

возможность перекомпиляции на лету (что-то вроде FrameWorks),

чтобы максимально оптимизировать под текущий проц и др.

Цитата:

Ну, а если реально смотреть на вещи, то роль "умного железа"

может выполнять некоторая "виртуальная машина", то есть

программная оболочка, которая может быть запущена на крутом

компе или использовать вычислительные ресурсы сети.



а как на счет калькулятора или мобильника, или холодильника,

наконец?? ты хошь постоянно наращивать бедный камушек, который

должен быть дешевым? Тогда пол стоимости стиральных машин

составит камень :)

Цитата:

Насчет классификации устройств по назначению, тут я думаю

решение должно быть. Например, что касается пользователя, можно

ограничиться устройством текстового ввода (клавиатура, голос,

или что-то другое - для прикладной программы не важно. Это будет

организовывать система), устройством вывода: текстового и

визуального (опять же способ донесения текста или картинки/видео

до пользователя - на совести системы), ну и т.д.



Итак, есть устр-во. Нужен и-фейс и/о прально?
Дык че мудрить, берем файл - универсализация с ФС и ктомуже так

и делает UNIX'оиды.

Цитата:

Типы данных вроде байта - это дань уважения существующему

железу, но не алгоритму программы. Наращивать какие-то структуры

на основе простых байтов - будет громоздко (и плохо скажется на

скорости исполнения (при той оптимизации, которую я пока

подразумеваю)). Ну представь, что у тебя есть процессор, который

за один такт может либо произвести действие с двумя байтами,

либо с двумя структурами (то же произведение матриц, например, в

3D-графике).



Ты хошь прям структурами ворочить?
Замечу, что понятие такта я почти потерял. Проц, который я

собирал, для простоты был с генератором (меньше 3 МГц), но во

всех моих записях, с самого начала проц и вся архитектура

полностью асинхронные!! А структуры неплохо яцейками массива

процов обрабатываются :). И, опятьже байт (точнее слово,

столько, сколько помещяется на адресной линии) это для простоты

- любое действие можно наворотить сопроцессорами с набором

нужных комманд, или вообще не наворачивать - система исполнит.

Цитата:

Разрабатывать систему, разумеется, придется и в битах, и в

тактах, и в умпульсах, и в уровнях напряжения - иначе

пользователи будут вспоминать тебя гораздо реже, чем твою

родительницу.



про уровень напряжения - не про нейристоры ли ты :):)
А разве сложно извлечь бит из слова?
Согласись, куда проще и быстрее оперировать словом?
Кста, формат комманды в том проце - фиксированный размер в одно

слово! и там есть бит для связывания в пучки - открытый

параллелизм! непойму, почему в IA64 использовался для связи в

пучки такой крякозябр..

Цитата:

Но самим пользователям (в данном случае - прикладным

программистам) нужен другой уровень общения с компом - а иначе

нафиг вообще что-то менять - давайте лучше писать проги под

железо, а не платить ( :) ) за операционные системы?



А юзер пишет порги, пусть скорее всего на С++. Дальше - дело

компилятора! Под железо никто писать не будет (на ассемблере,

штоли?) это будет просто некрасиво на ЦП, в котором одна

комманда и слишком запутанно.

Цитата:

P.S. Кстати, идея создания языка возникла как решение задачи

создания защищенной ОС, где программам нет доступа к процессору,



Опа! Блин, ну вылетый "я" :))
Давай тогда упомяним слово "вирус". Качественный зверь будет

писаться в обход компилятора. т.е. защита на уровне языка

программирования и компилятора - это не подходит!!

я одно время яростно склонялся к интерпретации (вместо отправки

в проц), тут можно позащищать, как делает Ява, но

производительность...


[/QUOTE]а всё только через ОС (то есть, исполняются только

команды обсуждаемого сейчас языка).[/QUOTE]

а ну, тут проще - опять же и-фейс с ОС и фсе! только "набор

комманд" - вот проблема!

Оцени, как в винде живут MFC, VCL, .NET!! (про msvb я молчу,

конечно)

Цитата:
Исполнение, вероятно, будет происходить в режиме

интеллектуального интерпретатора с предкомпиляцией (а обычно,

чем меньше команды программы, тем больше времени уходит на

выполнение кода самого интерпретатора). При этом ОС берет на

себя оптимизацию многозадачной работы (интерпретируемые

программы более предсказуемы и оптимизировать будет легче).

Некая альтернатива интеловской аппаратной многозадачности с

принудительным вытеснением.



надо, конечно подумать, но помоему это сильно замедлит, суди сам

- на что проц? на интерпретатор или на проги?
конечно, я например вирусы тестирую на ВиртМашине. Но настоящая

защита должна реализовываться аппаратно.

2.3K
15 сентября 2004 года
Mystic
17 / / 25.11.2002
На самом деле каждый язык преследует какую-то цель. Попробуй написать симфонию, не используя язык нот. Попробуй решить квадратное уравнение без использования математической символики. Соответственно каждый создаваемый компьютерный язык преследовал какие-то цели. Без этих целей писать что-то универсальное бессмысленно. Языки программирования доже создавались с определенными целями. SQL для работы в реляционными таблицами. C для более абстрактного выражения машинного кода, MATLAB для реализации математических алгоритмов, в частности работы с матрицами
1.8K
17 сентября 2004 года
Sanya DLR
123 / / 03.03.2004
Цитата:
Originally posted by Mystic
На самом деле каждый язык преследует какую-то цель. Попробуй написать симфонию, не используя язык нот. Попробуй решить квадратное уравнение без использования математической символики. Соответственно каждый создаваемый компьютерный язык преследовал какие-то цели. Без этих целей писать что-то универсальное бессмысленно. Языки программирования доже создавались с определенными целями. SQL для работы в реляционными таблицами. C для более абстрактного выражения машинного кода, MATLAB для реализации математических алгоритмов, в частности работы с матрицами


Ассемблер позволяет написать все что угодно, в том числе и смоделировать SQL и язык нот. Но он слишком элементарный и оперирует такими понятиями, которых для конечного пользователя просто не существует.
С другой стороны SQL имеет массу заморочек, которые нигде кроме так для работы с таблицами не применимы.
Компромис - создать язык, скажем так, с наличием команд и данных наиболее часто используемых в программировании. Тот же SQL можно упростить - и он все еще будет пригодным для своих целей, а все навороты можно реализовать другими средствами, скажем так - на уровне циклов, арифметики, может даже прямого чтения файлов. Причем циклы и арифметика применимы к любым задачам, а вот ноты - излишество, их можно заменить значениями частот и т.п., а для удобства использовать обычные поименнованные константы (всякие там Const, #Define и т.п).
Проблемму можно обозначить так:
Допустим, Вы проектируете микропроцессор. Что эффективнее - использовать операции типа MOV, ADD, MUL или добавить такую операцию, как умножение матриц и ввести соответствующий тип данных? Какой это даст выигрыш в скорости выполнения и простоте программирования с одной стороны - и каковы будут затраты с другой стороны (например на время (или даже саму возможность) изучения пользователем нового языка, а также - какова цена такого микропроцессора)? По такому принципу надо включать/отсеивать все элементы языка.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог