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

Ваш аккаунт

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

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

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

пишем язык програмирования для написания оси

4.0K
10 июня 2004 года
wowa
41 / / 16.05.2004
А почему бы не написать язык програмирования специално для написания оси, и других програм где часто приходится писать на асемблере. Средний между С, С++ и асемблером. Или точнее не написать, а немного исказить С. Сделать в нем язык для асемблерных вставок, с подержкой переменых от С, в котором не надо думать где какой регистор поставить с возможностью написания команд типа add a,b,c равнасилных a=b+c, где a,b и c описаные в С переменые. И изменить свойства функций, так чтоб в функции можно было задать входящие переменые, в каких регистрах они входят, выходяшие перименые, через какие регистры они выходят, какие регистры проходят и не изменяются, или какие регистры изменяются.
3
10 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by wowa
А почему бы не написать язык програмирования специално для написания оси, и других програм где часто приходится писать на асемблере. Средний между С, С++ и асемблером. Или точнее не написать, а немного исказить С. Сделать в нем язык для асемблерных вставок, с подержкой переменых от С, в котором не надо думать где какой регистор поставить с возможностью написания команд типа add a,b,c равнасилных a=b+c, где a,b и c описаные в С переменые. И изменить свойства функций, так чтоб в функции можно было задать входящие переменые, в каких регистрах они входят, выходяшие перименые, через какие регистры они выходят, какие регистры проходят и не изменяются, или какие регистры изменяются.



Что-то я так и не понял, чем C/C++ не подходит?
Пока похоже на то, что нежелание изучить что-либо приводит к желанию сделать свое.
Все, что ты написал реализуемо и в C/C++.

Создание своего языка не менее сложная задача, чем написание своей ОС.

4.0K
10 июня 2004 года
wowa
41 / / 16.05.2004
Цитата:
Originally posted by Green


Что-то я так и не понял, чем C/C++ не подходит?
Пока похоже на то, что нежелание изучить что-либо приводит к желанию сделать свое.
Все, что ты написал реализуемо и в C/C++.

Создание своего языка не менее сложная задача, чем написание своей ОС.



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

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

3
10 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by wowa

Что в компеляторе от C асемблерные вставки компилируются а не вставляются на прямую в выходящий фаил и асемблерные вставках работают переменые, не хуже чем в самом C.


Все там отлично работает и вставляется.

Цитата:
Originally posted by wowa

Что в C можно для каждой функции отделно задать через какие регистры она получит свои переменые, через какие регистры выйдут выходящие переменые, и в C есть только одна выходящяя переменая, осталные можно задать только послав адрес куда их записать,


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

Цитата:
Originally posted by wowa

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


С этим труднее, но в различных ситуациях можно найти свой выход. В большинстве случаев это не надо, а там где надо, можно и асм вставку сделать.

Цитата:
Originally posted by wowa

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


Внести изменения в данном случае может оказаться труднее, чем сделать все с нуля, т.к. твоя семантика не должна будет конфликтовать со стандартной.

1.9K
12 июня 2004 года
DRVTiny
115 / / 13.12.2003
Цитата:
Originally posted by Green

Все там отлично работает и вставляется.


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


С этим труднее, но в различных ситуациях можно найти свой выход. В большинстве случаев это не надо, а там где надо, можно и асм вставку сделать.


Внести изменения в данном случае может оказаться труднее, чем сделать все с нуля, т.к. твоя семантика не должна будет конфликтовать со стандартной.


