реклама на сайте
подробности

 
 
6 страниц V  « < 4 5 6  
Reply to this topicStart new topic
> C++ & Pascal, Помощь утопающим
Сергей Борщ
сообщение Sep 13 2016, 16:51
Сообщение #76


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Den64 @ Sep 13 2016, 17:50) *
Какие конструкции или ключевые слова из языка С компилятор С++ не поймёт?
Ну, например const у глобальных переменных, глобальные переменные с одинаковыми именами без extern в разных единицах трансляции. Оно откомпилируется, но не слинкуется.
QUOTE (Den64 @ Sep 13 2016, 17:50) *
Кто нибудь знает хоть один чисто си современный компилятор?
SDCC.

QUOTE (Den64 @ Sep 13 2016, 17:50) *
Например я С++ называю просто си, без всяких ++. Все знакомые кто в теме тоже говорят просто "сишка" или "писал на сях" и все имеют ввиду С++.
Угу:
QUOTE
-Могу ли я называть себя линуксоидом, если у меня на телефоне установлен Линукс?
-Ты себя еще связистом назови - у тебя же телефон!

(сперто откуда-то)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Sep 13 2016, 17:27
Сообщение #77





Guests






В Rust вообще есть очень "приятная" штука, причем вне блока unsafe - "затенение" переменной.
После такого так и хочется вспомнить какой-либо бейсик..
Я даже представить не могу, чтобы где-то в программе мне захотелось переменную в пределах видимости переделать в переменную другого типа.
Да и вообще, в части терминологии, в Расте столько занятного, что слова порой заканчиваются.

fn main() {
println!("Shadowing!");

let mut x: i32 = 5; // это изменяемая переменная. Если Вы не знали, что переменные могут быт неизменяемыми - Вы Раст не видели.
println!("x = {}", x);

x = 7; // допустимо присвоение значения
println!("x = {}", x);

let x: i32 = 8; // тут мы говорим, что x уже неизменяемая переменная - нормально, да?
println!("x = {}", x);

x = 9; // увы - низя присвоить
println!("x = {}", x);

let x = "Затенение"; // ха-ха - "затеняем" i32 в String
println!("x = {}", x);


} // main
Go to the top of the page
 
+Quote Post
BackEnd
сообщение Sep 13 2016, 18:08
Сообщение #78


Местный
***

Группа: Участник
Сообщений: 201
Регистрация: 28-07-16
Пользователь №: 92 747



Цитата(TSerg @ Sep 13 2016, 10:45) *
Видал я эти "многоосевые", после которых рыдать хочется.

Бывает, но не все же так ужасно biggrin.gif
- Не понимаю чего так все все восхищаются Карузо. Слуха у него нет, голоса нет, картавит, шепелявит, фальшивит...
- А где ты его слышал?
- Да Рабинович вчера напел.


--------------------
"Классики марксизма говорили, что общественно-экономическая формация меняется с изменением средств производства, которые всегда принадлежали имущему классу.
И сейчас мы находимся в системе координат капитализма, когда самые передовые средства производства принадлежат уже не капиталистам.
Люди, у которых нет обуви, имеют гаджеты. Сейчас создана такая информационная паутина, что вместо коллективного бессознательного можно говорить о коллективном сознании.
Если иметь мозги и гаджеты, можно перевернуть весь мир. Коллективное сознание будет управлять миром! Это исторический путь, который нельзя миновать."
Вячеслав Мальцев
Go to the top of the page
 
+Quote Post
brag
сообщение Sep 13 2016, 19:00
Сообщение #79


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
В Rust вообще есть очень "приятная" штука, причем вне блока unsafe - "затенение" переменной.
После такого так и хочется вспомнить какой-либо бейсик..
Я даже представить не могу, чтобы где-то в программе мне захотелось переменную в пределах видимости переделать в переменную другого типа.

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

Цитата
Да и вообще, в части терминологии, в Расте столько занятного, что слова порой заканчиваются.

