Концепция языка программирования
x1 0.0 не только от аргументов, но и служит началом строки комментариев. На
y1 0.0 остальных строчках описываются, собственно, аргументы используемые в
x2 0.0 качестве источников вводных данных. А так же их тип со значениями по
y2 0.0 умолчанию.
): Когда все аргументы описаны заключением в скобки, двоеточие начинает
.lastX ?? описывать свойства функции и её состояние с прошлого момента вызова,
.lastY ?? которые должны объявляться как неопределённые при описании функции.
(#x2 y2#) Если x2/y2 умещается в числовом значении и являются числами,
dx = x2 - x1 вычисляем длину отрезка по осям x и y, объявляя
dy = y2 - y1 попутно ещё несколько локальных переменных
(|dx| > |dy|) Вычисляя модули определяем наибольшее значение в
........len = |dx| качестве абсолютной длины отрезка из dx/dy.
........len = |dy| Пунктированием завершаем блок ИСТИНА и ЛОЖЬ
dx / len Теперь делим переменные dx и dy для получения нужных
dy / len коэффициентов интерполирования вектора на растровой
lastX = x1 + 0.5 матрице. Попутно иницируем значения основного
........lastY = y1 + 0.5 цикла вывода группы пикслей в ряд одной линии
(len--) Заметим, что постфиксный декремент - двойной минус и слитно
DrawPixel(lastX, lastY)
lastX + dx, lastY + dy Допускается и такая запись.
........true
Представленный выше шаблон я вынашивал несколько лет. Но только сегодня разрешил ряд проблем(концептуальных). Ещё работал над проблемой символьной избыточности. Не для экономии памяти, а для дисциплины и читабильности.
Первый момент: Так, операторные скобки заменены на отступ табуляцией. В любом красивом коде фрагмент в скобках {...} и так форматируется отступом. А иногда - нет, что затрудняет читабильность. А если символы скобок упразднить и заменить на явный отступ, то он станет уже десциплиной!
Второй момент: Никаких зарезервированных слов нету, есть только конструкции на основе табуляции. В этом примере конструкция уже напоминает блок-схему:
Блок второго уровня
Блок третьего уровня
^---------------continue до первого уровня
^-------continue до второго уровня
.---------------break по первый уровень
.-------break по второй уровень
Третий момент: Комментариями считается всё то, что не поддаётся алгоритмическому конструированию. Это очень сильно влияет на аккуратность.
Вот ряд примеров различной сложности:
Блок операций, выполняемый, пока условие истино
Допускается произвольное число строк, конструктивных вхождений
________Подчёркивание отделяет блок цикла от блока, который должен был
выполниться, если цикл вообще не совершался. Однако, в данном
блоке допускается совершить любые действие и попытаться цикл
запустить вновь. Но только одной попыткой!
........Если цикл перезапускать не следует, блок завершается пунктиром
Тем самым, описанная конструкция работает как сложный комплекс сочитаний таких
стандартных операций, как do-while и if-else. Ниже описанно устройство данной
конструкции:
(condition--)
any_function(value)
value + condition
представляется как:
while(condition --) {
any_function(value)
value += condition
}
Пример 2:
(condition--)
any_function(value)
........value + condition
представляется как:
while(condition --) {
any_function(value)
value += condition
break
}
оптимизируется в:
if(condition --) {
any_function(value)
value += condition
}
Пример 3:
(condition--)
any_function(value)
________value + condition
-condition
........value = 0
представляется как:
if(!condition) {
condition --
condition = -condition
value = 0
} else {
while(condition --) {
any_function(value)
value += condition
}
}
Пример 4:
(condition--)
any_function(value)
________value + condition
-condition
value = 0
представляется как:
if(!condition) {
condition --
condition = -condition
value = 0
}
while(condition --) {
any_function(value)
value += condition
}
Пример 5:
any_function(value)
________value + condition
(condition --)
представляется как:
do {
any_function(value)
value += condition
} while(condition --)
Пример 6:
(condition--)
========0
value = 0
........any_function(value)
========1
value = 1
........any_function(value)
========2 4..6
value = 2
any_function(value)
========3
value = 3
any_function(value)
========
value = -1
представляется как:
switch(condition --) {
case 0:
value = 0
any_function(value)
break
case 1:
value = 1
any_function(value)
break
case 2:
case 4: case 5: case 6:
value = 2
any_function(value)
case 3:
value = 3
any_function(value)
default:
value = -1
}
Остальные комбинации запрещены и останавливают работу парсера.
Пробная действующая модель языка выполнена в JS на HTML в качестве парсера. Все теги, типо <select> и т.д. описываются табуляцией, т.е. если отступ табуляцией закончился, тэг автоматически закрывается...
Ваши комментарии?
В добавление, у вас, как кажется, } или end заменены подчёркиванием - по-моему это неудобно. Нужно ещё будет считать, сколько точно поставить знаков, вместо того, чтобы просто написать } или end.
Плюс, нормальные IDE сейчас оптимизируют написание кода так, что добавление скобок, begin/end и пр. делается автоматом. Это, может, не повышает читабельность, но оная приобретается без проблем со временем.
Вообще, попытки преобразить текстовые файлы в "красивенькие с графикой" уже не раз предпринимались - посмотрите хотя бы на вики. Но здесь уже нужно что-то совсем свежее, нежели просто перетасовка каких-то языковых элементов. Даже Smalltalk как ни крути не имеет революционный синтаксис... ИМХО.
Ага, автоформатирование рулит. ;)
Кошмарный ужас там начинается когда приходится размечать приличных размеров таблицу. :D
Угу. Ещё отдельная песня про то, как там задаются шаблоны - какая-то смесь XML, HTML, CSS и вообще непонятно чего.
{| id="mp-upper" style="margin:0; background:none;"
{{#if:{{Main Page banner}}|<tr id="mp-banner"><td colspan="3" style="text-align:center; font-size:100%; background-color:#F2E6CE; padding:0.2em; border:1px solid #BFB1A3; color:#000; font-weight:bold;">{{Main Page banner}}</td></tr>
}}
Какие-то #define наподобии Сишных, даже комменты есть, что по идее против самой идеи вики.
Когда видишь более-менее читабельную для человека разметку вики смешанной с этим чудом, то уши в трубочку сворачиваются.
Мораль простая: для несложных проектов и доков вики годится, а для чего-то навороченного масштабов Википедии лучше HTML пока ничего не придумали.
Тоже самое относится и к языкам программирования - не надо из них стремиться сделать яркий конструктур, по-моему, или по крайней мере без попыток использования оного в серьёзных проектах..
т.е. насколько я понял - вы просто хотите сделать другую оболочку для существующего языка, которая будет на ваш взгляд более естественной?
сомневаюсь что это далеко пойдет, разве что полезно для самоудовлетворения, раз уж вы сказали:
и напоследок:
Ещё работал над проблемой символьной избыточности. Не для экономии памяти, а для дисциплины и читабильности.
это очень субъективное мнение, что из "мало символов" => "++читабельности"
возможно кому-то привычнее(а ведь так определяется читабельность?) видеть { }, а кому-то слова begin end.
Просто на одном из форумов прочитал примерно следующее: "я новичок в js..." тра-ла-ла... и в конце "js придумали для html вёрстки, почему не могли использовать более простой язык? в html то не нужны крутые механизмы, это же просто язык разметки и js должен просто обрабатывать простые события на странице"...
Я подумал, а почему действительно? Почему нет языка-оболочки над любым другим? Именно для начинающих.
Над Си, над ассемблером? Вы говорите, подобные языки есть. Но я забыл написать всего одно слово. Должно быть
Концепция оболочки языка программирования.
Для ассемблера я давно такой написал. Типо Sphinx C--, но проще. Транслятор разбирает блоки формул из сотен строчек и генерирует десятки тысяч строк с мнемониками и метками.
Так где идея-то?
JS к HTML притянут за уши, к примеру в нем нет нормальных инструментов для работы с DOM - именно потому существуют фреймворки типа JQuery.
Потому что это нафиг никому не нужно. Особенно для новичков. Есть языки, в которые можно встроить другие языки DSL.
Это называется - компилятор.
Я подумал, а почему действительно? Почему нет языка-оболочки над любым другим? Именно для начинающих.
Мне тоже интересно, чего тут на форуме так часто какие-то идеи предлагаю именно для начинающих. Один товарищ, помнится, сделал прогу, которая сама исправляет синтаксические ошибки в Delphi, плюс (странно) форматирует код, добавляет какие-то комментарии, нумерует его и т.д У вас вот новый язык "для начинающих".
Если все движимы благородной целью облегчить участь студенчества [COLOR="DimGray"](хотя куда уж больше облегчать в наше время)[/COLOR], то почему не учитывается факт, что сей контенгент, успешно пролетя все перепетии по освоению языка, и т.д. потом будет вам же морочить голову, почему он ничего не понимает в "Настоящем Си и винапи". Будете писать ещё одну оболочку?
Так ведь далеко не уедешь - сложные языки не просто так создавались сложными, так что магически сделать их простыми вряд ли получится. Нужна совсем новый взгляд на языки программирования.
Вообще, если по делу, то чем конкретно отличается "Концепция оболочки языка программирования" от любого компилятора или вообще любого языка? Тем, что она транслирует код одной формы в код другой? А зачем?
Как показывает практика в языке можно воплотить очень многое, даже идею этой самой "оболочки".
Вот мы, я имею в виду касту программистов, часто используем программы несколько низкой или средней навороченности.
Я по сей день использую Volcov Commander 4.00 из-за возможности в нём легко и быстро редактировать Hex-Dump'ы, поковырять exe или avi, набить wav или mid с их RIFF или MThd заголовками с нуля!
Дело в том, что я не музыкант, а имеющийся набор редакторов меня не удовлетворяет.
Например, все знают Crack'и и Patch'и с музыкальным сопровождением? И там музыка в трекерном формате стиля "чип-тюн", с эффектами "бульканья", aperggio называется.
Так вот, меня мучал вопрос, а это "бульканье" в миди не возможно чтоли? Ни в какой из программ этого эффекта не достигнуть, а при экспорте из трекера в миди эффект просто игнорируется...
Но, покопавшись в дампе с помощью Volcov Commander, спустя пару суток и часы изучения протокола миди, мне удалось-таки сотворить чудо: Миди-композицию с эффектом aperggio!
Проверил даже на сотовом телефоне - работает! :)
Любые чертежи и рисунки я всегда делал стандартным Paint системы. Никаких Photo Shop и прочей навороченной гадости. Даже настроечную ТВ-таблицу за 4 часа однажды нарисовал.
Разве один я такой? Ведь есть же тут программисты, обходящиеся без дряни с наворотами!?
Среди моих знакомых есть такой человек. И в Paint рисует, и поражённый вирусом бинарник модифицирует в дампе так (переставляет местами пару команд), что ни один антивирус не находит! :-p
P.S.: Несколько лет назад надо было нарисовать чертёж, причём с алгоритмической точностью! Вы же знаете в GDI операцию PlgBlt? Именно она в Paint наклоняет рисунок на заданные углы. Однако Microsoft странно поступила и не позволяет в Paint этой операцией поворачивать рисунок на любой угол(вращать), тогда как в Си я с PlgBlt делал в два счёта: Переводишь углы в Sin и Cos, а затем передаёшь в функцию и всё!
Ну, я сел и стал мастерить свой Paint: точная копия интерфейса! Но глубина Undo/Redo - беспредельна. Запоминается лишь вся последовательность операций над Bitmap. Не ново...
А потом я подумал, что делать с алгоритмизацией???
И тогда придумал концепцию универсального языка-оболочки. Вот тогда-то эта идея и родилась...
Мне, как программисту, в Paint тесновато, а в Си достало "шаблонничать" и copy-paste'ть. И так проектов больше сотни. Причём, надо сделать что-либо, приходится в Си новый проект разворачивать! Разве вам это не знакомо? ;)
Вот я и задумал язык, который и рядового пользователя не будет напрягать, и программист с помощью него набьёт алгоритм прорисовки чертежа любой сложности.
Как в Эксель: Можно тупо таблицы расписывать и вычислять ручным калькулятором (фигею, но у нас так и делают). А можно описать порядок вычислений и ячейки сами будут вычисляться.
Вот я этот язык для Paint так и задумывал: Не программисту там ничего сверхъестественного не найти. А кто знаете базовые принципы, тот легко опишет алгоритм с выбором кистей и перьев, с поворотами параллелограммов и заливкой любым шаблоном.
И начиналось всё как:
Brush[] Let's we making an binary array
0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99 It is an bytes of our brush
Br1 = CreateBrush(Brush)
oldBr = SelectObject(Br1)
i = 0
a = i * PI / 180
MoveTo(320, 240)
LineTo(320 + cos(a) * 100, 240 - sin(a) * 100)
i + 15
(i < 360)
SelectObject(oldBr)
DeleteObject(Br1)
Вы считаете меня до такой степены некомпетентным???
Даже ассемблер - компилятор. А у меня - именно транслятор. Однопроходной, читает по строке текст файла и переводит формулы в мнемонику. Причём назад не возвращается, хранит лишь список открытых скобок. Т.е. именно транслятор, а не компилятор. Поток любой длины на лету переводит... Четыре года писал. На турбо-паскале, а последняя версия - js... Не путайте меня! ;) До компиляторов я не дорос/
Я понял;)
Спасибо!
Иными словами, вы сделали для себя удобную обёртку для языка, на которой вам удобно писать. Это дело субъективное.
Советую прислушаться к hardcase - полноценных языков программирования со схожими принципами много, и они более-менее удобны всем.
Любые чертежи и рисунки я всегда делал стандартным Paint системы. Никаких Photo Shop и прочей навороченной гадости. Даже настроечную ТВ-таблицу за 4 часа однажды нарисовал.
М-да...
А чего же ты не добавил "Дело в том, что я не художник, а имеющийся набор редакторов меня не удовлетворяет." ?
Настроечная таблица ТВ - это видимо верх компьютерной графики...
Разве один я такой? Ведь есть же тут программисты, обходящиеся без дряни с наворотами!?
Угу... есть тут программисты обходящиеся без фотошопа. Как и есть наверное на свете художники, которые могут прожить без Volcov Commander.
Среди моих знакомых есть такой человек. И в Paint рисует, и поражённый вирусом бинарник модифицирует в дампе так (переставляет местами пару команд), что ни один антивирус не находит! :-p
И бинхекс, и паинтец, и на миди игрец, прям!
У меня, кстати, есть знакомый, который кулаком гвозди забивает. Знаешь, что он про молоток говорит? "Дело в том, что он не плотник, но...
А рассказ про модификацию вирусов, что кстати называется "чисткой", так это, извините за выражение, паинтешь.
P.S.: Несколько лет назад надо было нарисовать чертёж, причём с алгоритмической точностью! Вы же знаете в GDI операцию PlgBlt? Именно она в Paint наклоняет рисунок на заданные углы.
И как это не отбило твоей любви к этому убогому инструменту?
Для справки, чертежи обычно делают не в растровом, а в векторном формате.
А сл-но используются совсем др. инструменты.
Ну, я сел и стал мастерить свой Paint: точная копия интерфейса!
Ну уж никто не сомневался, что так дело повернется.
А случаем, компьютер у тебя не собственноручно собран из подручных элементов менее навороченных, чем эта дрянь на транзисторах?
Мне, как программисту, в Paint тесновато, а в Си достало "шаблонничать" и copy-paste'ть.
Так может пора закончить рисовать настроечные таблицы и заняться изучением C++ и какого-нибудь инструмента?
И так проектов больше сотни.
Ну так... проснулся, зашел в туалет, а там унитаз... неправильной навороченной конструкции, - раз проект. После надо руки помыть, а тут целая куча проектов - мыло, кран, вода наконец, в которой целых два H и только одно O. Ну и за день естественно проектов набегает!
Как в Эксель: Можно тупо таблицы расписывать и вычислять ручным калькулятором (фигею, но у нас так и делают). А можно описать порядок вычислений и ячейки сами будут вычисляться.
Неожиданно ты упомянул этот инструмент... Я уж подумал, что гореть ему в аду вместе с фотошопом.
И приготоволся к описанию того, как правильно и здорово расписывать таблицы в notepad с помощью '|' и tab.
Вот я этот язык для Paint так и задумывал: Не программисту там ничего сверхъестественного не найти. А кто знаете базовые принципы, тот легко опишет алгоритм с выбором кистей и перьев, с поворотами параллелограммов и заливкой любым шаблоном.
Только вот тому, кому это надо не будет описывать алгоритм, а откроет фотошоп.
Ну в принципе диагноз ясен - веломания.
P.S. жирным отметил фразы, которые должны стать крылатыми.
Вот послушайте (вручную набивал), работает и на сотовых телефонах...
Вот послушайте (вручную набивал), работает и на сотовых телефонах...
ты не поверишь, но этот инструмент называется гитарой, неожиданно, да?
Вы кряки/патчи с музыкой встречали?
Под "инструментом" я имел в виду СОФТ!
Музыку в стиле "чип-тюн" знаете? Там этот эффект называется аперджио: Три ноты разные быстро перебираются. Вот например эти четыре трека послушайте:
Музыку в стиле "чип-тюн" знаете? Там этот эффект называется аперджио: Три ноты разные быстро перебираются.
За софт сойдёт любой MIDI-редактор, типа Sibelius'а, или вон у меня был NoteWorthy Composer, тоже MIDI сохранять умел, хоть и для другого предназначен.
А приём быстрого последовательного перебора трёх (и более) нот называется арпеджио (arpeggio). Не позорьтесь на весь форум.
Насколько я знаю в Paint.NET можно прикрутить плагин, который позволяет фигачить код на C#. Думаю, если немного полазить в сети или на худой конец посмотреть на него рефлектором задача вполне реализуема и на нем.
Я с неё начинал и ща она установлена. Нету там таких наворотов
arpeggioFX.zip (525 байт, 2 просмотров) <-- Разве здесь не писано "арпеджиоЭфИкс? ;)
У меня есть трек, где арпедж звучит как балалайка-три струна. Так что где в мидяхах есть балалай-эффект? Киньте-ка одну, интересно ;)
А аперджио - ошибка-ловушка. Вот вы первый, кто заметил;)
да так даже я могу, про Алекси Лайхо вообще молчу, запилит и не заметит!:D
Подведу по всем вашим постам итог: вы страдаете тяжелым случаем скуки и по сему, придумываете себе всевозможные глупые занятия.
ЗЫ: и "треки" ваши полный отсос, слушайте, незнаю, металику, что ли!!!:D
ЗЫЗЫ:
на гитаре можно играть все! доказано товарищем Алексио Лайхо и Рупом Латвала, когда они в мастер классе от Чилдрен Офф Бодом зарубили на двух эспах "Вивальди - Времена Года, Лето - Шторм".
Точно так же Apocalyptica перекладывает для струнных хеви-метал, не повторяя точно ноты, но следуя общему звучанию и учитывая свои возможности. На фортепиано есть развитая полифония, но невозможно сыграть четвертитонный интервал. На скрипке есть некоторые возможности в полифонии, но нет низких нот. На тромбоне очень трудно играть некоторые мелодии, и вовсе нельзя взять хотя бы двойные ноты.
Миди - это просто описание, которое применимо к любому виртуальному инструменту. Поэтому эффект балалайки повторим там даже для тромбона, но нет никакого понта говорить, что такое можно сделать только ручками. То же самое прекрасно делается в сибелиусе шестьдесятчетвёртыми нотами.
Но это так, оффтоп для общего развития.