Ну так всё же, если кто не забыл, я тут недавно предлагал компилятор для ProtectedMode'а создать, т.к.полагаю необходимым существование управляемого сценариями загрузки bootstrap'а для ОС ROSA. Язык C я патологически неперевариваю из-за его откровенно уродливой семантики (может, это и ускоряет компиляцию кода - но почему я-то должен писать маразматические конструкции с фигурными скобками на каждом шагу из-за этого?!), так что, по видимому, за основу будет взят язык Microsoft BASIC (вот только не надо мне тут, понимаешь, зубоскальства - так или иначе компиляторы BASIC'а от MS были и остаются самыми высокоинтеллектуальными программами в своей группе (к которой язык ADA не относится, разумеется)). Кстати, знаете ли Вы, что написанный на чистом Асме компилятор PowerBASIC для DOS по сей день остаётся лидером по степени оптимизации выходного кода - и работает этот код в среднем в 1.2 - 1.3 раза быстрее аналогичного C-шного. Так что мифы о неких необычайных тормозах, генетически заложенных во всех реализациях языка BASIC так, собственно, навсегда мифами и останутся. Истина одна - рабочий инструмент программиста должен быть максимально удобным, в идеале-таким, чтобы программист вообще не думал о самом инструменте, а думал только о том продукте, который он с помощью него создаёт. Язык C, к сожалению, не позволяет ни на секунду отвлечься от проставления после каждой фразы очередной ";" или "}" / "{", да и основные управляющие конструкции выглядят откровенно "рогато" (я же говорю - уродство какое-то все эти for (int i=i_start; i<i_fin; i++) и прочие if ()??? - все эти констукции избыточны и не наглядны только из-за того, что компиляторы C чаще всего не обременены излишним интеллектом - их создателей больше интересовали характеристики выходного кода (оптимизация), нежели удобство человека, пишущего программы на диалекте зелёных марсианских человечков).
Я это всё к тому, что в природе до сих пор существует всего 3 языка программирования, удовлетворяющих требованиям внутреннего совершенства и минимаьной избыточности - это Assembler (в принципе синтаксис AT&T в этом плане лучше), BASIC и ... как это ни странно, REXX (IBM'овский, встроен во все версии OS/2, начиная со 2-й). Так с реализации какого из них начнём.
Да, и ещё, мне нужен интерпретатор команд типа BASH'а - может, кто каую-нить идейку на сей счёт подкинет...

3
12 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by DRVTiny

Язык C я патологически неперевариваю из-за его откровенно уродливой семантики (может, это и ускоряет компиляцию кода - но почему я-то должен писать маразматические конструкции с фигурными скобками на каждом шагу из-за этого?!)


Это уже все объясняет.
1. Весь этот сыр-бор из-за того, что ты "не перевариваешь" этот язык. А как я уже подмечал, людям кажется, что легче написать что-то свое, чем выучить чужое. Весьма неправильное мнение.
2. Твои знания в С, видимо не простираются далее фигурных скобок и точки с запятой, если ты считаешь это основной проблемой.

Цитата:
Originally posted by DRVTiny

, так что, по видимому, за основу будет взят язык Microsoft BASIC (вот только не надо мне тут, понимаешь, зубоскальства - так или иначе компиляторы BASIC'а от MS были и остаются самыми высокоинтеллектуальными программами в своей группе (к которой язык ADA не относится, разумеется)).


Пожалуйста, подтверди свои слова конкретными ссылками. Что-то я сомневаюсь, что компилятор языка ВАСИК является высокоинтелектуальной программой. Прям ИИ какой-то. Хотя, ему таким надо было бы быть в виду низкой подготовки в массе своей программистов на этом языке, чтоб додумывать за них.

Цитата:
Originally posted by DRVTiny

Так что мифы о неких необычайных тормозах, генетически заложенных во всех реализациях языка BASIC так, собственно, навсегда мифами и останутся.


А твои разоблачения так же останутся мифами, видимо.
Ты так здорово выделил один компилятор ВАСИКа и сешал в кучу все компиляторы С...
Конкретные данные в студию, плз.

Цитата:
Originally posted by DRVTiny

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


Это достигается не столько инструментарием, сколько профессиональностью его использования. Рубанком тоже нужно научиться строгать, даже электро рубанком.

Цитата:
Originally posted by DRVTiny

Язык C, к сожалению, не позволяет ни на секунду отвлечься от проставления после каждой фразы очередной ";" или "}" / "{",


:D :D :D
Что то я все больше и больше сомневаюсь в твоей компетентности. Без операторных скобок пока не обошелся ни один язык программирования, так же как от символа разделения операторов.
И если в ВАСИКЕ разделитель - это переход на новую строку, так это только вносит путанницу в виду своей визуальной неясности.

Уверен, что по этой же причине тебе не нравятся C++, C#, Perl, PHP, Java и т.д.
Странно, и как это другие программисты с этим живут? Наверное, жутко мучаются... :D

Цитата:
Originally posted by DRVTiny

да и основные управляющие конструкции выглядят откровенно "рогато" (я же говорю - уродство какое-то все эти for (int i=i_start; i<i_fin; i++) и прочие if ()??? -


ПОКАЖИ в чем "рогатость" и уродливость.
Они стройны и логичны

Цитата:
Originally posted by DRVTiny

все эти констукции избыточны и не наглядны


Избыточны? Ненаглядны?
Ну про ненагляднось понятно, - это у тебя просто практики, видимо, мало.
А вот где избыточность, можешь ПОКАЗАТЬ?

Цитата:
Originally posted by DRVTiny

только из-за того, что компиляторы C чаще всего не обременены излишним интеллектом


На чем сделаны выводы о компиляторах?
Конкретную информацию, плз.
Пока это пустоя сотрясание воздуха, человеком, которому мешают программировать операторные скобки. Плохому танцору знаешь, что мешает? Поэтому он изобрел Ламбаду. :D

Цитата:
Originally posted by DRVTiny

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


Человека? Программиста или ламера?

Цитата:
Originally posted by DRVTiny

пишущего программы на диалекте зелёных марсианских человечков).


Могу воспринять как личное оскорбление! :D:D

Цитата:
Originally posted by DRVTiny

Я это всё к тому, что в природе до сих пор существует всего 3 языка программирования, удовлетворяющих требованиям внутреннего совершенства и минимаьной избыточности - это Assembler (в принципе синтаксис AT&T в этом плане лучше), BASIC и ... как это ни странно, REXX (IBM'овский, встроен во все версии OS/2, начиная со 2-й). Так с реализации какого из них начнём.


Смелые выводы... необоснованные.

Цитата:
Originally posted by DRVTiny

Да, и ещё, мне нужен интерпретатор команд типа BASH'а - может, кто каую-нить идейку на сей счёт подкинет...


Есть идейка! Используй BASH!

Мне тут ещё другая мысль пришла.
А давай посмотрим, что более элегантно и рационально?
Ты пишешь небольшой код на BASIC, а я пытаюсь повторить его на С или С++. Только, давай использовать классические языки, а не конкретную реализацию. Хотя... можешь использовать и конкретную реализацию, думаю, я справлюсь.

2.0K
13 июня 2004 года
HardMix
78 / / 25.06.2003
Мальчики, не ссоооортися (с) :)
2Green:
Однако, нам придется таки признать правоту DRVTiny
когда он предоставит компилятор языка (собственного сочинения!), использование которого будет много удобнее использования всего существующего на сей день! 8) Ну, или хотя бы "изложенную на бумажке" концепцию языка...
2DRVTiny:
Прежде чем кидать тухлым помидором в то, чего ты до конца не понял подумай.... Мы же не пртив, ты докажи фто ты прав :) А если не можешь, стоит ли спорить......
4.0K
13 июня 2004 года
wowa
41 / / 16.05.2004
Цитата:
Originally posted by HardMix
Мальчики, не ссоооортися (с) :)
2Green:
Однако, нам придется таки признать правоту DRVTiny
когда он предоставит компилятор языка (собственного сочинения!), использование которого будет много удобнее использования всего существующего на сей день! 8) Ну, или хотя бы "изложенную на бумажке" концепцию языка...
2DRVTiny:
Прежде чем кидать тухлым помидором в то, чего ты до конца не понял подумай.... Мы же не пртив, ты докажи фто ты прав :) А если не можешь, стоит ли спорить......