Да, очень мощный и сложный язык. От людей, которые имеют хороший опыт программирования на нем и плюсах слышал только положительные отзывы(в том числе в сравнении с плюсами), сам пока оценку дать не готов, дам через пол года, как напрактикуюсь немного.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Sep 14 2016, 00:39
Сообщение #80


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Kabdim @ Sep 13 2016, 18:19) *
Дык, последние по такой логике - тот же самый си, только чего-то там добавили, приплели, восторженность всякая и т.д. biggrin.gif
Синтаксис не главная часть языка... даже близко.

Так не с бухты-барахты написал, а посмотрел на примеры программ. Первое, что бросилось в глаза - изобилие восклицательных знаков,
прям не программа. а обращение ЦК КПСС к народу по случаю очередной годовщины. Но после общепризнанного ошибочного включения 'println'
в Паскаль, writeln намекает, что разработчикам в детстве сильно нравился Васик. Синткасис в соновном сишный, слегка разбавленный
паскалеобразными объявлениями типов. Пробежался наискось по оглавлению документации - что-то напоминает очередной язык, который позиционируется как самый быстрый системный язык, который по сложившейся традиции тащит всякий непотреб в виде динамического типов или встроенной потокобезопасности.

По сути язык программирования, можно сравнить с конструктором лего, где его элементы соответсвуют одной или нескольким машинным командам, либо сравнительно небольшому набору (пролог, эпилог функций, фрейм стека для доступа к локальным переменным и прочее). И чем полнее коллекция таких элементов тем богаче язык. Это такие языки как к примеру тот же С/С++ или Объект-Паскаль.
"Богатые возможности" языков в виде "управляемой памяти" или "динамических типов", это уже увесистые кирпичи в таком конструкторе.
Причем ирония состоит в том, что апологеты таких языков еще утверждают что частое использование reinterpret_cast - плохой стиль программирования,
хотя сами употребляют его перманентно по умолчанию, скрыв от программиста.
Поэтому утверждения о силе и мощи этих языков все же спорны. Как по мне, язык без кирпичей и гибче и богаче, и отличаются такие языки лишь синтаксисом.



Go to the top of the page
 
+Quote Post
brag
сообщение Sep 14 2016, 01:51
Сообщение #81


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



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

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

Плохой стиль программирования - это ручное приведение типов, но никак не автоматическая типизация. В ручном приведении, особенно таком, как reinterpret_cast, а хуже того - C-cast ни компилятор, ни рантайм не знают что там к чему приводится и как, вся ответственность лежит на программисте.
А в автоматическом преобразовании типов всем рулит автомат(а не человек), который и отвечает за корректность работы этого механизма. Динамическая типизация - это динамический полиморфизм - очень мощная техника на нынешнее время, без нее сейчас никак.

Цитата
Как по мне, язык без кирпичей и гибче и богаче, и отличаются такие языки лишь синтаксисом.

Самый богатый язык и без кирпичей вообще - это машинный код. Без запретов, без ограничений, без правил.
Go to the top of the page
 
+Quote Post
Den64
сообщение Sep 14 2016, 02:18
Сообщение #82


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Цитата(brag @ Sep 14 2016, 04:51) *
Самый богатый язык и без кирпичей вообще - это машинный код. Без запретов, без ограничений, без правил.

Нужна золотая середина. И для каждого видимо она своя. И ещё для разных задач "лучше" могут быть разные языки(сам не понял, что написал. Но смысл думаю понятен)
Go to the top of the page
 
+Quote Post
brag
сообщение Sep 14 2016, 03:06
Сообщение #83


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Золотая середина это такая, где программист и процессор делают минимум работы, а компилятор - максимум.
Но и тут приходится искать середину, отдавая доп. работу либо процессору, либо компилятору, либо программисту, иначе программы либо очень тормозят, либо очень долго пишутся и долго ищутся и правятся баги, либо очень долго компилируются.
Задача современных языков - как раз таки найти эту середину и каждый язык решает ее по своему, и не каждое такое решение подходит под конкретную задачу или конкретному программисту. Многие настолько зависимы от С, что даже плюсы им не под силу, не говоря уже про другие языки со слегка другим синтаксисом, он им гораздо важнее других вещей. Я их понимаю, сам такой, но все равно пытаюсь осваивать.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Sep 14 2016, 07:28
Сообщение #84


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(brag @ Sep 14 2016, 04:51) *
Глупо давать оценку столь сложному языку, просто пробежавшись по оглавлению, не написав на нем ни одной более-менее серьезной программы.

