ну это, мне кажется, не реально. Реально подгонять возможности языка под платформу, т.е. корёжить изначальный язык под имеющиеся оптимальные приемы программирования.
У господина не было проблем с совместимостью знаковых и беззнаковых char? О, если нет, то Вы явно мало работали на Си. Кроме того, скажите:
Вы сходу сообразите где что к чему относится? b и c – это оба указатели? а d – указатель или указатель на указатель? А e? А f – это char или указатель на char? Я понимаю, Вы напряжёте мозг и таки догадаетесь, но зачем. Если есть более удобная форма записи. А накапливающийся груз от перенапряжения на мозг в больших проектах ощущали?Код:extern int a, char *b, c, *d, char* e, f;
Я здесь присутствующим собираюсь ДОКАЗЫВАТЬ, что их обвинения в моём незнании Си просто смешны. Я вынужден вести такие войны, хотя видит бог как я устаю от таких как Вы на этом и других форумах.
Я предлагаю быть творческими личностями с творческим подходом, и уважать друг друга. А здесь мы обсуждаем не победу Оберонов над мэйнстримом, а всего лишь разработку на Обероне для Спека. А Вы пришли здесь троллить, ничего не сказав по теме, и являетесь для меня и тех, кому нравятся мои посты, просто деструктивным элементом. Успокойтесь, ничто Вашему мэйнстриму не угрожает.
Кстати, Вам будет приятно узнать, что один из архитекторов платформы .NET и Visual Studio – ученик Вирта и оберонщик Клеменс Шиперски (Clemens Szyperski), один из основателей компании Oberon microsystems. Тоже кушать захотел и двигать большие дела.
http://research.microsoft.com/~cszypers/
http://www.inr.ac.ru/~info21/info/ob...crosystems.htm
Вот Вам турбопаскаль. И вот. И ещё вот. Такое делают умные оберонщики, которым надоела искусственно раздутая сложность технологий.Цитата:
она их переросла еще в школе во время изучения Тurbo Pascal 3.
http://sage.com.ua/ru.shtml?e1l9
http://sage.com.ua/ru.shtml?e1l5
http://sage.com.ua/ru.shtml?e1l6
http://sage.com.ua/ru.shtml?e1l3
http://sage.com.ua/ru.shtml?e1l8
Теперь буду рад увидеть в ответ нечто подобное, но что сделали Вы. Для Спека или нет, неважно.
Кстати, первая ссылка это Вольфейнштейн на Обероне. Alone, знаю, ты любишь такие штучки, зацени.
1. Не все нормальные компиляторы выдадут ворнинг. Это нормальная себе конструкция в языке Си, разрешённая. Вот в GCC ворнинги по умолчанию вообще выключены, их надо включать, например, командой -Wall
2. Если даже ворнинг и включен, то реально его просто не заметить в общей куче других ворнингов. А в среднего размера проектах их количество огромно. И исправить ворнинги полностью никто не пытается, хотя бы потому что их добрая половина – в стандартных заголовочных файлах, куда шаловливые ручонки всё же не лезут.
Я понимаю, привыкнуть можно. Вон Аллен Голуб такой талмудище “Как ходить по минному полю Си, почти ничем не рискуя” написал. Советует в целях снижения риска писать вместо:
if(a==2)
if(2==a)
Чтобы, если вдруг опечатался, компилятор уж точно это не прохавал. Ну что ж. Это хорошее чтиво вдобавок к мэйнстрим-средствам разработки. Но в Оберонах нельзя написать:
И это правильно, господа. Так и должно быть. Поэтому байки об архаичности BEGIN и VAR будем считать оправданием своего невежества. Кстати, многие из здешних даже не знают что сделано хорошего в Обероне по сравнению с Паскалем в плане убирания лишних BEGIN. К скобкам очень привыкли, уже от чего-то другого начинает колбасить.Код:WHILE a := b …
Я думаю, что можно. Вариантов масса.
Надо написать все возможные правила замены кода. (Большинство из них можно вычислить автоматом.) И написать функцию, оценивающую время выполнения программы.
Далее, применяем все перестановки и считаем время. Возможно алгоритм будет работать сутки, но в результате мы получим максимально рабочий код.
---
Еще есть вариант, написать функцию оценивающую идентичность алгоритмов. Например:
mov ax, data
loop:
shl ax, 1
jnz loop
(Допустим, это 4-х битный x86)
Выполняем эту программу, только в регистры записываем формулы! В которых переменные - это состояние регистров до выполнения команды.
Выполнена команда MOV
1) ax0=data0; ax1=data1; ax2=data2; ax3=data3;
Выполнена команда SHL
2) ax0=data1; ax1=data2; ax2=data3; ax3=0;
Далее идет разветвление (jnz loop). Если ноль (AX0|AX1|AX2|AX3 = 0), то повторяется второе действие. Иначе (AX0|AX1|AX2|AX3 == 1) первое. Решаем обе ветви и записываем результат: (AX0|AX1|AX2|AX3) & (вариант 1) | (!(AX0|AX1|AX2|AX3)) & (вариант 2)
3.1) Цикл закончился
ax0 = (!(data1|data2|data3|0)) & data1 = !data1 & !data2 & !data3 & data1 = 0
ax1 = (!(data1|data2|data3|0)) & data2 = !data1 & !data2 & !data3 & data2 = 0
ax2 = (!(data1|data2|data3|0)) & data3 = !data1 & !data2 & !data3 & data3 = 0
ax3 = (!(data1|data2|data3|0)) & 0 = 0
3.2) Цикл продолжился
ax0 = ((data1|data2|data3|0)) & data2 = (data1|data2|data3) & data2 = data2
ax1 = ((data1|data2|data3|0)) & data3 = (data1|data2|data3) & data3 = data3
ax2 = ((data1|data2|data3|0)) & 0 = 0
ax3 = ((data1|data2|data3|0)) & 0 = 0
3) Объединяем
ax0 = 0 | data2 = data2;
ax1 = 0 | data3 = data3;
ax2 = 0;
ax3 = 0;
4.1) Закончилась вторая итерация цикла
ax0 = (!(data2|data3|0|0)) & data2 = !data2 & !data3 & data2 = 0
ax1 = (!(data2|data3|0|0)) & data3 = !data2 & !data3 & data3 = 0
ax2 = (!(data2|data3|0|0)) & 0 = 0
ax3 = (!(data2|data3|0|0)) & 0 = 0
4.2) Цикл продолжился
ax0 = (data2|data3|0|0) & data3 = (data2 | data3) & data3 = data3
ax1 = (data2|data3|0|0) & 0 = 0
ax2 = (data2|data3|0|0) & 0 = 0
ax3 = (data2|data3|0|0) & 0 = 0
4) Объединяем
ax0 = 0 | data3 = data3;
ax1 = 0;
ax2 = 0;
ax3 = 0;
5.1) Еще одна итерация.
ax0 = (!(data3|0|0|0)) & 0 = 0
ax1 = (!(data3|0|0|0)) & 0 = 0
ax2 = (!(data3|0|0|0)) & 0 = 0
ax3 = (!(data3|0|0|0)) & 0 = 0
5.2) Цикл закончился
ax0 = (data3|0|0|0) & 0 = 0
ax1 = (data3|0|0|0) & 0 = 0
ax2 = (data3|0|0|0) & 0 = 0
ax3 = (data3|0|0|0) & 0 = 0
6) Следующую итерацию выполнять не надо. Так как условие (AX0|AX1|AX2|AX3) не выполняется. Там точно находятся нули.
Вот мы и получили формулу нашей программы AX0=0; AX1=0; AX2=0; AX3=0. Аналогичная формула будет у команды MOV AX = 0. Можно автоматом заменять.
Это простейший случай. Работу любой программы можно описать формулами c использованием всего трех действий И, ИЛИ, НЕ.
"Регистр до = Регистр после & Регистр после | !Регистр после"
А доказать равенство этих формул можно с помощью ИСЛ ИЛИ
(Формула 1) XOR (Формула 2) = 0
И самое приятное в таком подходе, что можно на выходе получить такие алгоритмы, которые в книгах не написаны. В программе вполне может появится архивация данных. Сама собой.
Единственное неудобство - этот способ очень ресурсоёмкий, поэтому целиком обработать программу не получится. (Не будет архиватора. :( ). Придется обрабатывать небольшие кусочки программ. Ну и GPU и кеширование результатов поможет. Что бы дважды не считать, что последовательность SHL + JNZ всегда дает 0.
В мозгу программиста формируется нейронная сеть, которая парсит эти конструкции без участия интеллекта и внимания. Это как ходьба или печать на клавиатуре. Лично я не задумаюсь, как двигать пальцами и где расположены кнопки. Я думаю о слове.
Лично меня бесят указатели на функцию. Почему void*(*me)(int,int), а не void*(*)(int,int) me. Когда приходится работать с указателем функции на указатель функции, то вообще башню сносит.
вот друг твой да :) умный человек
а ты полностью соответствуешь своим описаниям
ссылка моя указывала на человека доказавшего практически, что java на спектруме возможна, да тупо и медленно, но возможна.
от тебя на просьбу показать "DASH" для спека в исходниках и обьектнике видно только скриншоты нарисованные в пейнте.
как ты можешь популяризировать чтото не показывая преимуществ?
а только разглагольствуя какие вокруг тебя собрались дартаньяны и какой ты тут красивый... виконт дебаржелон.
Я это все к тому говорю, что поставленные цели должен решать не синтаксис языка. Я то же могу приделать синтаксис Оберона к компилятору Си. Быстрее от этого компилятор не станет.
А вот могу приделать к любому компилятору функцию вывода спрайта и оптимизатор. Например к Sinclair Basic. И это даст результат. (Прикрутили уже и даёт.)
Поэтому лучше говорите - я напишу крутую библиотеку вывода спрайтов, крутой оптимизатор и синтаксис Оберона прикручу.
---------- Post added at 12:08 ---------- Previous post was at 12:06 ----------
Все inline и template в хеадерах пишутся.
Да ладно? Да неужели? :)
я считал и считаю что единственный ЯВУ имеющий право жить на спеке это Spectrum Basic все остальное - баловство.
результаты выдаваемые паскалями, явами и прочими хаскеллями мягко говоря скромные.
результаты выдаваемые С чуть получше что и доказывают испанцы
Не, ну всё же какое-то внимание всё равно надо. К тому же чем проще будет эта сеть, тем быстрее и эффективнее будет работать мозг программиста, и тем больше свободных его ресурсов будет доступно для других проблем.
Господа, почему бы не считать виды записи с VAR и без VAR – просто равнозначными альтернативами, и хорошо, что они есть, так разнообразнее. Но не надо самоудволетворяться надругательством над конструкцией VAR. Это синтаксический сахар. А 99% времени всё равно уходит не на набирание на клавиатуре слов VAR и BEGIN, а на пошаговую (или не пошаговую) отладку и поиск багов.
Оберон хорош тем, что программу на нём поймёт любой грамотный инженер. Даже не зная ни одного ЯП. А уж если разберётся...
А ещё он идеален для обучения программированию. Как самый простой мультипарадигменный ЯВУ.