Моя конция это создание языка програмирования в котором есть переменые которые могут в зависимости от места в порограме менять место в котором они находятся и все команды в этом языке будут командами асемблера(немного мадифицироваными). Который будет компилироватся и переводится в асемблер нужной архитектуры процесора.
Для облегчения написание написания програм на нем встроить его в немного модифицированый С++ или С или наоборот в него встроить часть С++.
И первое что нужно изменить в С это сделать более универсалные и настраиваимые функции.
Вот пример настраивоимости функций:
int Fun(in: int A1 __reg(EBX), out: int A2 __reg(ECX), inout: int A3 __reg(EAX,EBX)) __reg(EDX) __regnotover(ESI) и тип функции.
если нет модификатора in: out: inout: то щитается что он in
если отсутствует через какой регистыр произходит входы(выходы) переменых и какие регистры програма изменяет не сохраняя их значения, то если это статическая функция, то они настроятся автоматически так чтоб код выполнялся быстрей и был компактней. Если нет то по стандарту C.

260
13 июня 2004 года
Ramon
1.1K / / 16.08.2003
Цитата:
Originally posted by wowa

Моя конция это создание языка програмирования в котором есть переменые которые могут в зависимости от места в порограме менять место в котором они находятся и все команды в этом языке будут командами асемблера(немного мадифицироваными). Который будет компилироватся и переводится в асемблер нужной архитектуры процесора.
Для облегчения написание написания програм на нем встроить его в немного модифицированый С++ или С или наоборот в него встроить часть С++.
И первое что нужно изменить в С это сделать более универсалные и настраиваимые функции.
Вот пример настраивоимости функций:
int Fun(in: int A1 __reg(EBX), out: int A2 __reg(ECX), inout: int A3 __reg(EAX,EBX)) __reg(EDX) __regnotover(ESI) и тип функции.
если нет модификатора in: out: inout: то щитается что он in
если отсутствует через какой регистыр произходит входы(выходы) переменых и какие регистры програма изменяет не сохраняя их значения, то если это статическая функция, то они настроятся автоматически так чтоб код выполнялся быстрей и был компактней. Если нет то по стандарту C.



Начнем с того, что регистры у разных процов - разные и закончим тем что компилятор получится таким "ОПТИМИЗИРУЮЩИМ", что дальше некуда, а вообще самое лучшее решение это асм с макросами или все таки язык высокого уровня(и сюха в том числе)

4.0K
14 июня 2004 года
wowa
41 / / 16.05.2004
Цитата:
Originally posted by Ramon


Начнем с того, что регистры у разных процов - разные


У меня почти не будет прямое задание регистров, все будет ити через переменые, которые будут виртуалными, а там где это будет надо то будет задаваться отделно для каждого нужного процеса.

Цитата:
Originally posted by Ramon

и закончим тем что компилятор получится таким "ОПТИМИЗИРУЮЩИМ", что дальше некуда


Компилятор не будет пытаться сделать все темиже командами, будет менять их идентичными, перестовлять и выкидывать если они не нуждны и главное это будет тот же компилятор что и C так что можно будет свободно переходить в С и обратно и обявление перемен будет общим. Обявил в С можеш ползоватся в асме, обявил в асме можеш ползоватся в С.

1.9K
14 июня 2004 года
DRVTiny
115 / / 13.12.2003
Цитата:
Originally posted by Green

Это уже все объясняет.
1. Весь этот сыр-бор из-за того, что ты "не перевариваешь" этот язык. А как я уже подмечал, людям кажется, что легче написать что-то свое, чем выучить чужое. Весьма неправильное мнение.
2. Твои знания в С, видимо не простираются далее фигурных скобок и точки с запятой, если ты считаешь это основной проблемой.


Пожалуйста, подтверди свои слова конкретными ссылками. Что-то я сомневаюсь, что компилятор языка ВАСИК является высокоинтелектуальной программой. Прям ИИ какой-то. Хотя, ему таким надо было бы быть в виду низкой подготовки в массе своей программистов на этом языке, чтоб додумывать за них.


А твои разоблачения так же останутся мифами, видимо.
Ты так здорово выделил один компилятор ВАСИКа и сешал в кучу все компиляторы С...
Конкретные данные в студию, плз.


Это достигается не столько инструментарием, сколько профессиональностью его использования. Рубанком тоже нужно научиться строгать, даже электро рубанком.


:D :D :D
Что то я все больше и больше сомневаюсь в твоей компетентности. Без операторных скобок пока не обошелся ни один язык программирования, так же как от символа разделения операторов.
И если в ВАСИКЕ разделитель - это переход на новую строку, так это только вносит путанницу в виду своей визуальной неясности.