Та я не языку даю оценку, а мне непонятна Ваша подача материала: почему у Вас С++ и Rust парой ходят. Они же принципиально совершенно разные.
Пожалуй даже диаметрально противоположные.

Цитата(brag @ Sep 14 2016, 04:51) *
Динамическая типизация - это динамический полиморфизм - очень мощная техника на нынешнее время, без нее сейчас никак.

Опять рекламный слоган.
Давайте уж своими словами: динамическая типизация - это прежде всего накладные расходы из-за оформления базовых типов в виде классов
из-за неизбежной необходимости табличной обработки операций с ними. Это далеко не ново, и вообще не прогрессивно.
"Безоасный код" или "чистый код" - это не улучшение языка, это удешевление последующей разработки программ.

Цитата(brag @ Sep 14 2016, 04:51) *
Самый богатый язык и без кирпичей вообще - это машинный код. Без запретов, без ограничений, без правил.

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

Это еще одно замечательное свойство С/С++: за ним всегда приблизительно видны те ассемблерные квантики, которые он будет генерировать.

Go to the top of the page
 
+Quote Post
brag
сообщение Sep 14 2016, 08:08
Сообщение #85


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Та я не языку даю оценку, а мне непонятна Ваша подача материала: почему у Вас С++ и Rust парой ходят. Они же принципиально совершенно разные.
Пожалуй даже диаметрально противоположные.

Потому что это пока единственные обьектные языки, позволяющие программировать на голом железе.
Чем больше я изучаю раст, тем больше мне он кажется лучше плюсов. Но это только кажется, оценку я ему смогу дать, и то сугубо личную только тогда, когда сделаю на нем какой нибудь более-менее серьезный проект.

Цитата
Давайте уж своими словами: динамическая типизация - это прежде всего накладные расходы из-за оформления базовых типов в виде классов

Точно такие же расходы(или больше) будут, если эту динамику сделать вручную на С или на асме. А там, где рантайм-поддержка на нужна - компилятор все сделает сам и дотошно проверит программиста, чтобы последний не тупанул, или уменьшит вероятность тупняка.

Цитата
Машинный код, то бишь ассемблер, - это не богатый и не бедный язык, он - единственный для выбранного процессора.

Машинный код богаче ассемблера, он позволяет сделать то, что не позволяет ассемблер (например выполнить недокументированную инструкцию процессора). А ассемблер богаче С, потому что на нем можно сделать то, что нельзя на С - вызывать строго определенные инструкции(документированные) проца в строго определенном порядке.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Sep 14 2016, 08:47
Сообщение #86


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(brag @ Sep 14 2016, 11:08) *
Потому что это пока единственные обьектные языки, позволяющие программировать на голом железе.
Чем больше я изучаю раст, тем больше мне он кажется лучше плюсов.

Согласитесь, что про программирование меги на расте Вы слегка погорячились.

Цитата(brag @ Sep 14 2016, 11:08) *
Точно такие же расходы(или больше) будут, если эту динамику сделать вручную на С или на асме.

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

Цитата(brag @ Sep 14 2016, 11:08) *
Машинный код богаче ассемблера, он позволяет сделать то, что не позволяет ассемблер (например выполнить недокументированную инструкцию процессора). А ассемблер богаче С, потому что на нем можно сделать то, что нельзя на С - вызывать строго определенные инструкции(документированные) проца в строго определенном порядке.

У ассемблера предусмотрена возможность непосредственной вставки (DB, DW) не только недокументированной инструкции,
но и даже отсутствующей в машинном коде инструкции, если вдруг такая бы появилась. Не проще ли считать ассемблер просто машинным кодом та и все.

Сообщение отредактировал aiwa - Sep 14 2016, 08:47
Go to the top of the page
 
+Quote Post
brag
сообщение Sep 14 2016, 09:08
Сообщение #87


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Согласитесь, что про программирование меги на расте Вы слегка погорячились.

https://github.com/avr-rust/rust https://github.com/avr-llvm/llvm пока что криво и с напильником, но работает. Москва тоже не сразу строилась