Уверен, что по этой же причине тебе не нравятся C++, C#, Perl, PHP, Java и т.д.
Странно, и как это другие программисты с этим живут? Наверное, жутко мучаются... :D


ПОКАЖИ в чем "рогатость" и уродливость.
Они стройны и логичны


Избыточны? Ненаглядны?
Ну про ненагляднось понятно, - это у тебя просто практики, видимо, мало.
А вот где избыточность, можешь ПОКАЗАТЬ?


На чем сделаны выводы о компиляторах?
Конкретную информацию, плз.
Пока это пустоя сотрясание воздуха, человеком, которому мешают программировать операторные скобки. Плохому танцору знаешь, что мешает? Поэтому он изобрел Ламбаду. :D


Человека? Программиста или ламера?


Могу воспринять как личное оскорбление! :D:D


Смелые выводы... необоснованные.


Есть идейка! Используй BASH!

Мне тут ещё другая мысль пришла.
А давай посмотрим, что более элегантно и рационально?
Ты пишешь небольшой код на BASIC, а я пытаюсь повторить его на С или С++. Только, давай использовать классические языки, а не конкретную реализацию. Хотя... можешь использовать и конкретную реализацию, думаю, я справлюсь.


Есть идейка! Используй BASH!
Мне, собствено, не текст BASH'а в таком случае нужен, а таблицы синтаксического анализа и АЛГОРИТМы хэширования, применяемые лексическим анализатором - а то ведь и в самом деле: зачем велосипед в очередной раз изобретать?

Интеллектуальность компиляторов Microsoft BASIC заключается в следующем:
1) Способность корректно распознавать даже не совсем очевидные конструкции типа: if...then...if...then...else...else
- всё, заметьте, в одну единственную, но очень длинную строку.
2) Способность действительно эффективно работать с динамической памятью через тип данных STRING - программисту не нужно париться над созданием одно- двух- связных списков для динамического выделения памяти под строки нефиксированной длины.
Вообще,в BASIC существует огромное количество функций для работы со строковыми переменными (ну, правда, в какой-то степени недостатком этих компиляторов можно считать перманентные неявные преобразования строк статической длины в строки динамической длины - от этого тормоза в программах бывают ей же ей какие...). Понятие "указатель" в MS BASIC'е отсутствует, но с другой стороны - а на черта оно там надо. По-человечески осмыслить суть понятия "указатель" без засорения мозгов всякими там корявыми "&" или "*" можно только программируя на ассемблере (не зря же всё-таки Дональд Кнут приводит примеры реализации алгоритмов, оперирующих сложными структурами данных, именно на нём). Я, кстати, бинарные деревья элементарно реализую через тот же STRING...
3) Мне лично кажется, что способность компилятора адекватно реагировать на бесконечное множество вариантов написания большинства BASIC'овских операторов - тоже дорогоого стоит:
PRINT USING "##.##"; iCount
PRINT "Hello, peace!";" Good bye war!",Year,Month,Day;" Forever young!"+STR$(How_Much_Time_Does_It_Take_You_To%);
LINE (X0,Y0)-(X1,Y1),clrLine%,,,&H7E
а можно и так:
LINE -(X1,Y1)
или так:
LINE (X0,Y0)-(X1,Y1)
Огромное преимущество BASIC'а в том, что текст сначала прогоняется через интерпретатор, создающий промежуточный код, и уже в таком "разжёванном" виде поступает на вход компилятора.
Встроеные средства языка очень гибкие, с помощью одного и того же оператора можно реализовать столько же вариантов выполнения схожих задач, сколько в том же C не реализуется, быть может, даже 10-ю различными функциями.
3) Трансляторы BASIC'совершенно не напрягают непродекларированные переменные, а если присутствие многочиленных опечаток в программе и связанных с ними потенциальных ошибок напрягают меня, то я просто ставлю в начале программы оператор OPTION EXPLICIT, после чего все переменные легализуются только через механизм всяких там DIM Var AS TYPE или DIM SHARED Var AS TYPE
или COMMON Var AS TYPE, ну и т.д.
Вообще, способов заставить транслятор BASIC'а отвергнуть готовый код по причине всяких там "Syntax error'ов", "Type mismatch" и прочих "Variable not declared" на порядок меньше, чем в любой реализации C (кстати, я не уточняю, о какой конкретно реализации идёт речь именно потому, что принципиальных различий между ними нет - C можно только дополнять, а в основе языка лежит стандарт, заложенный ещё создателями UNIX'а)

Я вообще ценю "либеральный" подход к написанию программного кода:
нужно тебе накатать за 5 минут корявенькую программку для вывода какого-нибудь графика на экран - пожалуйста, здесь можно и не заботиться о таких вещах, как объявление переменных и судорожное вспоминание полного списка параметров, предусмотренных для того или иного оператора языка.
нужно создать сложный программный комплекс, исходники которого обязаны удовлетворять всем требованиям структурного программирования и прочей элегантности кода - пожалуйста - всё необходимое в MIcrosoft BASIC'е (ну, кроме, может быть, полноценного ООП - но это мне, например, как стороннику максимальной прозрачности структур данных (т.е. без непонятно на кой чёрт кому нужных искуственных идеологических наслоений), в общем абсолютно "по-барабану" - всё равно концепция инкапсуляции качествено нового в программирование ничего не превносит)

Да и вообще, можете считать меня последним дауном, но мне действительно кажется логичным писать "ТО...ИНАЧЕ..." после "ЕСЛИ..." и "СЛЕДУЮЩИЙ" после "ДЛЯ i=i_start ДО i=i_fin". По крайней мере, если существуют адекватные средства для того, чтобы объяснить компьютеру, чего вообще тебе от него, горемычного, в очередной раз понадобилось на нормальном человеческом языке (типа "поговори со мной, компьютер") - в данном случае - на почти полноценном английском, то, по-моему, нет никакго смысла городить огород со всеми этими откровенно засоряющими текст программы "знаками марсианского запинания" - ведь Вы же не читаете текст на санскрите, если существует вполне адекватный его перевод на русский ?! Или Вам нужна ";" на месте нормального для любого human-читабельного текста знака перевода строки только для того чтобы почувствовать себя ПРОГРАММИСТОМ - представителем БОГОМ ИЗБРАННОЙ НАЦИИ - типа: вот смотрите, какую я муру не только читать, но ещё и писать умудряюсь - а Вам слабо изучить китайский? А на фига мне это надо, так спрашивается?!
А не устраивают Вас нормальные высокоуровневые языки программирования, обеспечивающие, условно говоря, перевод с "человеческого на компьютерный", ну пишите на том же ассемблере - тогда в тексте программы будет очевидным образом видна вся подноготная "логики" микропроцессора, а не Вашей собственной. Язык C в этом плане, по моему, предоставляет некий откровенно убогий КОМПРОМИСС - всё равно что разговаривать с корейцем через промежуточный перевод на японский. Ну ЗАЧЕМ это надо?

P.S.(0).Text=Кстати, на PowerBASIC'е можно элементарным образом встраивать в код ассемблерные вставки...
P.S.(1).Text= Если уж так нужно Вам знать, с какой такой реализацией C я занком не по наслышке - то вынужден "огорчить" тем, что знаком только с GCC, что в общем, наверное, и понятно, учитывая то, что я сижу и набираю этот текст в kwrite из-под Linux'а , в котором провёл уже более 3-х лет сознательной "виртуальной" жизни. (Кстати, bash'евские реверсные операторные скобки: case...esac или if.else..fi кажутся мне вполне адекватным решением - может, даже получше BASIC'овских SELECT CASE...END SELECT | IF...ELSE...ELSEIF...END IF будут - стоит подумать над этим вопросом...)

3
14 июня 2004 года
Green
4.8K / / 20.01.2000
Давай все же говорить о BASIC и C++, раз спор зашел о языках высокого уровня.

Цитата:
Originally posted by DRVTiny

Интеллектуальность компиляторов Microsoft BASIC заключается в следующем:
1) Способность корректно распознавать даже не совсем очевидные конструкции типа: if...then...if...then...else...else
- всё, заметьте, в одну единственную, но очень длинную строку.


Вау! В одну строку! Это круто?
А что в этом крутого и удобного?

Цитата:
Originally posted by DRVTiny

2) Способность действительно эффективно работать с динамической памятью через тип данных STRING - программисту не нужно париться над созданием одно- двух- связных списков для динамического выделения памяти под строки нефиксированной длины.


А что на счет STL в С++?

Цитата:
Originally posted by DRVTiny

Понятие "указатель" в MS BASIC'е отсутствует, но с другой стороны - а на черта оно там надо. По-человечески осмыслить суть понятия "указатель" без засорения мозгов всякими там корявыми "&" или "*" можно только программируя на ассемблере (не зря же всё-таки Дональд Кнут приводит примеры реализации алгоритмов, оперирующих сложными структурами данных, именно на нём).


А в чем сложность с указателями? Если для тебя это большая сложность, то сомневаюсь, что ты вообще когда-нибудь писал что-то серьезное.

Действительно, зачем засорять мозги, тем более при написании ОС? Дело то плевое.
А давайте сделаем авиа-конструктор, чтоб любой человек не знающий аэродинамики (зачем засорять мозги всякими там углами атаки, удлинением, качеством...) смог собрать свою модель сверхзвукового самолета.

Цитата:
Originally posted by DRVTiny

Я, кстати, бинарные деревья элементарно реализую через тот же STRING...


А еще можно через ж...
Хотя через STRING - это примерно тоже самое.

Цитата:
Originally posted by DRVTiny

3) Мне лично кажется, что способность компилятора адекватно реагировать на бесконечное множество вариантов написания большинства BASIC'овских операторов - тоже дорогоого стоит:
PRINT USING "##.##"; iCount
PRINT "Hello, peace!";" Good bye war!",Year,Month,Day;" Forever young!"+STR$(How_Much_Time_Does_It_Take_You_To%);
LINE (X0,Y0)-(X1,Y1),clrLine%,,,&H7E
а можно и так:
LINE -(X1,Y1)
или так:
LINE (X0,Y0)-(X1,Y1)


Поразили слова "бесконечное множество".
Программирование все же область, которой совсем не чуждо точность и конкретика.

Цитата:
Originally posted by DRVTiny

Огромное преимущество BASIC'а в том, что текст сначала прогоняется через интерпретатор, создающий промежуточный код, и уже в таком "разжёванном" виде поступает на вход компилятора.


Ты что-нибудь слышал о предкомпиляторе C/C++?

Цитата:
Originally posted by DRVTiny

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


:D:D
Что-то я не понимаю, что ты имеешь в виду...