Цитата
Вы опять уводите в сторону: на С/С++ эту динамику не нужно делать, потому что он не поддерживает динамическую типизацию принципиально.
Динамическая типизация позволяет сделать короче исходный текст программы за счет увеличения рабочего кода и скорости выполнения.
Сомнительное удовольствие. Я уж лучше напишу имя второй переменной.

Можно пример кода? а то я на пальцах плохо понимаю.

Цитата
У ассемблера предусмотрена возможность непосредственной вставки (DB, DW) не только недокументированной инструкции,
но и даже отсутствующей в машинном коде инструкции, если вдруг такая бы появилась. Не проще ли считать ассемблер просто машинным кодом та и все.

В С++ тоже можно делать вставки ассемблерного и машинного кода, но С++ нельзя назвать ни ассемблером, ни машинным кодом sm.gif Делая такую вставку Вы уже пишете не на С++, а на ассемблере или на машинном коде wink.gif Я такие вставки и сам иногда делаю, но по возможности стараюсь избегать.
У ассемблера есть компилятор, который программиста уже проверяет, а у машинного кода и этого нет.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 14 2016, 09:15
Сообщение #88


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ох как резко то всё в холливар скатывается, когда brag начинает рассказывать о новых модных языках и лямбдах в С++ )))))))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 14 2016, 09:24
Сообщение #89


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



aiwa, ну вы всё таки рубите с плеча, не разобравшись. Нельзя так, если конечная цель что-то отличное от флейма.
Восклицательные знаки - обязательная пометка макроса, что бы нельзя было как в си устроить спагети из не очевидных макросов. Зачем они нужны - если бы вы разобрались, выяснилось бы что они скрывают базовый стиль обработки ошибок что бы не заставлять писать лишнее в примерах и там где это не нужно.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Sep 14 2016, 14:01
Сообщение #90


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(brag @ Sep 14 2016, 12:08) *
пока что криво и с напильником, но работает. Москва тоже не сразу строилась.

Судя по конфигурационному файлу пока еще не криво: бэкенд-компилятор стандартный LLVM, а фронт-енд компилятор - СLang или GCC.
Таким макаром можно писать для AVR хоть на турецком. Посмотрим, когда построится Москва, сколько прогрессивного будет зарублено
и насколько он будет отличаться от собратьев.

Цитата(brag @ Sep 14 2016, 12:08) *
Можно пример кода? а то я на пальцах плохо понимаю.


Берем пример из раста подаваемый динамическое типизирование как прогрессивное преимущество:
{
а = 5; // это тип u32

a = "abcd"; // а это та же переменная, но имеющая совершенно другой тип.
}

с С++ уже надо вводить другую переменную:
{
u32 а = 5; // это тип u32

char b[] = "abcd"; //
}

C++ выделяет в фрейме стека 4 байта для переменной а и на этом накладные расходы заканчиваются. Информацию об "а" он хранит во время компиляции
и просто генерирует команды 32-битной обработки. Раст же поместит в 4-байта в стеке указатель на участок памяти, который содержит непосредственно саму
переменную "а", и информацию о ее типе, скорее всего в виде таблицы вызовов кода команд 32-ти битной обработки. Грубо говоря оформление типа u32
в виде класса с виртуальными функциями базовых операций 32-х разрядной арифметики.
Поэтому вместо одной ассемблерной команды для a+=5 в случае статического типизирования, раст вынужден будет выполнять call или jump на эту функцию сложения u32-типа.
Могу ошибаться, но мелкософтные делфи, которые обозвали шарпом делают именно так: Все типы происходят от одного предка. Оставленные для совместимости "int" да "char" соответствуют классам TInt и TChar.
И запись "int a = 5" означает "создать в управляемой куче объект класса Tint и инициализировать его 5." Названия, естественно, условны - передана лишь суть.

Цитата(Kabdim @ Sep 14 2016, 12:24) *
aiwa, ну вы всё таки рубите с плеча, не разобравшись. Нельзя так, если конечная цель что-то отличное от флейма.

Так вроде бы и не сплеча: предварил, что языка не знаю и оцениваю только синтаксис. Причем такая оценка априори субъективна.

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


Сообщение отредактировал aiwa - Sep 14 2016, 13:48
Go to the top of the page
 
+Quote Post

6 страниц V  « < 4 5 6
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016