Цитата:
Originally posted by DRVTiny

3) Трансляторы BASIC'совершенно не напрягают непродекларированные переменные, а если присутствие многочиленных опечаток в программе и связанных с ними потенциальных ошибок напрягают меня, то я просто ставлю в начале программы оператор OPTION EXPLICIT, после чего все переменные легализуются только через механизм всяких там DIM Var AS TYPE или DIM SHARED Var AS TYPE
или COMMON Var AS TYPE, ну и т.д.
Вообще, способов заставить транслятор BASIC'а отвергнуть готовый код по причине всяких там "Syntax error'ов", "Type mismatch" и прочих "Variable not declared" на порядок меньше, чем в любой реализации C


Ты считаешь это преимуществом?
Странно, я наоборот, недостатком.

Цитата:
Originally posted by DRVTiny

Я вообще ценю "либеральный" подход к написанию программного кода:


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

Цитата:
Originally posted by DRVTiny

Да и вообще, можете считать меня последним дауном, но мне действительно кажется логичным писать "ТО...ИНАЧЕ..." после "ЕСЛИ..." и "СЛЕДУЮЩИЙ" после "ДЛЯ i=i_start ДО i=i_fin".


А разве в других языках иначе?

Цитата:
Originally posted by DRVTiny

По крайней мере, если существуют адекватные средства для того, чтобы объяснить компьютеру, чего вообще тебе от него, горемычного, в очередной раз понадобилось на нормальном человеческом языке (типа "поговори со мной, компьютер")


А в чем в данном случае BASIC отличается от С/С++?
Тем, что вместо ';' ставим '\n'?
О, гиганские отличия!

Цитата:
Originally posted by DRVTiny

Или Вам нужна ";" на месте нормального для любого human-читабельного текста знака перевода строки только для того чтобы почувствовать себя ПРОГРАММИСТОМ


Только для того, чтоб точно указать компилятору, что я закончил свою мысль. Для того, чтоб записать несколько операторов в одну строку, если я считаю, что это логично и более читабельно.
Для того, чтоб разбить запись на несколько строк, если мне так удобнее. Так что на счет удобства BASIC, здесь большой вопрос.

Цитата:
Originally posted by DRVTiny

А не устраивают Вас нормальные высокоуровневые языки программирования, обеспечивающие, условно говоря, перевод с "человеческого на компьютерный", ну пишите на том же ассемблере - тогда в тексте программы будет очевидным образом видна вся подноготная "логики" микропроцессора, а не Вашей собственной. Язык C в этом плане, по моему, предоставляет некий откровенно убогий КОМПРОМИСС - всё равно что разговаривать с корейцем через промежуточный перевод на японский. Ну ЗАЧЕМ это надо?


Ну хотя бы для того, чтоб не привязываться к конкретной платформе.

Что-то я так и не понял преимуществ...
А почему ты не указал, что в BASIC не имеет значения регистр? Тоже ведь большое преимущество!

Краткое резюме того, что я понял из твоего повествования.
Ты предлагаешь разработать новый язык на основе BASIC, т.к. он очень круто работает со строками, ему не нужны головоломные указатели и он реже выдает сообщения об ошибках.
Класс! Каждый сможет написать ОС, котрая основана на строковых переменных!

P.S. Извините, но это детсад какой-то...
Может, кто-нибудь приведет более солидные аргументы, а то теряю всякий интерес к данному спору.

1.8K
15 июня 2004 года
Sanya DLR
123 / / 03.03.2004
Впечатление, что цель обсуждения не в создании чего-либо, а в получении разрешения на свою мысль.
У меня тоже идея есть! Надо написать препроцессор для ассемблера. Типа такая прога, которая будет переводить какие кому надо конструкции в синтаксис некоторого компилятора ассемблера.
Например: повторяем 10 раз функция1
А оно нам:
L095334:
mov cx,10
call F347843
loop L095334

А может еще и CX сохранит, исходя из текста вызываемой функции.
Вобщем смысл в том, что это вроде как макросы, только не встроенными средствами, а именно как ПРЕПРОЦЕССОР.
Можно такую интеллектуальную обработку заделать, что не каждый программист сумеет оптимизировать лучше, когда будет писать на асме.
Меня как-то никогда не волновала скорость компиляции проги на ассемблере (они обычно маленькие). Так что интеллектуальный препроцессор иногда был бы очень полезен.
И самое главное - на выходе получается текст на асме и его можно еще править. (кстати вместо L095334 и F347843 можно использовать что-нибудь более понятное).

И некстати: а зачем вам СВОЙ язык программирования (как вариант окончания вопроса: СВОЯ ОС)? Не, ну все таки? Вы на нем писать потом собираетесь, да? (вопрос всем)
3
15 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Sanya DLR
И некстати: а зачем вам СВОЙ язык программирования (как вариант окончания вопроса: СВОЯ ОС)? Не, ну все таки? Вы на нем писать потом собираетесь, да? (вопрос всем)



Да не... Я так понимаю процесс ради самого процесса.
Типа, а смогём космический корабль построить в гараже?

P.S. Предлагаю концепцию летающих шаров, т.к. концепция летающих тарелок уже давно устарела. А все эти двигатели, ступени - это вообще избыточная "рогатость" какая-то, Циолковский явно не заботился ни об удобстве работников ракетостроительной области, ни об удобстве космонавтов. Его больше интересовали характеристики и скорость (1-я, 2-я и 3-я космическая). Ни на секунду нельзя отвлечься от этих "протяжек", "продувок", "ключ на старт".

По крайней мере, если существуют адекватные средства для того, чтобы объяснить кораблю, куда вообще тебе, горемычному, в очередной раз понадобилось, на нормальном человеческом языке (типа "поговори со мной, корабль") - в данном случае - на почти полноценном английском, то, по-моему, нет никакго смысла городить огород со всеми этими откровенно засоряющими панель и брюхо корабля ручками, кнопками, гироскопами и прочими "органами марсианского управления" - ведь Вы же не изучаете карту и дорожные знаки, если существует такси "Миллион"?!
:D

P.P.S. Надеюсь, народ ещё в состоянии воспринимать критику в шуточной форме.

4.0K
15 июня 2004 года
wowa
41 / / 16.05.2004
Цитата:
Originally posted by Sanya DLR
Впечатление, что цель обсуждения не в создании чего-либо, а в получении разрешения на свою мысль.

И некстати: а зачем вам СВОЙ язык программирования (как вариант окончания вопроса: СВОЯ ОС)? Не, ну все таки? Вы на нем писать потом собираетесь, да? (вопрос всем)


Конечно, ведь первым что пишется на компиляторе это он сам, но так чтоб он мог компилироваться и на более старой версии себя, или на том на основе чего он создан. А вообще это будет модификация С++, или даже это направление куда нужно усовершенствовать С и С++. Вообще-то я не умею писать компилятор. Но как-то я пытался разобраться в исходниках компилятора gcc но там черт ногу сломает.
И мне приходилась писать в gcc вставки из ассемблера из-за того что С не поддерживает некоторые виды команд ассемблера и тоже самое в С занимало бы больше места и выполнялось больше времени.

Вот, например:
register unsigned long A=0;
register unsigned long B=beginAr2DataBf*0x10000;
asm("add %2,%0\n\tadc %1,%1":"=r"(B),"=r"(A):
"g"(beginAr2Data),"0"(B),"1"(A));
beginAr2DataBf=B;
beginN1+=A;
Per=A;
Не проще было бы здесь написать просто:
asm{
add B,beginAr2Data
adc A,A
}
А компилятор бы зная эти команды ассемблера, сам бы скомпилировал эти команды, правильно позаботился об том, чтоб не сбить флаг и заодно оптимизировал их по возможности с программой на С.
Или такой код:
register unsigned long eax asm("eax")=*PTable;
register unsigned long edx asm("edx");
asm("mul %2":"=a"(eax),
"=d"(edx):"r"(countT),"a"(eax));
asm("div %2":"=a"(eax),
"=d"(edx):"r"(countData1),"a"(eax),"d"(edx));
if (edx*2>=countData1) eax++;
*PCountMAr2Data=eax;
countT-=eax;
не проще было бы написать так
unsigned long Table=*PTable,A_H,A_L,Ot,Os;
asm{
mul A_H, A_L, Table, countT
div Ot, Os, A_H, A_L, countData1
}
if (Os*2>=countData1) Ot++;
*PCountMAr2Data=Ot;
countT-=Ot;
И компилятор сам распределит переменные и определит, в каких регистрах они должны быть.
И обычные асемблерные вставки очень тяжело писать и в них могут скрываться ошыбки которые тяжело заметить, например если раздилить эту строчку на две команды:
asm("add %2,%0\n\tadc %1,%1":"=r"(B),"=r"(A):
"g"(beginAr2Data),"0"(B),"1"(A));
то между ними будет сбиваться флаг.

1.8K
16 июня 2004 года
Sanya DLR
123 / / 03.03.2004
Самый дешевый способ программировать с удобствами - это создание препроцессора для своего любимого языка программирования. Тогда не надо лезть ни в какой код. Я исходников компиляторов не читал, но думаю, что разбираться с ними не очень весело.
С другой стороны, логика работы любого компилятора довольно понятна. Если бы была необходимость, то написать свой - не слишком сложно. Но тут надо много чего изучить или спроектировать (в плане количества).
Вывод: меня, например, не радует разбираться без особой необходимости с кодировкой Intel'овских команд - пока легче пользоваться готовым ассемблером, чем писать свой; а для повышения эффективности программирования (буде такое понадобится) использовать описанный выше довесок (в виде отдельной программы).

PS:
Насчет фрагмента
L095334:
mov cx,10
call F347843
loop L095334
- тут я в спешке конечно лоханулся, уж не осуждайте.

PPS: А ежели надобен именно свой с нуля компилятор (для гордости там, или еще для чего), то надо начать с разработки компилятора ассемблера - появится навык, а дальше, глядишь, мысль и сама созреет (если конечно не отомрет).
10
16 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Sanya DLR
А ежели надобен именно свой с нуля компилятор (для гордости там, или еще для чего), то надо начать с разработки компилятора ассемблера - появится навык, а дальше, глядишь, мысль и сама созреет (если конечно не отомрет).


Задача разработки полноценного компилятора, как мне представляется, состоит из двух подзадач:
- разработка синтаксического анализатора
- разработка кодогенератора/оптимизатора

Разработка же компилятора ассемблера мало чего даст в практическом плане. Синтаксический анализатор в ассемблере простой, не в пример проще, по сравнению с Паскалем или, тем более, C++.
Кодогенератор ассемблера сводится к простой замене мнемоник кодами процессора. Оптимизатор отсутствует как класс.

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

1.8K
16 июня 2004 года
Sanya DLR
123 / / 03.03.2004
Как вы себе представляете удобный и эффективный язык (синтаксис) ?
(Ну, кроме того, что он должен быть удобным и эффективным для указанного круга задач...)
10
16 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Sanya DLR
Как вы себе представляете удобный и эффективный язык (синтаксис) ?
(Ну, кроме того, что он должен быть удобным и эффективным для указанного круга задач...)


Мое мнение традиционно - для программирования ОСи подходит универсальный язык: C++, Object Pascal, Java, C#. Синтаксис особенного значения не имеет - был бы оптимизатор эффективным. Понятное дело, что языки с Си-синтаксисом дают больше подсказок для оптимизации, нежели другие.

ОС делает не язык, на котором она написана, а используемые технологии и хорошая объектная модель.

4.0K
16 июня 2004 года
wowa
41 / / 16.05.2004
Цитата:
Originally posted by smartsoft

Задача разработки полноценного компилятора, как мне представляется, состоит из двух подзадач:
- разработка синтаксического анализатора
- разработка кодогенератора/оптимизатора

Разработка же компилятора ассемблера мало чего даст в практическом плане. Синтаксический анализатор в ассемблере простой, не в пример проще, по сравнению с Паскалем или, тем более, C++.
Кодогенератор ассемблера сводится к простой замене мнемоник кодами процессора. Оптимизатор отсутствует как класс.
Понятное дело, что языки с Си-синтаксисом дают больше подсказок для оптимизации, нежели другие


Я говорю не о обычном ассемблере, а о полноценном компиляторе ассемблере с виртуальными переменными, с оптимизатором, с функциями (процедурами).
И это должен получится язык с двойным синтаксисом, переключаемым между собой специальными командами, один синтаксис должен быть от C++ а второй от ассемблера с виртуальными переменными.
А кодогенератор/оптимизатор будет один на двоих.
А недостаток C++ в оптимизации кода это его очень строгие функции.
А для улучшения оптимизации я предлагаю функции сделать более свободными, компилятор водит параметры, через те регистры, через которые ему выгодней или которые заданы.

Я думаю что для начала я создам макросы для команд ассемблера для gcc:
#define _asm_mul(A_H, A_L,B,C) asm("mul %2":"=a"(A_H),"=d"(A_L):"r"(C),"a"(B));
На все команды ассемблера.
И у меня вопрос можно ли в таких командах задавать флаги.
А потом попытаюсь изменить синтаксический блок компилятора gcc и вставить в него свой язык. А функции я пока трогать не буду.

3
16 июня 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by wowa

А для улучшения оптимизации я предлагаю функции сделать более свободными, компилятор водит параметры, через те регистры, через которые ему выгодней или которые заданы.



В VC++ для этого есть спецификатор __fastcall.
В gcc (версии > 2.07) __attribute__((fastcall)).

Кстати, в VC++ есть ещё одна полезная вещь: __declspec(naked)

10
16 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Green
В VC++ для этого есть спецификатор __fastcall.


Кстати, передача параметров через регистры для функций без модификатора __fastcall включается автоматически при выборе оптимизации по скорости.

14K
02 апреля 2006 года
Max aka &quot;amv&quot;
23 / / 02.04.2006
Для написания оси ассемблер AT&T лучше всего - там нет двусмыслия во многих вопросах (чем intel грешит).
Касаемо c и c++ - это лучшие языки программирования. Они созданы хакерами для серьзных целей, на них написана все unix'ы - а они, как известно, лучшие операционки (про Mac'и умолчим - это другой вопрос). А так любимый всеми Васик - язык, продвигаемый мелкософтом как язык для чайников (иначе они не раскрасили бы vb как новогоднюю елку). А самое смешное - они побоялись писать на любимом Васике операционную систему и написали все видоузы на C\C++. Ведущие распространители Васика бояться использовать его для мало-мальских серьезных целей! Смешно, ей богу!
349
02 апреля 2006 года
Phantom-84
656 / / 27.10.2005
Цитата:
Originally posted by Max aka "amv"
Для написания оси ассемблер AT&T лучше всего - там нет двусмыслия во многих вопросах (чем intel грешит).

Синтаксис AT&T на мой взгляд уж слишком точен. Другое дело, что уточняющие служебные слова в разных там макро- и турбоассемблерах тоже не слишком удачны. Но ведь существует достаточное количество ассемблеров, совмещающих синтаксис Intel с более разумными его доработками, чем в упомянутых выше ассемблерах. По поводу Си: мне не нравится синтаксис конструкции множественного выбора, а также объектный синтаксис, но этот язык объективно один из самых лучших!

14K
08 апреля 2006 года
Max aka &quot;amv&quot;
23 / / 02.04.2006
Цитата:
Originally posted by Phantom-84
Синтаксис AT&T на мой взгляд уж слишком точен. Другое дело, что уточняющие служебные слова в разных там макро- и турбоассемблерах тоже не слишком удачны. Но ведь существует достаточное количество ассемблеров, совмещающих синтаксис Intel с более разумными его доработками, чем в упомянутых выше ассемблерах. По поводу Си: мне не нравится синтаксис конструкции множественного выбора, а также объектный синтаксис, но этот язык объективно один из самых лучших!


Соглашусь с обоими мыслями:
1)В AT&T ассемблере действительно надоедает писать везде %eax и т.п. (к примеру)
2)Switch действительно коряво организована, но что касается ООП - лично меня именно она привлекла в стан поклонников С++ (точнее именно способ реализации ООП в C++).

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